CentOS 升级内核(RPM包&源码编译)

Grub 配置参考文档:https://wiki.centos.org/HowTos/Grub2

使用 ELRepo 升级内核

网址:http://elrepo.org/

PS: 使用 ELRepo 升级内核需要访问公网,并且升级的内核版本为较新的稳定版本。如果无法访问公网,可以直接下载 rpm 包进行升级;如果想要升级到指定版本,则需要下载源码包编译升级。

1 导入公钥

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

2 安装 repo 仓库包

rpm -Uvh https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm

3 查看repo有多少个包(关闭所有repo,开启kernel的repo)

[root@kernel-update ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
repo id                                            repo name                                                                                           status
elrepo-kernel                                      ELRepo.org Community Enterprise Linux Kernel Repository - el7                                       37
repolist: 37

4 查看 kernel 的包(lt:长期稳定版ml:最新版)

[root@kernel-update ~]# yum --disablerepo=\* --enablerepo=elrepo-kernel list kernel*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * elrepo-kernel: mirrors.tuna.tsinghua.edu.cn
Installed Packages
kernel.x86_64                                                                 3.10.0-1160.el7                                                   @anaconda    
kernel-headers.x86_64                                                         3.10.0-1160.25.1.el7                                              @updates     
kernel-tools.x86_64                                                           3.10.0-1160.el7                                                   @anaconda    
kernel-tools-libs.x86_64                                                      3.10.0-1160.el7                                                   @anaconda    
Available Packages
kernel-lt.x86_64                                                              5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-lt-devel.x86_64                                                        5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-lt-doc.noarch                                                          5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-lt-headers.x86_64                                                      5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-lt-tools.x86_64                                                        5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-lt-tools-libs.x86_64                                                   5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-lt-tools-libs-devel.x86_64                                             5.4.123-1.el7.elrepo                                              elrepo-kernel
kernel-ml.x86_64                                                              5.12.8-1.el7.elrepo                                               elrepo-kernel
kernel-ml-devel.x86_64                                                        5.12.8-1.el7.elrepo                                               elrepo-kernel
kernel-ml-doc.noarch                                                          5.12.8-1.el7.elrepo                                               elrepo-kernel
kernel-ml-headers.x86_64                                                      5.12.8-1.el7.elrepo                                               elrepo-kernel
kernel-ml-tools.x86_64                                                        5.12.8-1.el7.elrepo                                               elrepo-kernel
kernel-ml-tools-libs.x86_64                                                   5.12.8-1.el7.elrepo                                               elrepo-kernel
kernel-ml-tools-libs-devel.x86_64                                             5.12.8-1.el7.elrepo                                               elrepo-kernel

5 安装稳定版本的内核

yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt.x86_64  -y

6 删除老版本的内核工具包

yum -y remove kernel-tools-libs.x86_64 kernel-tools.x86_64

7 安装稳定版本的内核工具包

yum --disablerepo=\* --enablerepo=elrepo-kernel install kernel-lt-tools.x86_64 -y

8 查看 /etc/grub2.cfg 中内核加载的顺序

[root@kernel-update ~]# grep "^menuentry" /etc/grub2.cfg | cut -d "'" -f2
CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-930bf0b117f04d2799337a7387203b68) 7 (Core)

9 查看默认加载的内核

[root@kernel-update ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)

10 修改默认加载的内核

[root@kernel-update ~]# grub2-set-default 'CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)'
#查看
[root@kernel-update ~]# grub2-editenv list
saved_entry=CentOS Linux (5.4.123-1.el7.elrepo.x86_64) 7 (Core)

#or

#0 表示加载 /etc/grub2.cfg 中第一个内核
[root@kernel-update ~]# grub2-set-default 0
#查看
[root@kernel-update ~]# grub2-editenv list
saved_entry=0

11 重启验证

reboot
#查看
[root@kernel-update ~]# uname -a
Linux template 5.4.123-1.el7.elrepo.x86_64 #1 SMP Fri May 28 09:57:53 EDT 2021 x86_64 x86_64 x86_64 GNU/Linux

