CentOS 7编译安装
一、CentOS 7编译安装Linux内核6.5.2
1、安装编译环境
执行yum groupinstall "Development Tools" y
和yum install y openssldevel rpmbuild redhatrpmconfig asciidoc hmaccalc perlExtUtilsEmbed pesign xmlto auditlibsdevel binutilsdevel elfutilsdevel elfutilslibelfdevel ncursesdevel newtdevel numactldevel pciutilsdevel pythondevel zlibdevel rpmbuild
命令以安装编译所需的工具链。
2、更新GCC版本
由于CentOS 7自带的GCC版本较低,需更新至更高版本,执行yum install centosreleasescl devtoolset8gcc* y
和scl enable devtoolset8 bash
命令,启用多版本GCC共存。
3、下载内核源代码并解压
从清华大学镜像源下载Linux Kernel 6.5.2的源代码包,执行wget HTTPS://mirrors.tuna.tsinghua.edu.cn/kernel/v6.x/linux6.5.2.tar.gz
和tar zxvf linux6.5.2.tar.gz
命令进行下载和解压。
4、配置内核
使用make menuconfig
命令进入配置界面,或根据现有内核参数生成新的配置参数文件,执行cp /boot/config3.10.01160.95.1.el7.x86_64 .config
和make oldconfig
命令进行配置。
5、编译安装内核
执行make j 12 all
和make INSTALL_MOD_STRIP=1 modules_install && make modules_install && make install
命令进行编译和安装。j 12
参数表示使用12个CPU核心进行并行编译。
6、设置启动项
执行sudo awk F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg && sudo grub2setdefault 0 && sudo grub2mkconfig o /boot/grub2/grub.cfg
命令,设置默认从新内核启动。
7、编译成RPM包
执行make rpmpkg j 12
和make INSTALL_MOD_STRIP=1 rpmpkg j 12
命令,编译出可在其他CentOS 7机器上直接安装升级内核的RPM包。
8、删除多余内核
使用uname a
命令查看当前使用的内核,确认新内核已成功安装并设置为默认启动项。
CentOS 7编译安装GCC 7.5
1、更新系统及安装相关包
执行sudo yum y update
和sudo yum y install bzip2 wget gcc gccc++ gmpdevel mpfrdevel libmpcdevel make zlib zlibdevel
命令,更新系统并安装必要的软件包。
2、下载GCC 7.5工程文件
执行wget https://ftp.gnu.org/gnu/gcc/gcc7.5.0/gcc7.5.0.tar.gz
和tar zxvf gcc7.5.0.tar.gz
命令,下载并解压GCC 7.5的源代码。
3、安装依赖包
执行./contrib/download_prerequisites
命令,下载GCC编译所需的依赖包。
4、生成Makefile文件
执行cd gcc7.5.0
和../configure enablebootstrap enableshared enablethreads=posix enablechecking=release withsystemzlib enable__cxa_atexit disablelibunwindexceptions enablegnuuniqueobject enablelinkerbuildid withlinkerhashstyle=gnu enablelanguages=c,c++,go,lto enableplugin enableinitfiniarray disablelibgcj enablegnuindirectfunction withtune=generic disablemultilib
命令,生成Makefile文件。
5、编译和安装
执行make j4
和make install
命令,进行编译和安装。j4
参数表示使用4个CPU核心进行并行编译。
6、更新动态库
检查编译生成的动态库版本,替换旧版本的动态库,并更新环境变量,执行find / xdev name "libstdc++.so*"
、cp /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64
、rm rf /usr/lib64/libstdc++.so.6
和ln s /usr/local/lib64/libstdc++.so.6.0.24 /usr/lib64/libstdc++.so.6
命令。
7、编辑环境变量
在~/.bash_profile
文件中追加PATH=$PATH:$HOME/.local/bin:$HOME/bin:/usr/local/bin
、LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
、CC=/usr/local/bin/gcc
和CXX=/usr/local/bin/g++
路径,并执行source ~/.bash_profile
命令使配置生效。
FAQs
1、问题:为什么需要更新GCC版本?
回答:CentOS 7自带的GCC版本较低(4.8.5),不支持C++17等较新的标准,为了编译最新的软件或内核,需要更新到支持这些新特性的GCC版本。
2、问题:编译内核时如何选择并行编译的任务数?
回答:可以根据虚拟机或物理机的CPU核心数来选择,如果虚拟机分配了12个CPU核心,可以使用j 12
参数进行并行编译,以提高编译速度。
3、问题:如何验证新内核是否安装成功并设置为默认启动项?
回答:使用uname a
命令查看当前使用的内核版本,确认新内核已成功安装,通过编辑/etc/grub2.cfg
文件或执行相关命令,设置新内核为默认启动项,重启系统后,再次使用uname a
命令验证新内核是否生效。
4、问题:编译GCC时出现依赖错误怎么办?
回答:确保已安装所有必要的依赖包,如果缺少某个依赖包,可以手动下载并安装,检查Makefile文件中的配置选项是否正确,如果问题仍然存在,可以查阅官方文档或社区论坛寻求帮助。
5、问题:如何在CentOS 7上离线安装GCC?
回答:在其他有网络连接的机器上下载GCC及其依赖包的RPM文件,将这些RPM文件复制到CentOS 7机器上,并使用yum localinstall
命令进行安装,注意,可能需要解决依赖关系问题,确保所有必要的依赖包都已下载并安装。