Yum安装指定版本范围的包时错误选择旧版本问题排查
遇到这种Yum版本选择突然“跑偏”的问题,我建议从以下几个方向逐步排查,都是日常运维中常用的思路:
先确认仓库里的可用版本到底有哪些
首先得搞清楚当前所有Yum仓库里,my-package还剩哪些版本可选。执行这条命令可以列出所有仓库中的该包版本及对应仓库名:yum --showduplicates list my-package如果结果里找不到2.5版本了,那大概率是提供这个版本的仓库移除了它;如果2.5版本还在列表里,再继续往下排查。
检查仓库优先级配置
如果你们用了yum-plugin-priorities插件,仓库的优先级会直接影响Yum的版本选择逻辑。先确认插件是否安装:rpm -q yum-plugin-priorities要是已经安装,就去
/etc/yum.repos.d/目录下的.repo文件里,查看每个仓库的priority值——数字越小优先级越高。如果之前提供2.5版本的仓库优先级被调低,或者2.1.0所在仓库的优先级被调高,就会导致Yum优先选旧版本。排查版本锁定规则
有没有可能有人配置了版本锁定?比如用了yum-plugin-versionlock插件,执行这条命令查看锁定列表:yum versionlock list如果列表里出现
my-package-2.1.0相关的规则,那Yum就会强制安装这个版本。检查仓库的启用状态与最近变更
先看看所有启用的仓库:yum repolist enabled对比之前的状态,确认提供2.5版本的仓库是不是被禁用了。另外也可以检查
.repo文件的修改时间,看看最近有没有人改动过仓库配置:ls -l /etc/yum.repos.d/如果对应仓库的
enabled被改成了0,或者仓库地址被修改,都可能导致找不到2.5版本。清理Yum缓存试试
Yum的缓存可能过期或损坏,导致它读取的包信息不是最新的。先清理缓存再重新生成:yum clean all yum makecache之后再执行安装命令,看看是否恢复正常。
开启调试日志追踪版本选择逻辑
如果前面的方法都没找到问题,可以开启Yum的调试模式,看看它具体是怎么选版本的:yum -d 10 install "my-package < 3.0.0" 2>&1 | tee yum_debug.log查看生成的
yum_debug.log,重点找版本对比、仓库选择相关的日志内容,能定位到具体是哪个环节导致它选了2.1.0。排查Yum插件的干扰
除了优先级和版本锁定,其他Yum插件(比如yum-plugin-protectbase)也可能影响版本选择。可以临时禁用所有插件测试:yum --noplugins install "my-package < 3.0.0"如果禁用插件后能正常安装2.5版本,就说明是某个插件的配置出了问题,再逐个排查插件即可。
内容的提问来源于stack exchange,提问作者Paul

