在 centos 中锁定软件包版本应启用 versionlock 插件,它支持精确到 epoch:version-release.arch 的粒度,适用于 centos 7/8/9 及 rocky/almalinux;安装后通过 add 命令锁定已安装包或指定版本,锁文件存于 /etc/yum/pluginconf.d/versionlock.list(yum)或 /etc/dnf/plugins/versionlock.list(dnf),可用 list 查看、delete 删除单个、clear 清空全部锁。

在 CentOS 中锁定软件包版本,核心是阻止 yum 或 dnf 在执行升级时更新特定软件。最稳妥、主流且经生产验证的方式是启用并使用 versionlock 插件,它支持精确到 epoch:version-release.arch 的粒度,适配 CentOS 7/8/9 及 Rocky/AlmaLinux 等衍生版。
启用 versionlock 插件(DNF/YUM 通用)
CentOS 7 默认用 yum,CentOS 8+ 默认用 dnf,但插件机制一致:
- CentOS 7(yum):运行
sudo yum install -y yum-plugin-versionlock - CentOS 8/9(dnf):运行
sudo dnf install -y 'dnf-command(versionlock)'
安装后插件自动启用,配置文件位于 /etc/yum/pluginconf.d/versionlock.conf(yum)或 /etc/dnf/plugins/versionlock.conf(dnf),确认其中 enabled=1 即可。
锁定已安装软件的当前版本
这是最常用场景——防止正在运行的服务(如 nginx、docker-ce、httpd)被意外升级:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
- 锁定当前已装的 docker-ce 和 docker-ce-cli:
sudo yum versionlock add docker-ce docker-ce-cli(CentOS 7)sudo dnf versionlock add docker-ce docker-ce-cli(CentOS 8+) - 命令会自动读取已安装包的完整 NEVRA(Name-Epoch-Version-Release-Arch),例如
docker-ce-3:24.0.7-1.el9,并写入锁文件 - 锁文件位置:
• yum:/etc/yum/pluginconf.d/versionlock.list
• dnf:/etc/dnf/plugins/versionlock.list
锁定指定精确版本(推荐用于上线环境)
若需强制固定到某一个发布版本(比如安全合规要求必须用 httpd-2.4.57-1.el9),可显式指定:
sudo dnf versionlock add httpd-2.4.57-1.el9- 支持通配符,例如锁定全部内核:
sudo dnf versionlock add kernel-\* - 查看所有生效规则:
dnf versionlock list或yum versionlock list
验证与维护
锁定不是“一劳永逸”,需定期确认是否生效:
- 执行
sudo yum update docker-ce(或dnf update),应提示 “No packages marked for update” - 检查是否真被拦截:
rpm -q docker-ce对比升级前后版本不变 - 临时解锁单个包:
sudo yum versionlock delete docker-ce - 清空全部锁:
sudo yum versionlock clear(慎用)
注意:versionlock 不影响 dnf reinstall 或 dnf distro-sync;它只干预 upgrade 类操作。如需彻底隔离(含自动安全更新),还需配合禁用 unattended-upgrades 或调整 repo 优先级。










