如何使用yum或versionlock忽略特定仓库关联的软件包?(解决dnf-automatic因Ansible多版本依赖冲突启动失败问题)
如何使用yum或versionlock忽略特定仓库关联的软件包?(解决dnf-automatic因Ansible多版本依赖冲突启动失败问题)
我来帮你搞定这个dnf-automatic因为Ansible版本冲突崩掉的问题~先理清楚根源:你的RHEL8系统里现在有两个Ansible版本可选——一个是来自ansible-2-for-rhel-8-rhui-rpms仓库的2.9.27,另一个是EPEL仓库的8.3.0,dnf-automatic在自动更新时因为依赖关系打架,直接启动失败了。下面给你几个实用的解决办法,按需挑选就行:
方法一:直接排除特定仓库的Ansible包
如果你想固定使用ansible-2-for-rhel-8-rhui-rpms仓库的版本,不想让EPEL的Ansible包干扰,最简单的办法就是把EPEL里的Ansible包直接排除:
- 打开EPEL的仓库配置文件:
vi /etc/yum.repos.d/epel.repo - 在
[epel]段落里添加一行:exclude=ansible*(星号是为了排除所有ansible相关的包) - 保存退出后,刷新dnf缓存:
dnf clean all && dnf makecache - 最后重启dnf-automatic并验证状态:
systemctl restart dnf-automatic systemctl status dnf-automatic
方法二:用versionlock锁定当前在用的Ansible版本
如果已经确定了要保留的Ansible版本,直接用versionlock插件把它锁死,dnf就不会再尝试升级到其他版本了:
- 先安装versionlock插件:
dnf install python3-dnf-plugin-versionlock -y
- 查看当前系统已安装的Ansible版本:
rpm -q ansible
会输出类似ansible-2.9.27-1.el8ae.noarch的结果
3. 锁定这个版本:
dnf versionlock add ansible-2.9.27-1.el8ae.noarch
(如果想锁定所有ansible相关的包,也可以用dnf versionlock add ansible*)
4. 刷新缓存后重启dnf-automatic,验证是否恢复正常
方法三:通过仓库优先级指定优先版本
这种方法适合你想保留多个仓库,但让系统优先选择特定仓库的包:
- 先安装dnf优先级插件:
dnf install dnf-plugin-priority -y
- 找到
ansible-2-for-rhel-8-rhui-rpms仓库的配置文件(一般在/etc/yum.repos.d/目录下),打开后在对应的仓库段落里添加:
priority=1
(数字越小优先级越高,默认优先级是99,所以设为1能确保它优先被选择)
3. 打开EPEL的repo配置文件,在[epel]段落里添加:
priority=10
让它的优先级低于ansible专属仓库
4. 刷新缓存,重启dnf-automatic即可解决冲突
备注:内容来源于stack exchange,提问作者John R
相关产品推荐
相关产品推荐

