ELRepo 简介
项目主页:http://elrepo.org
Enterprise Linux 软件包的 RPM 存储库。ELRepo 支持 Red Hat Enterprise Linux (RHEL) 及其衍生产品,如CentOS Linux、AlmaLinux 和 Rocky Linux。
启用 ELRepo
从 CentOS 8 开始,ELRepo 已经加入到官方软件仓库中,名称为 “elrepo-release”。
AlmaLinux 和 Rocky Linux 同样适用。
启用 ELRepo 只需要执行命令:
dnf -y install elrepo-release
升级内核
查询 ELRepo 中的 kernel 版本
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available --showduplicates #查看所有版本
kernel-ml 中的 ml 是英文 “mainline stable” 的缩写,elrepo-kernel 中列出来的是最新的稳定主线版本。
kernel-lt 中的 lt 是英文 “long term support” 的缩写,elrepo-kernel 中列出来的长期支持版本。
安装 kernel
yum --disablerepo="*" --enablerepo=elrepo-kernel install kernel-ml kernel-ml-core kernel-ml-devel kernel-ml-modules kernel-ml-modules-extra
慎重装kernel-ml-headers包,会和发行版的kernel-headers包冲突
Error:
Problem: package kernel-ml-headers-6.16.6-1.el8.elrepo.x86_64 from elrepo-kernel conflicts with kernel-headers < 6.16.6-1.el8.elrepo provided by kernel-headers-4.18.0-553.34.1.el8_10.x86_64 from @System
- cannot install the best candidate for the job
- problem with installed package kernel-headers-4.18.0-553.34.1.el8_10.x86_64
elrepo官方提示:
There is no need to install the kernel-lt-headers package. It is only necessary if you intend to rebuild glibc and, thus, the entire operating system. If there is a need to have the kernel headers installed, you should use the current distributed kernel-headers package as that is related to the current version of glibc. When you see a message like “your kernel headers for kernel xxx cannot be found …”, you most likely need the kernel-lt-devel package, not the kernel-lt-headers package.
kernel-headers包是给用户态程序用的,个人理解为类似libc标准库里的*unix规范接口函数,不同版本内核间相当稳定,所以使用发行版的即可。
kernel-devel包是给开发内核态程序\内核模块用的,不通版本内核间就有差异,所以需要单独装。
所以常规仅仅是使用新版本内核,不需要装kernel-ml-headers,保持使用发行版的kernel-headers,而且升级发行版的kernel版本时kernel-headers也可能不会一起更新,kernel-headers在需要时才会更新。
发行版源的其他软件,都依赖发行版的kernel-headers,忽略冲突安装可能造成其他软件安装失败,https://www.rockylinux.cn/notes/rocky-linux-9-nei-he-sheng-ji-zhi-6.html。
查询安装的 kernel 包
rpm -qa|grep kernel
查看和设置默认启动项
grubby 是一个命令行工具,用于更新和显示有关 grub2 和 zipl 引导加载程序的配置文件的信息。它主要设计用于安装新内核并需要查找有关当前引导环境的信息的脚本。同时也可以对启动内核的各项信息参数进行修改。
在 CentOS 8 在已经自带该命令,如果没有通过 yum install grubby 来安装即可。
查看当前的默认启动内核:
grubby --default-kernel
/boot/vmlinuz-5.15.4-1.el8.elrepo.x86_64
查看系统安装的全部内核:
grubby --info=ALL
index=0
kernel="/boot/vmlinuz-5.15.4-1.el8.elrepo.x86_64"
args="ro crashkernel=auto net.ifnames=0 $tuned_params"
root="UUID=56c34ece-6010-480e-aeac-dea98b8ffcd3"
initrd="/boot/initramfs-5.15.4-1.el8.elrepo.x86_64.img $tuned_initrd"
title="Rocky Linux (5.15.4-1.el8.elrepo.x86_64) 8.5 (Green Obsidian)"
id="032ed95ba9c0471381bbb6b416eff523-5.15.4-1.el8.elrepo.x86_64"
index=1
kernel="/boot/vmlinuz-4.18.0-348.2.1.el8_5.x86_64"
args="ro crashkernel=auto net.ifnames=0 $tuned_params"
root="UUID=56c34ece-6010-480e-aeac-dea98b8ffcd3"
initrd="/boot/initramfs-4.18.0-348.2.1.el8_5.x86_64.img $tuned_initrd"
title="Rocky Linux (4.18.0-348.2.1.el8_5.x86_64) 8.5 (Green Obsidian)"
id="032ed95ba9c0471381bbb6b416eff523-4.18.0-348.2.1.el8_5.x86_64"
index=2
kernel="/boot/vmlinuz-4.18.0-348.el8.x86_64"
args="ro crashkernel=auto net.ifnames=0 $tuned_params intel_iommu=on"
root="UUID=56c34ece-6010-480e-aeac-dea98b8ffcd3"
initrd="/boot/initramfs-4.18.0-348.el8.x86_64.img $tuned_initrd"
title="AlmaLinux (4.18.0-348.el8.x86_64) 8.5 (Arctic Sphynx)"
id="032ed95ba9c0471381bbb6b416eff523-4.18.0-348.el8.x86_64"
index=3
kernel="/boot/vmlinuz-0-rescue-032ed95ba9c0471381bbb6b416eff523"
args="ro crashkernel=auto net.ifnames=0"
root="UUID=56c34ece-6010-480e-aeac-dea98b8ffcd3"
initrd="/boot/initramfs-0-rescue-032ed95ba9c0471381bbb6b416eff523.img"
title="AlmaLinux (0-rescue-032ed95ba9c0471381bbb6b416eff523) 8.5 (Arctic Sphynx)"
id="032ed95ba9c0471381bbb6b416eff523-0-rescue"
查看特定内核的具体信息:
grubby --info=/boot/vmlinuz-4.18.0-348.el8.x86_64
index=1
kernel="/boot/vmlinuz-4.18.0-348.el8.x86_64"
args="ro crashkernel=auto net.ifnames=0 $tuned_params"
root="UUID=56c34ece-6010-480e-aeac-dea98b8ffcd3"
initrd="/boot/initramfs-4.18.0-348.el8.x86_64.img $tuned_initrd"
title="AlmaLinux (4.18.0-348.el8.x86_64) 8.5 (Arctic Sphynx)"
id="032ed95ba9c0471381bbb6b416eff523-4.18.0-348.el8.x86_64"
设置新的默认启动内核:
使用路径来指定内核,可以使用 –set-default=kernel-path
grubby --set-default=/boot/vmlinuz-4.18.0-348.el8.x86_64
The default is /boot/loader/entries/032ed95ba9c0471381bbb6b416eff523-4.18.0-348.el8.x86_64.conf with index 1 and kernel /boot/vmlinuz-4.18.0-348.el8.x86_64
grubby --default-kernel
/boot/vmlinuz-4.18.0-348.el8.x86_64
使用 index 来指定内核,则使用 –set-default-index=entry-index
grubby --set-default-index=1
The default is /boot/loader/entries/032ed95ba9c0471381bbb6b416eff523-4.18.0-348.el8.x86_64.conf with index 1 and kernel /boot/vmlinuz-4.18.0-348.el8.x86_64
grubby --default-kernel
/boot/vmlinuz-4.18.0-348.el8.x86_64
重启后生效
reboot
删除旧内核(可选)
从启动项中删除旧内核
grubby --remove-kernel=/boot/vmlinuz-4.18.0-348.el8.x86_64
删除旧内核文件
# 删除旧内核
yum remove kernel-4.18.0 kernel-core-4.18.0 kernel-modules-4.18.0 kernel-devel-4.18.0
# 需要注意,是否同时删除一些依赖包。
Kernel相关的RPM包说明
kernel-core
提供内核的二进制镜像、所有与 initramfs相关的对象来引导系统,以及确保核心功能的最小内核模块数量。
kernel-modules
提供 kernel-core 中不存在的其余内核模块。
kernel-modules-extra
为罕见硬件提供内核模块。默认禁用模块的加载。
kernel-debug
提供了启用了许多调试选项的内核,以便进行内核诊断,以降低性能为代价。
kernel-tools
提供了操作 Linux 内核和支持文档的工具。
kernel-devel
提供了内核标头和 makefile,来足以针对 kernel 软件包构建模块。
kernel-abi-stablelists
提供与 RHEL 内核 ABI 相关的信息,包括外部 Linux 内核模块所需的内核符号列表和 yum 插件以协助执行。
kernel-headers
包括指定 Linux 内核和用户空间库以及程序间接口的 C 标头文件。头文件定义构建大多数标准程序所需的结构和常量。
安装ELRepo历史版本内核
官方的elrepo, lt和ml都只有当前版本的包。
如果要指定安装指定版本的内核,可以从这里https://mirrors.coreix.net/elrepo-archive-archive/kernel/下载RPM包。
例如rockylinux8目前了mainline是6.x,安装高版本的5.x:
wget -c https://mirrors.coreix.net/elrepo-archive-archive/kernel/el8/x86_64/RPMS/kernel-ml-5.19.9-1.el8.elrepo.x86_64.rpm
wget -c https://mirrors.coreix.net/elrepo-archive-archive/kernel/el8/x86_64/RPMS/kernel-ml-core-5.19.9-1.el8.elrepo.x86_64.rpm
wget -c https://mirrors.coreix.net/elrepo-archive-archive/kernel/el8/x86_64/RPMS/kernel-ml-devel-5.19.9-1.el8.elrepo.x86_64.rpm
wget -c https://mirrors.coreix.net/elrepo-archive-archive/kernel/el8/x86_64/RPMS/kernel-ml-modules-5.19.9-1.el8.elrepo.x86_64.rpm
wget -c https://mirrors.coreix.net/elrepo-archive-archive/kernel/el8/x86_64/RPMS/kernel-ml-modules-extra-5.19.9-1.el8.elrepo.x86_64.rpm
# rpm -ivh --oldpackage kernel-ml-*
rpm -ivh kernel-ml-*