问题背景

同事发现一台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#