在使用Linux实例的过程中,采用更新版本的内核可以实现性能提升、安全漏洞修复以及新功能的支持。然而,如果您的业务需要特定的Linux内核版本,或者您不希望升级至更新版本的内核,则需要禁用包管理器对内核版本的升级。本文将为您提供在Linux实例中禁用或启用包管理器升级内核的具体方法。
背景说明
升级Linux内核属于高风险操作,可能导致硬件驱动不兼容、安全模块(SELinux)失效以及实例启动失败等问题。因此,建议您在进行内核升级之前,充分了解相关升级内容,并确认内核升级的必要性。
前提条件
在进行内核升级之前,请确保已完成相关的兼容性测试,并为实例创建快照,以确保业务数据的安全。
禁用或启用包管理器更新内核
如果您不希望通过包管理器自动更新Linux实例内核,您可以通过配置包管理器来禁用内核的自动更新,相关操作如下。
运行如下命令,查看当前Linux系统内核版本信息。
sudo uname -r
回显信息示例如下,表明当前使用的内核版本为
5.10.134-16.al8.x86_64
。5.10.134-16.al8.x86_64
运行如下命令,查看当前安装的Linux内核软件包的信息。
sudo rpm -qa | grep kernel
回显结果示例如下,表明当前内核软件包名称为
kernel-5.10.134-16.al8.x86_64
。kernel-devel-5.10.134-18.al8.x86_64 kernel-core-5.10.134-16.al8.x86_64 kernel-modules-5.10.134-16.al8.x86_64 kernel-modules-extra-5.10.134-16.al8.x86_64 kernel-modules-internal-5.10.134-16.al8.x86_64 kernel-tools-libs-5.10.134-16.al8.x86_64 kernel-tools-5.10.134-16.al8.x86_64 kernel-5.10.134-16.al8.x86_64 kernel-devel-5.10.134-16.al8.x86_64 kernel-headers-5.10.134-16.al8.x86_64
运行如下命令,打开yum包管理器配置文件。
sudo vi /etc/yum.conf
按
i
进入编辑模式,为配置文件新增如下内容。exclude = kernel*
上述操作将会阻止所有内核更新,包括内核的安全更新。请根据自身需求进行选择,以避免错过重要的内核安全补丁,从而引发实例安全风险。
如需重新启用包管理器自动更新内核,请删除或者注释掉上述步骤5中添加的内容即可。
按
Esc
键,输入:wq
退出编辑模式。(可选)配置完成后,您可以运行如下命令,测试内核版本锁定是否生效。
sudo yum update --assumeno | grep kernel
回显信息示例如下,表明内核版本不会被升级。
kernel-core x86_64 5.10.134-18.al8 alinux3-plus 32 M kernel-modules x86_64 5.10.134-18.al8 alinux3-plus 23 M kernel-modules-extra x86_64 5.10.134-18.al8 alinux3-plus 1.5 M kernel-modules-internal x86_64 5.10.134-18.al8 alinux3-plus 1.0 M kernel-headers x86_64 5.10.134-18.al8 alinux3-plus 2.3 M kernel-tools x86_64 5.10.134-18.al8 alinux3-plus 1.1 M kernel-tools-libs x86_64 5.10.134-18.al8 alinux3-plus 947 k Operation aborted.
运行如下命令,查看当前Linux系统内核版本信息。
sudo uname -r
回显信息示例如下,表明当前使用的内核版本为
5.4.0-204-generic
。5.4.0-204-generic
运行如下命令,查看当前安装的Linux内核软件包的信息。
sudo dpkg -l | grep linux-image
回显信息如下,表明当前内核软件包名称为
linux-image-5.4.0-204-generic
。ii linux-image-5.4.0-204-generic 5.4.0-204.224 amd64 Signed kernel image generic ii linux-image-5.4.0-42-generic 5.4.0-42.46 amd64 Signed kernel image generic ii linux-image-generic 5.4.0.204.200 amd64 Generic Linux kernel image
运行以下命令,锁定Linux内核软件包。
sudo apt-mark hold linux-image-*
上述操作将会阻止所有内核更新,包括内核的安全更新。请根据自身需求进行选择,以避免错过重要的内核安全补丁,从而引发实例安全风险。
如需重新启用包管理器自动更新内核,请运行如下命令。
sudo apt-mark unhold linux-image-*
(可选)运行以下命令,查看当前配置的锁定版本软件包列表。列表中存在的软件包将不会被自动升级。
sudo apt-mark showhold
运行如下命令,查看当前Linux系统内核版本信息。
sudo uname -r
回显信息示例如下,表明当前使用的内核版本为
6.10.10-200.fc40.x86_64
。6.10.10-200.fc40.x86_64
运行如下命令,查看当前安装的Linux内核软件包的信息。
sudo rpm -qa | grep kernel
回显结果示例如下,表明当前内核软件包名称为
kernel-6.10.10-200.fc40.x86_64
。kernel-modules-core-6.8.5-301.fc40.x86_64 kernel-core-6.8.5-301.fc40.x86_64 kernel-modules-6.8.5-301.fc40.x86_64 libreport-plugin-kerneloops-2.17.15-1.fc40.x86_64 kernel-6.8.5-301.fc40.x86_64 kernel-devel-6.8.5-301.fc40.x86_64 kernel-headers-6.10.3-200.fc40.x86_64 abrt-addon-kerneloops-2.17.6-1.fc40.x86_64 kernel-modules-core-6.10.10-200.fc40.x86_64 kernel-core-6.10.10-200.fc40.x86_64 kernel-modules-6.10.10-200.fc40.x86_64 kernel-devel-6.10.10-200.fc40.x86_64 kernel-6.10.10-200.fc40.x86_64 kernel-tools-libs-6.8.5-301.fc40.x86_64 kernel-tools-6.8.5-301.fc40.x86_64
运行如下命令,打开
dnf
包管理器配置文件。sudo vi /etc/dnf/dnf.conf
按
i
进入编辑模式,为配置文件新增如下内容。exclude = kernel*
上述操作将会阻止所有内核更新,包括内核的安全更新。请根据自身需求进行选择,以避免错过重要的内核安全补丁,从而引发实例安全风险。
如需重新启用包管理器自动更新内核,请删除或者注释掉上述步骤5中添加的内容即可。
按
Esc
键,输入:wq
退出编辑模式。(可选)配置完成后,您可以运行如下命令,测试内核版本锁定是否生效。
sudo dnf update --assumeno | grep kernel
回显信息示例如下,表明内核版本不会被升级。
Operation aborted.
上述锁定内核软件包的方法仅为一种常见的思路。若您的实例对Linux内核版本有特定要求,建议您结合自身实际情况,制定相应方案,以避免因内核版本升级而引发的问题。
常见问题
问题现象:在Alibaba Cloud Linux/CentOS实例中升级内核时,提示
“No package marked for Update”
。问题原因:该问题可能是在实例的
/etc/yum.conf
配置文件中,配置了禁止kernel升级的配置项,导致内核无法升级或升级失败。解决方案:
运行如下命令,打开yum包管理器配置文件。
sudo vi /etc/yum.conf
按
i
进入编辑模式,删除或者注释掉上述添加的内容即可。# 如需注释如下内容,请在该行行首增加一个#。 exclude = kernel*
按
Esc
键,输入:wq
退出编辑模式。
相关文档
如需了解如何升级Linux内核,请参见升级Linux ECS实例内核。
- 本页导读 (1)
- 背景说明
- 前提条件
- 禁用或启用包管理器更新内核
- 常见问题
- 相关文档