且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何在CentOS/RHEL上安装或升级新的内核版本

更新时间:2022-07-18 10:45:09

    Linux内核是一个整体的类Unix计算机操作系统内核。通常我们使用的Linux发行版,如Red Hat、Debian、SUSE等,这些都称为Linux的分发版。一个典型的分发版,是由Linux内核,以及支持的许多由GNU项目提供的应用程序、GNU组件,C标准库,CLI shell,X windows等组成的一个完整操作系统。我们应该要知道的是,Linux的定义仅仅是Linux内核,所有的”Linux”发行版实际上是以Linux为内核的GNU系统的版本。不同的Linux内核版本都有其生命周期,Linux内核组织或Linux发行版厂商只在该日期提供错误或漏洞修复,我们可以从从内核的版本号区分辨别,比如版本3.16.43,该数字3.16表示一个长期版本,43则表示错误修订之后再发行的具体版本号,当然我这里描述的只是提供一个参考价值,更细致的版本还有可能是3.16.43-1这种。值得我们关注的是,任何内核版本错误修复后的再发布版本都应该是我们考虑升级使用的内核版本。



Linux内核版本

   Linux内核版本分为主线、稳定和长期版本。(所有内核版本都可以在内核开发官方网站https://www.kernel.org上获取)目前我们看到最新的稳定内核版本为4.10.12

主线版本代表整个Linux内核的一个树干,新的主线版本每2-3个月发布一次,所有的新功能及特性都将会包含主线版本中。稳定内核则是在主线版本中,被认为是稳定的得出。稳定内核的任何错误修复都将从主线树中返回,也就是主线内核出现的任何错误(包括之前的任何旧版本内核的错误和BUG)在得到修复之后才会被指定为稳定内核,所以在通常情况下,稳定内核既有内核新功能,同时BUG也是最少的内核版本。稳定内核的更新发布依赖于主线内核(直到下一个主线内核可用),稳定的内核更新是根据需要发布的,通常是每3个月。而对于长期内核版本,通常提供几个长期维护内核版本,用于较早的内核树错误修复返回的目的。这些内核只应用重要的错误修复,通常不会有非常频繁的更新。

主线、稳定和长期都是活动内核版本,由Linus TorvaldsLinux内核组织维护和释放。 而我们平时所使用的Linux发行版的内核都为分发内核,许多Linux发行版都提供自己的长期维护内核版本,这些内核可能是也可能不是基于内核开发人员维护的内核。因此分发版本的内核版本由发行版的厂商决定并有自己的维护周期,通常由分发版更新时一起发布。


安装/升级新内核的目的

许多出于对安全的考虑,如避免以前版本中发现的漏洞

更充分地认识内核,了解内核的各个内核模块和功能

更好的利用/体验新内核的的新功能和特性


安装/升级的方法和建议

1、对于CentOS/RHEL系统,尽量使用yum方式或RPM包安装/升级内核,需要注意的是红帽的Red Hat Linux服务需要订阅。

2、使用安装新内核而不是直接升级内核,安装新内核不会覆盖旧内核,而升级会导致新内核直接替换旧内核,可能会导致系统无法启动,安装也可以让我们在升级后有回滚的选择。

3、一般地,对于大多数Linux分发版,使用yum/dnf和分发版布官方的存储库来升级内核,这种方式只能升级到该分发版的存储库提供的最新版本,而不是Linux内核组织发布的最新内核。

4、如果想迅速并且安全地使用最新内核,对于CentOS/RHEL系统并不支持yum的方式直接安装或升级。那么此时我们可以使用ELRepo(第三方存储库)进行内核安装升级。(相关信息请访问网站http://www.elrepo.org)

5、下载新内核的源码包进行编译安装,这种方式有助于我们更细致地学习内核底层知识,但在生产环境中不推荐编译安装。

6、尽量使用最新的Linux发行版,新的Liunx发行版包含该发行版维护的新内核,如果有必要,那么请使用如yum upgrade或者yum update来更新你的系统。对于UbuntuDebian等发行版,使用apt-get update方式来更新。


内核软件包介绍

  • kernel      Linux内核软件包,包含单、多核和多处理器系统的内核,是任何Linux操作系统的核心,单处理器的系统仅需安装内核包。内核处理操作系统的基本功能内存分配、进程分配、设备输入和输出等

  • kernel-devel   包含提供足够的针对内核软件包构建模块的内核头文件和makefile文件

  • kernel-headers  包含指定Linux内核、用户空间库文件和程序之间指定接口的C头文件。头文件定义了构建大多数标准程序所需的结构和常量,也是重建glibc软件包所必需的

  • kernel-doc     包含来自内核源代码的文档文件。各种关于Linux内核和设备以及驱动程序的信息都记录在这些文件当中

  • kernel-firmware  包含对于某些设备及其操作的固件信息文件

  • kernel-debug    包含许多对于内核debug诊断和调试的启用选项,只有当我们需要尝试收集额外的内核错误信息时才应该安装它。它是以牺牲性能为代价

  • kernel-debug-devel  包含内核debug诊断和调试的启用选项,以牺牲性能为代价


CentOS上安装/升级内核

  我将介绍在CentOS下通过yum软件管理程序或RPM包安装/升级内核和通过ELRepo存储库安装/升级最新的内核版本(两种方法)

一、CentOS下通过yum软件管理程序或RPM包安装/升级内核

安装步骤:

1、查看当前内核版本

1
2
[root@HMing-Server34 ~]# uname -sr
Linux 2.6.32-431.el6.x86_64

查看系统已安装的内核软件

# yum list installed kernel*

如何在CentOS/RHEL上安装或升级新的内核版本

在上面输出中,白色高亮部分就是系统已经安装的内核软件包


2、获取CentOS 6发行版的最新内核

对于上面介绍的内核软件包,我们不用全部安装,只安装以下几个包即可

1
2
3
4
5
kernel-2.6.32-696.el6.x86_64.rpm
kernel-devel-2.6.32-696.el6.x86_64.rpm
kernel-headers-2.6.32-696.el6.x86_64.rpm
kernel-firmware-2.6.32-696.el6.noarch.rpm
kernel-doc-2.6.32-696.el6.noarch.rpm

我们可以从目前最新版CentOS6.9iso文件中获取以上内核软件包,或者从官方支持的镜像网站中下载,如国内的sohu镜像地址http://mirrors.sohu.com中下载,详细地址为http://mirrors.sohu.com/centos/6.9/os/x86_64/Packages/

如何在CentOS/RHEL上安装或升级新的内核版本


CentOS7(目前最新版7.3),我们需要以下几个包

kernel-3.10.0-514.el7.x86_64.rpm

kernel-headers-3.10.0-514.el7.x86_64.rpm

kernel-tools-3.10.0-514.el7.x86_64.rpm

kernel-tools-libs-3.10.0-514.el7.x86_64.rpm

kernel-doc-3.10.0-514.el7.noarch.rpm

3、执行安装/升级内核软件包

使用RPM安装方式安装/升级内核

1
2
3
4
5
6
7
8
# rpm -Uvh kernel-firmware-2.6.32-696.el6.noarch.rpm
# rpm -Uvh kernel-headers-2.6.32-696.el6.x86_64.rpm
  
# rpm -ivh kernel-devel-2.6.32-696.el6.x86_64.rpm
# rpm -ivh kernel-doc-2.6.32-696.el6.noarch.rpm
 
# rpm -ivh kernel-2.6.32-696.el6.x86_64.rpm
# rpm -ivh kernel-2.6.32-696.el6.x86_64.rpm --nodeps

安装kernel包,如果有其他依赖软件需要安装,我们可以根据提示安装,或者在rpm后面加上--nodeps选项,意思是解除依赖

如何在CentOS/RHEL上安装或升级新的内核版本


注意:在安装/升级以上内核软件包时,安装内核软件包kernel-2.6.32-696.el6.x86_64.rpm 时,rpm安装方式选项参数使用的-i而不是-U,两者是有区别的,-i表示安装,-U表示升级,而我们需要保留旧的内核版本,所有这里使用安装的方式。而对于内核软件包kernel-firmwarekernel-headerskernel-develkernel-doc等,对于已安装过的,直接安装可能会报相关错误提示,所以我们可以使用-U选项升级,也可以直接用yum安装,自动安装相关依赖的软件包。


使用yum方式安装/升级内核

  cd进入新下载的内核软件包所在的目录,执行yum localinstall kernel*进行安装,值得提的是,使用这种方式安装同样不会直接替换升级旧内核,安装之后新旧内核并存。所以我们推荐这种使用安装方式。

1
2
3
4
5
6
[root@HMing-Server34 src]# ls kernel-*
kernel-2.6.32-696.el6.x86_64.rpm
kernel-devel-2.6.32-696.el6.x86_64.rpm
kernel-doc-2.6.32-696.el6.noarch.rpm
kernel-firmware-2.6.32-696.el6.noarch.rpm
kernel-headers-2.6.32-696.el6.x86_64.rpm

执行yum localinstall kernel*进行安装

1
[root@HMing-Server34 src]# yum localinstall kernel*

如何在CentOS/RHEL上安装或升级新的内核版本


4、安装/升级内核之后,修改系统默认使用的内核

  在CentOS中安装完新内核之后,新的内核成为系统的默认启动选择,我们不需要做任何修改。新的内核在重启系统后生效。如果有必要,比如使用旧内核,我们可以手动修改/boot/grub/grub.conf文件中系统默认使用的内核,修改default=1,表示GRUB使用第二个内核启动系统

如何在CentOS/RHEL上安装或升级新的内核版本


在重新启动系统的GRUB的引导界面,快速按下任意键,确认新内核默认被使用

如何在CentOS/RHEL上安装或升级新的内核版本


查看新内核,确认是否正确安装

1
2
[root@HMing-Server34 src]# uname -sr
Linux 2.6.32-696.el6.x86_64


二、通过ELRepo存储库安装/升级最新的稳定内核版本

安装步骤

1、CentOS上启用ELRepo存储库

导入公钥

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

CentOS6上安装ELRepo 6存储库:

1
# rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

CentOS7上安装ELRepo 7存储库:

1
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

安装了ELRepo存储库,我们可以通过查找特定的存储库中查找可用的软件包,这里我们查看"elrepo-kernel" 内核软件包的版本信息

1
# yum --disablerepo "*" --enablerepo "elrepo-kernel" list available

如何在CentOS/RHEL上安装或升级新的内核版本


2、指定ELRepo存储库安装最新的稳定内核

1
# yum --enablerepo=elrepo-kernel install kernel-ml

如何在CentOS/RHEL上安装或升级新的内核版本


安装完成之后,我们即可以在/boot/grub/grub.conf 文件看到存在新安装的内核条目,并修改default=0,指定系统默认启动的内核选项,为4.10.12内核版本,重新启动系统即可生效

如何在CentOS/RHEL上安装或升级新的内核版本


查看重新引导的GRUB内核启动项界面,确认是否正确使用了指定的新内核

如何在CentOS/RHEL上安装或升级新的内核版本


同样的,对于在RHEL上安装/升级内核使用上面的两种方法也适用


结语

  在本文中,介绍了内核的几种版本,以及安装/升级新内核版本的两种方法,也是在生产环境中推荐的安装/升级方法。当这两种方法都不满足要求时,我们也可以从https://www.kernel.org/下载内核源码包进行编译安装。



本文转自 HMLinux 51CTO博客,原文链接:http://blog.51cto.com/7424593/1919325