柴少的官方网站 技术在学习中进步,水平在分享中升华

Linux编译升级内核

#排查容器的一些问题的时候最终都指向到了linux内核,现在也只有Centos7.9在维护了,但是是3.10的内核,如果想升级内核咋办,网上很多rpm包或者第三方源的方式,我们这里还是采用官网tar包编译安装的方式。小小的记录一下。

官网公布的LTS长期支持版本的列表:https://www.kernel.org/category/releases.html

一、编译升级至4.x

第一步:去官网下载

https://www.kernel.org/

我们这里下载4.x的最新版本:# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.19.280.tar.xz

第二步:进行相关yum依赖安装

#yum -y install gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel  flex  bison  libelf-devel 

第三步:开始编译安装

#tar xf linux-4.19.280.tar.xz

#cd  linux-4.19.280/

make mrproper  #去除内核的依赖关系及编译后的垃圾信息(如果第一次编译可以不需要执行)

#cp /boot/config-3.10.0-1160.el7.x86_64 ./.config    #没错我们使用现有的内核配置

# sh -c 'yes ""|make oldconfig'   #这样就不用老回车了

# make -j16 all   #时间非常长,可以喝杯咖啡了

image.png

#make modules_install  -j 16 #安装模块,但是有个问题啊,如果什么参数都不加你会发现安装的内核目录非常大可能3GB,是因为编译出来的ko文件里有很多debug信息,所以要执行make INSTALL_MOD_STRIP=1 modules_install -j 16,如果已经安装了可以进入到/lib/modules/内核目录下面执行bash -c 'find . -iname "*.ko" | xargs strip --strip-unneeded'  进行清理,这样空间就降下来了。当然你要觉得占用空间无所谓可以什么参数都不加。
#不过我看4.x和5.x是需要这样的,但是6.x内核不加这个参数编译出来的内核目录也是300MB以内的。

image.png

#make install  -j 16 #安装内核相关文件  

image.png

# ls -l /lib/modules/  #查看一下安装完毕后的效果

image.png

第四步: 设置默认启用新内核版本启动

# cat /boot/grub2/grub.cfg | grep menuentry   #查看系统可用内核 

image.png

#grub2-set-default 'CentOS Linux (4.19.280) 7 (Core)'  #修改开机默认使用的内核

第五步: 重启机器使新内核生效

# reboot

# uname -r   #查看当前内核版本

4.19.280

博文来自:www.51niux.com

注:至此我们操作系统的内核版本已升级完毕。但是吧有一个小坑,我们现在操作系统还是Centos7.9的,如果你一旦yum update进行全面更新的话,比如这次升级涉及到内核版本,那就尴尬了,一旦机器reboot就又变回3.x的内核版本了。所以如果你进行了yum update之后,切记执行下grub2-set-default 'CentOS Linux (4.19.280) 7 (Core)' ,将启动内核版本修改回来。


二、编译升级至5.x

#如果centos7.9升级到5.x还有点麻烦还得把gcc重新编译一次,因为gcc版本过低

# sh -c 'yes ""|make oldconfig'

***
*** Compiler is too old.
***   Your GCC version:    4.8.5
***   Minimum GCC version: 5.1.0
***
scripts/Kconfig.include:44: Sorry, this compiler is not supported.
make[2]: *** [oldconfig] 错误 1
make[1]: *** [oldconfig] 错误 2
make: *** [__sub-make] 错误 2

image.png

2.1 重新编译GCC

第一步下载相关软件包:

#我这边直接进入阿里云的镜像站下载了https://mirrors.aliyun.com/gnu/

# wget https://mirrors.aliyun.com/gnu/gmp/gmp-6.2.1.tar.xz

# wget https://mirrors.aliyun.com/gnu/mpfr/mpfr-4.2.0.tar.gz

# wget https://mirrors.aliyun.com/gnu/mpc/mpc-1.3.1.tar.gz

# wget https://mirrors.aliyun.com/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz

#并且全部解压

# tar xf gmp-6.2.1.tar.xz

# tar xf mpfr-4.2.0.tar.gz

# tar xf  mpc-1.3.1.tar.gz

# tar xf gcc-12.2.0.tar.gz

第二步开始编译:

# cd gmp-6.2.1/

# ./configure --prefix=/usr/local/gmp

# make -j 4 && make install

# cd ../mpfr-4.2.0/

# ./configure --prefix=/usr/local/mpfr --with-gmp=/usr/local/gmp

# make -j 4 && make install

# cd ../mpc-1.3.1/

# ./configure --prefix=/usr/local/mpc --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr

# make -j 4 && make install

# cd ../gcc-12.2.0/

# echo 'export LD_LIBRARY_PATH=/usr/local/mpfr/lib:$LD_LIBRARY_PATH' >>/etc/profile

# source /etc/profile

# ./configure --prefix=/usr/local/gcc/ --enable-checking=release --enable-languages=c,c++ --disable-multilib --with-gmp=/usr/local/gmp --with-mpfr=/usr/local/mpfr --with-mpc=/usr/local/mpc

#make -j 4 && make install

第三步修改gcc路径:

# mv /usr/bin/gcc /usr/bin/gcc485

# mv /usr/bin/g++ /usr/bin/g++485

# mv /usr/bin/c++ /usr/bin/c++485

# mv /usr/bin/cc /usr/bin/cc485

# ln -s /usr/local/gcc/bin/gcc /usr/bin/

# ln -s /usr/local/gcc/bin/g++ /usr/bin/

# ln -s /usr/local/gcc/bin/c++ /usr/bin/

# ln -s /usr/local/gcc/bin/gcc /usr/bin/cc

# mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak

# ln -s /usr/local/gcc/lib64/libstdc++.so.6.0.30 /usr/lib64/

# ln -s /usr/local/gcc/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6   #缺少这个polkit启动失败

# gcc -v  #查看一下gcc版本image.png

2.2 编译安装5.x内核

# wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.108.tar.xz   #下载新内核

跟上面的4.x步骤一模一样,就不累述了

编译完后最后来个#grub2-set-default 'CentOS Linux (5.15.108) 7 (Core)'  然后reboot机器就可以了

# uname -r

5.15.108
留言列表
发表评论
来宾的头像