請訪問原文鏈接:https://sysin.org/blog/centos-8-upgrade-kernel/,查看最新版。原創作品,轉載請保留出處。
作者:gc(at)sysin.org,主頁:www.sysin.org

以前使用 ELRopo 更新 CentOS 內核比較常見,AlmaLinux 和 Rocky Linux 如何更新內核呢,方法是一樣的。
請注意:Linux Kernel 5.15 當前在 ELRepo 中仍然屬於 mainline stable,有可能在 RHEL 9 系列發布后正式成為 LTS。
引言:Linux Kernel 5.15 LTS
11 月 21 日,著名的 Linux 內核開發人員 Greg Kroah-Hartman 宣布發布 Linux 內核 5.14.21,這是第 21 個維護更新,也是該系列的最后一個。是的,沒錯,Linux 5.14 現在在 上被標記為 EOL(生命周期結束),kernel.org 網站 並且將不再受支持。
“請注意,這是最新的 5.14.y 內核版本。 現在是生命的盡頭。 請在此時移至 5.15.y 內核分支” Greg Kroah-Hartman 在 郵件列表公告中說。
然而,好消息是您將升級到最近發布的 Linux 5.15 內核,這是一個 LTS(長期支持)系列,至少支持幾年,直到 2023 年 10 月。
Linux 內核 5.15 為 Linux 內核帶來了許多優點,例如全新且功能齊全的 NTFS 文件系統實現、內核中的 SMB 服務器、實時搶占鎖定、新的 Btrfs 功能、每 VLAN 多播支持、對 Nintendo 的支持 Wii 控制台、新的 gpio-virtio 驅動程序、DAMON(數據訪問監控器)以及許多其他可以玩的好東西。
不用多說,如果您的 GNU/Linux 發行版使用的是 Linux 內核 5.14,您應該考慮盡快升級到 Linux 內核 5.15。如果您不能自己完成,您應該要求您的發行版的維護者將內核包升級到最新的 Linux 5.15 版本。
可以預見,未來的 Linux 發行版可能大量采用 5.15 內核版本,目前 RHEL 9 Beta 是 5.14 版本。
Longterm release kernels
| Version | Maintainer | Released | Projected EOL |
|---|---|---|---|
| 5.15 | Greg Kroah-Hartman & Sasha Levin | 2021/10/31 | Oct, 2023 |
| 5.10 | Greg Kroah-Hartman & Sasha Levin | 2020/12/13 | Dec, 2026 |
| 5.4 | Greg Kroah-Hartman & Sasha Levin | 2019/11/24 | Dec, 2025 |
| 4.19 | Greg Kroah-Hartman & Sasha Levin | 2018/10/22 | Dec, 2024 |
| 4.14 | Greg Kroah-Hartman & Sasha Levin | 2017/11/12 | Jan, 2024 |
| 4.9 | Greg Kroah-Hartman & Sasha Levin | 2016/12/11 | Jan, 2023 |
| 4.4 | Greg Kroah-Hartman & Sasha Levin | 2016/1/10 | Feb, 2022 |
為什么要更新內核
升級內核一般是為了支持新特性、新設備、新功能。為了測試最新的軟硬件產品特性,升級內核比較常見。使用 ELRepo 升級內核變得非常簡單。
ELRepo 簡介
項目主頁:http://elrepo.org
歡迎使用 ELRepo,這是 Enterprise Linux 軟件包的 RPM 存儲庫。ELRepo 支持 Red Hat Enterprise Linux (RHEL) 及其衍生產品,如 Scientific Linux、CentOS Linux、Alma Linux 和 Rocky Linux。
ELRepo 項目專注於與硬件相關的軟件包,以增強您對 Enterprise Linux 的體驗。這包括文件系統驅動程序、圖形驅動程序、網絡驅動程序、聲音驅動程序、網絡攝像頭和視頻驅動程序。
ELRepo 存儲庫內容
ELRepo 包含四個頻道。 您可以通過單擊其名稱來瀏覽每個頻道的內容。
這是主通道,默認啟用。 由於此頻道不應包含發行版中也存在的軟件包,因此在啟用此存儲庫頻道的情況下運行 “yum 更新” 應該是安全的。
例如安裝 kmod-r8168(Realtek r8168 網卡驅動):
yum install kmod-r8168
根據正在安裝的軟件包或存儲庫設置,可能需要禁用非 elrepo 存儲庫:
yum --disablerepo=\* --enablerepo=elrepo install kmod-nvidia
elrepo-extras 頻道提供了替換 / 更新 RHEL 分發包的包及其依賴項。 它可以在 /etc/yum.repos.d/elrepo.repo 文件中啟用或與 “yum --enablerepo=elrepo-extras” 一起使用。
elrepo-testing 頻道提供尚未發布到主頻道的軟件包,默認情況下處於禁用狀態。 它可以在 /etc/yum.repos.d/elrepo.repo 文件中啟用或與 “yum --enablerepo=elrepo-testing” 一起使用。
elrepo-kernel 頻道使用 Linux Kernel Archives 長期支持內核(已為 RHEL-7 配置)和最新的穩定主線內核(已為 RHEL-8 和 RHEL-7 配置)。 請參閱 kernel-lt 或 kernel-ml 頁面以獲取更多詳細信息。 該頻道可以在 /etc/yum.repos.d/elrepo.repo 文件中啟用或與 “yum --enablerepo=elrepo-kernel” 一起使用。
啟用 ELRepo
從 CentOS 8 開始,ELRepo 已經加入到官方軟件倉庫中,名稱為 “elrepo-release”。
AlmaLinux 和 Rocky Linux 同樣適用。
啟用 ELRepo 只需要執行命令:
dnf -y install elrepo-release
#or
yum -y install elrepo-release
以下為 rpm 包在線安裝方法:
# Import the public key:
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# To install ELRepo for RHEL-**8** or CentOS-**8**:
yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
# To install ELRepo for RHEL-**7**, SL-**7** or CentOS-**7**:
yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
# To make use of our mirror system, **please also install yum-plugin-fastestmirror**.
升級內核
升級內核步驟如下:
-
查詢 ELRepo 中的 kernel 版本
# 列出可用的內核相關包: yum --disablerepo="*" --enablerepo="elrepo-kernel" list available yum --disablerepo="*" --enablerepo="elrepo-kernel" list available --showduplicates #查看所有版本術語解釋
- kernel-ml
kernel-ml 中的 ml 是英文 “mainline stable” 的縮寫,elrepo-kernel 中列出來的是最新的穩定主線版本。 - kernel-lt
kernel-lt 中的 lt 是英文 “long term support” 的縮寫,elrepo-kernel 中列出來的長期支持版本。
- kernel-ml
-
查詢安裝的 kernel 包
# 查詢所有 kernel 包 rpm -qa|grep kernel # 示例輸出如下: kernel-core-4.18.0-348.el8.x86_64 kernel-4.18.0-348.2.1.el8_5.x86_64 kernel-core-4.18.0-348.2.1.el8_5.x86_64 kernel-modules-4.18.0-348.2.1.el8_5.x86_64 kernel-devel-4.18.0-348.2.1.el8_5.x86_64 kernel-modules-4.18.0-348.el8.x86_64 kernel-tools-libs-4.18.0-348.2.1.el8_5.x86_64 kernel-headers-4.18.0-348.2.1.el8_5.x86_64 kernel-4.18.0-348.el8.x86_64 kernel-tools-4.18.0-348.2.1.el8_5.x86_64 -
安裝 kernel
# 根據上述查詢結果,安裝內核相關包 # 安裝新內核 yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml.x86_64 #kernel-core、kernel-modules 與 kernel 依賴自動更新 # 安裝新內核相關軟件 yum --disablerepo=\* --enablerepo=elrepo-kernel install -y kernel-ml-devel kernel-ml-tools kernel-ml-tools-libs kernel-ml-tools-libs-devel kernel-ml-headers --skip-broken新內核將成為默認啟動內核,可以根據需要調整默認啟動項,如下文描述。
-
查看和設置默認啟動項
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-tools-4.18.0 kernel-tools-libs-4.18.0 kernel-headers-4.18.0 # 注意,會同時刪除一些依賴包(如 gcc、systemtap 等),需要重新補安裝回來。 # 再查看系統已安裝的內核,確認舊內核版本已經刪除: rpm -qa | grep kernel
