YUM变量缺失导致的问题小记

 田振 360云计算 

YUM变量缺失导致的问题小记

女主宣言:做为运维工程师最基本的素质就是应该沉着冷静,遇事不能慌。没啥解决不了的问题嘛!然而冰冻三尺非一日之寒,经验要靠平时不断的积累,HULK团队当然积累了不少的一线经验。今天就先为大家分享一个日常运维当中使用Yum命令遇到的小问题,后期将会陆续为大家分享一些实用的运维经验干货,敬请期待。PS:丰富的一线技术、多元化的表现形式,尽在“HULK一线技术杂谈”,点关注哦!


问题现象

有一次在用yum安装软件包的时候遇到了一个“蛋疼”的现象,不管安装什么软件包都是提示404,出现404的第一个想法就是:“难道yum源出问题了吗?”

如下所示:

Loaded plugins: fastestmirror, security
http://***.***.360.cn:/addops/%24releasever/os/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: ADDOPS-base. Please verify its path and try again

报错信息:

[Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found"


问题分析

仔细看404的报错URL中,有一个变量“%24releasever”格式不对,没有正常的显示出变量值,但是后边的os、x86_64却能显示出来。因此可以判断这个404的报错应该是这个变量缺失引起的。

排查问题


“%24releasever”这个变量到底是哪里设置的呢? 搜集yum相关配置文件发现了一些信息。

如下所示:YUM变量缺失导致的问题小记



查完配置文件后,发现releasever这个变量的值其实指的就是系统版本号。

那么这个变量是从哪里定义的?


查看yum.conf配置文件,发现了一些信息。

如下所示:

[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=19&ref=http://bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release


distroverpkg的值设置的应该就是系统版本信息。可是centos-release这个值看不出来有啥异常啊,既然是系统版本信息,小编第一个联想到的就是/etc/issue这个文件,于是查看系统的issue文件发现果然不正常,而rpm -qf /etc/issue 查看其他正常机器,继续排查发现这个文件其实指向的就是centos-release-6-2.el6.centos.7.x86_64这个RPM包。而系统中确实没有这个软件包。


至此,基本就可以确定了:“distroverpkg设置的就是centos-release这个软件包”


解决问题:

由于目前系统中没有安装centos-release这个软件包,导致yum install总是404,可是为了安装centos-release这个软件包,临时把yum源配置文件中系统版本号的变量$releasever手动修改成6。这样yum install的时候就不会出现404了。待成功安装centos-release后,改回$releasever即可。


技巧

小编把一些排查问题中实用的技巧贴到这里,分享给大家:

1. /usr/bin/python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'# 这个Python命令会显示yum仓库中变量的赋值情况正常情况下会显示如下信息:{'arch': 'ia32e',
 'basearch': 'x86_64',
 'releasever': '6',
 'uuid': '89949ccb-38ce-4dcf-8ed1-bab80f515481'}
2. yum whatprovides centos-release 
# 这个yum命令会显示centos-release的完整依赖情况
如下所示:

centos-release-6-6.el6.centos.12.2.x86_64 : CentOS release file
Repo        : base-6.6
Matched from:


centos-release-6-2.el6.centos.7.x86_64 : CentOS release file
Repo        : installed
Matched from:
Other       : Provides-match: centos-release


总结

Yum命令做为运维工程师的基本技能,一定要灵活掌握!团队内一个资深老司机经常说“身为一名运维工程师,如果对yum命令和rpm包了解不够的话,那就不是一个称职的工程师”


上一篇:2021-03-19


下一篇:404单页带时间访问一次自动更换壁纸