可能关注我博客更新的同学有点印象,我是一直在使用 CentOS 的,但是,随着 Linux Kernal 版本的不断更新以及 CentOS 自身的版本不断更新,我本地的内核已经有点旧了,以至于一些新的特性和软件无法正常的使用,所以我决定升级一把 Kernal。

其实升级 Kernal 是一件费力的事情,因为它的影响其实挺大的,主要原因是系统中的很多软件都是依赖于内核版本的,尤其是那些自己编译安装的软件,即使自身不依赖于内核版本,但是它的依赖工具等是和内核有关的,所以,当我升级完内核之后,还有一大堆软件需要我重新编译安装。但是这些都不是重点,这篇文章主要是记录一下我是如何升级内核的,我的原始内核是 3.10 版本,比较旧了,然后准备一次性升级到最新的版本 5.0 ,直接跳过了 4.x 版本。

第一步:升级系统软件

作为常规操作,第一步肯定是要先升级一下系统的原有软件,因为后续可能有些步骤可能会依赖于一些已经安装的软件,减少后续的麻烦,所以需要执行一下升级操作:

[[email protected]]# yum -y update

第二步:添加 elrepo 源

要升级内核,肯定要有源,这里我使用的是 elrepo 源,通过以下步骤添加:

第三步:安装新内核

现在可以开始安装新的内核了,为了其他源的影响,在使用的时候需要指定一下源:

[[email protected]]# yum --enablerepo=elrepo-kernel install kernel-ml

安装完毕之后就可以了。

第四步:设置 grub2

在第三步我已经安装好了新的内核,现在可以查看一下系统中的所有内核:

[[email protected]]# sudo awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
0 : CentOS Linux (5.0.7-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-957.10.1.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-957.1.3.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-a3a5fb49fbb1460284f9555176a03f2e) 7 (Core)

我这里已经设置了新的内核为默认启动的,你如果按照这个步骤安装,应该是没有的,那么需要以这个步骤设置:

[[email protected]]# sudo grub2-set-default 0
[[email protected]]# sudo grub2-mkconfig -o /boot/grub2/grub.cfg
[[email protected]]# sudo reboot

这第一句的后面一个数字 0 就是设置哪个内核为默认内核,第二句是将配置持久化到系统配置,然后第三句重启系统,你会发现如果不手动干预的情况下,系统会默认从新的内核启动。

启动之后,你可以查看一下当前的内核版本:

[[email protected]]# uname -msr
Linux 5.0.7-1.el7.elrepo.x86_64 x86_64

【可选】第五步:移除旧版本内核

如果你觉得旧版本的内核占用了你的空间,那么不妨删除他们,方式也很简单:

[[email protected]]# yum install yum-utils
[[email protected]]# package-cleanup --oldkernels

收工了事,但是,当我升级完毕之后,准备编译安装其他软件的时候,问题出现了,无论我怎么操作,编译依赖的 kernal-devel 版本都是旧的。

第六步:升级 kernal-devel

升级完内核之后,我查看一下 kernal-devel 的版本:

[[email protected]]# cd /usr/src/kernels/
[[email protected]]# ls -l
3.10.0-957.10.1.el7.x86_64

很明显,和我现在的系统内核版本不匹配,所以没办法,只能找办法升级一波。首先,必须说 yum install kernel-devel 肯定是行不通的,因为系统默认的源还是旧版本的,可能需要修改好多个 repo 来 fix 这个版本,而且还不知道能不能完全修复完,所以我的处理方式比较极端,直接把之前所有的 repo 都先关了,然后添加了第二步的 repo。

然后就开始安装新的 kernel-devel 了:

[[email protected]]# yum --enablerepo=elrepo-kernel install kernel-ml
[[email protected]]# yum --enablerepo=elrepo-kernel -y swap kernel-headers -- kernel-ml-headers
[[email protected]]# yum --enablerepo=elrepo-kernel -y swap kernel-tools-libs -- kernel-ml-tools-libs
[[email protected]]# yum --enablerepo=elrepo-kernel -y install kernel-ml-tools
[[email protected]]# yum -y remove kernel

这样就 OK 了,一切顺利,开始玩耍。

Reference