本文介绍了如何在RHEL/CentOS系统上安装elrepo社区编译的主流新版本Linux内核,包括确认系统版本、导入elrepo的软件包储存库、安装新内核、更新启动管理器(grub)、重启机器以及验证新内核版本等步骤。同时提到了elrepo还提供长期支持版内核,并说明了如何处理内核header的冲突问题。最后,提示了如何删除旧版本内核(需谨慎操作)。
新版本Linux内核——这里指的是由elrepo社区为RHEL及其衍生版(CentOS等)编译的主流新版本Linux内核。因为RHEL/CentOS预置的内核版本都是随大版本冻结的,6.x系列都是2.6.32版、7.x系列都是3.10.0版,虽然生命周期内一直有内核安全更新,但新版本Linux内核的新增功能享受不到。如果要用新版本内核里的新功能,例如BBR,就需要替换掉CentOS预置的内核。
我们要安装的是主流新版本内核,elrepo除了主流新版本内核(kernel-ml),还编译维护“长期支持版内核”(kernel-lt),是比主流新内核版本低、但又比RHEL/CentOS预置版本高,跟kernel-ml的区别是kernel-lt的版本不经常升级,基本只做安全更新。
步骤(需要有root权限或sudo):
1、确认CentOS的发行版本和内核版本(发行版6.x系列跟7.x系列的后续步骤有些不同):
确认发行版本,运行
cat /etc/redhat-release
确认内核版本,运行
uname -sr
2、导入elrepo的软件包储存库密钥(因为是第三方储存库),运行
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
3、导入elrepo的软件包储存库:
CentOS 6.x,运行
rpm -Uvh http://www.elrepo.org/elrepo-release-6-8.el6.elrepo.noarch.rpm
CentOS 7.x,运行
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
4、查看现在elrepo里有什么版本的新内核可以用,运行
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
如果列表是空的,检查/etc/yum.conf,看是否屏蔽了kernel相关包(exclude=kernel*),如有则注释掉此exclude语句
5、安装最新的主流内核,运行
yum --enablerepo=elrepo-kernel install kernel-ml -y
如果要在本机做开发编译,还要安装内核header
yum --enablerepo=elrepo-kernel install kernel-ml-headers -y
如果提示kernel-ml-headers与旧版本的kernel-header冲突,先把旧版本header删除
yum remove kernel-headers
卸载旧header如提示有依赖旧header的软件包,拷贝列表,先确认关联删除,在安装kernel-ml-headers后再重装这些包
6、更新启动管理器(grub),让机器用新内核启动
CentOS 6.x,比较简单:
修改grub配置文件/etc/grub.conf,改
default=1
为
default=0
CentOS 7.x,复杂些:
先查看机器上安装的内核启动顺序
awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg
再把新内核的顺序号(一般是0号)设为默认启动
grub2-set-default 0
最后使grub的新配置生效
grub2-mkconfig -o /boot/grub2/grub.cfg
7、重启机器
8、查看内核版本,看看是否已用新内核启动,运行
uname -sr
9、(可选)删除老版本内核(谨慎!)
查询本机安装的所有内核
rpm -q kernel
删除
yum remove kernel-老内核的版本号
如果要删除老版本的kernel-ml,则是
rpm -q kernel-ml
yum remove kernel-ml-版本号
推荐阅读