·

注意事项

CentOS 7 升级内核后出现告警 “pstore: unknown compression: deflate”,这并不影响系统的正常启动,只是在 VGA 接口连接的显示器无法正常显示。

相关错误参考链接:https://elrepo.org/bugs/view.php?id=668

解决方法:
1 将 mgag200.modeset = 0 添加到内核启动选项 /etc/default/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet ipv6.disable=1 mgag200.modeset=0"
GRUB_DISABLE_RECOVERY="true"

2 使用 grub2-mkconfig 创建一个新的 grub 配置

grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
#grub2-mkconfig -o /boot/grub2/grub.cfg

·

源码编译升级内核

源码下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/

源码包中的文档包含很多重要信息,比如:

  • README:包含编译的步骤信息
  • Documentation/Changes:包含编译时需要的依赖包和版本要求(并非所有系统都需要所有工具)
  • Documentation/00-INDEX:包含关于每个文件的信息
  • Documentation/DocBook/ 子目录:为内核开发人员和用户提供了一些指南。

1 下载&解压源码包

tar xvf linux-4.4.228.tar.gz

2 确保没有过时的 .o 文件和依赖项

cd linux-4.4.228/
make mrproper

3 查看依赖包及版本要求(Documentation/Changes)

#我这里选择直接安装,至于没有的包也不必担心
#+ 因为 Changes 也指出了:并非需要所有工具
yum -y install gcc make binutils util-linux kmod e2fsprogs jfsutils reiserfsprogs xfsprogs squashfs-tools btrfs-progs  pcmciautils quota-tools PPP isdn4k-utils nfs-utils procps oprofile udev grub mcelog iptables openssl bc

#PS:我的 repo 源是阿里的源

4 使用菜单窗口(menuconfig)生成配置文件 “.config”

#编译内核时,所有输出文件将默认为与内核源代码一起存储
#+ 使用选项 "make O=output/dir" 指定一个输出位置
mkdir /opt/build/kernel
make O=/opt/build/kernel menuconfig

报错:找不到 curses.h
在这里插入图片描述

#安装 ncurses-devel
yum -y install ncurses-devel

成功后,会看到如下界面:
在这里插入图片描述

我们保持默认配置,然后 Save,保存的名字为 .config。

[root@kernel-update ~]# ls -a /opt/build/kernel/
.  ..  .config  Makefile  scripts  source

5 编译内核

make O=/opt/build/kernel -j 4

报错:找不到 bio.h
在这里插入图片描述

#安装 openssl-devel
yum -y install openssl-devel

6 编译安装内核

#如果将内核的任何部分配置为 modules,必须执行 "modules_install"
make O=/opt/build/kernel modules_install install

7 查看 /etc/grub2.cfg 中内核加载的顺序

[root@kernel-update ~]# grep "^menuentry" /etc/grub2.cfg | cut -d "'" -f2
CentOS Linux (4.4.228) 7 (Core)
CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-930bf0b117f04d2799337a7387203b68) 7 (Core)

8 查看默认加载的内核

[root@kernel-update ~]# grub2-editenv list
saved_entry=CentOS Linux (3.10.0-1160.el7.x86_64) 7 (Core)

10 修改默认加载的内核

[root@kernel-update ~]# grub2-set-default 0
#查看
[root@kernel-update ~]# grub2-editenv list
saved_entry=0

11 重启验证

reboot
#查看
[root@elk-test linux-4.4.228]# uname -a
Linux elk-test 4.4.228 #1 SMP Tue Jun 1 14:42:44 CST 2021 x86_64 x86_64 x86_64 GNU/Linux

第一次重启的时候,出现一个报错:
在这里插入图片描述

解决方法:

vim /etc/grub2.cfg
# 修改 crashkernel,参考地址:https://blog.51cto.com/woymk/1621341
crashkernel=256M

版权声明:本文为qq_43584691原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。