问题背景
同事发现一台centos7机器的yum repo不能使用,现象为相关的repo的meta文件下载失败,提示相关meta文件的下载路径有问题。
问题分析
通过终端输出的报错,发现是/etc/yum.repos.d/*.repo配置文件中$releasever变量没有加载到正确的值。我们下面先看看yum几个主要变量的作用和设置方法。
yum相关变量
$arch
作用:标识cpu的架构,如i386,i486,i586等 默认取值:默认根据cpu架构自动取值 设置方法: 在/etc/yum/vars/arch文件写入一个值,这个值就是这个变量的值(优先级高)
$basearch
作用:标识cpu的基本架构。例如i486和i586等使用一个基本架构i386,AMD64和Intel64有一个基本的架构x86_64。 默认取值:默认根据cpu架构自动取值 设置方法:在/etc/yum/vars/basearch文件写入一个值,这个值就是这个变量的值(优先级高)
$releasever
作用:标识操作系统的版本号。 默认取值:先查找/etc/yum.conf配置文件中distroverpkg配置的value,然后取得value对应的rpm包名,最后获取到这个rpm包的release版本号就是这个变量的值(如果是centos系统,默认情况下distroverpkg的value为centos-release,再取centos-release这个包的release号) 设置方法:在/etc/yum/vars/releasever文件写入一个值,这个值就是这个变量的值(优先级高)
问题解决
通过python获取yum相关变量的值:
# python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'
最终发现是centos-release这个rpm包被删掉了,把这个包重装了一下,$releaserver变量取值就正常了,到此问题解决。在centos6/7系统上,如上yum相关变量的设置方法相同。
参考文章
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/sec-Configuring_Yum_and_Yum_Repositories#