百胜:如何查看$ releasever,$ basearch和$ YUM0等变量?


49

我正在设置yum存储库,并且需要调试yum.conf文件中的某些URL。我想知道当科学Linux希望捕获另一个URL时为什么要尝试捕获该URL:

# yum install package 
http://192.168.1.100/pub/scientific/6.1/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: sl. Please verify its path and try again

的yum.conf(5)手册页提供了有关这些变量的一些信息:

变数

您可以使用许多变量来简化yum配置文件的维护。它们在几个选项的值中可用,包括名称,baseurl和命令。

$ releasever将替换为distroverpkg中列出的软件包版本的值。默认为'redhat-release'软件包的版本。

$ arch这将被os.uname()[4]在Python中列出的架构所取代。

$ basearch这将被yum中的基本体系结构取代。例如,如果您的$ arch是i686,则$ basearch将是i386。

$ YUM0- $ YUM9这些将被具有相同名称的shell环境变量的值替换。如果shell环境变量不存在,则不会替换配置文件变量。

有没有一种方法可以使用yum命令行实用程序查看这些变量?我宁愿不搜寻'redhat-release'软件包的版本,也不希望在Python中手动获取os.uname()[4]的值。


“搜集redhat-release的版本”是微不足道的。 cat /etc/redhat-release 实际上,请cat /etc/system-release改用,因为这将视情况与/ etc / redhat-release,/ etc / centos-release,/ etc / oel-release,/ etc / <科学Linux使用的任何内容>建立符号链接。
Xalorous

3
/etc/redhat-release$releasever变量不同。这里的问题是要弄清楚用什么百胜代替这些变量?以编程方式发生了什么?
Stefan Lasiewski '16

1
“搜寻redhat-release的版本”也与“ cat / etc / redhat-release”不同。前者要求提供一个版本,而后者则要求一个绝对不可靠且无限可变的文件,永远不要信任它。 rpm -qf /etc/issue是标准方法,除非SuSE没有参加FSStnd会议,否则LSB 会采用这种方法。没错
user2066657

Answers:


71

如果安装yum-utils,它将为您yum-debug-dump提供将这些变量和更多调试信息写入文件的功能。没有写入stdout的选项,它总是会写入实际上不是那么有用的文件。

显然,这不是一个很好的解决方案,因此这是一个Python单一代码,您可以复制并粘贴该代码,将这些变量打印到stdout。

python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'

这适用于CentOS 5和6,但不适用于4。yum是用python编写的,因此yum python模块已经在您的服务器上,无需安装任何插件。

这是在CentOS 5上的样子:

[root@somebox]# python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'
{'arch': 'ia32e',
 'basearch': 'x86_64',
 'releasever': '5',
 'yum0': '200',
 'yum5': 'foo'}
[root@somebox]# 

2
yum-debug-dump似乎可以满足我的需求。看起来该%%%%YUM INFO部分下面有所有信息。我似乎无法使事情看起来像$YUM0-$YUM9,但无论如何我从不使用这些变量。
Stefan Lasiewski 2011年

2
要在bash外壳中清晰显示$ releasever,请使用:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite

这仅适用于Python的系统版本-如何使它适用于其他“ alt-install”版本的Python?
RCross '17

什么做,如果releasever实际上$是releasever字符串....你做
懒惰的编码器

10

要获得所有这些,您将需要使用mmckinst posted之类的代码,但是如果您只想检查$releasever一下,则可以yum version nogroups在RHEL-6上运行。

在RHEL-6中,另一件事是在中创建自己的/etc/yum/vars


你能详细说明吗?创造/etc/yum/vars完成了什么?另外,您是否知道这是否从RHEL5更改为RHEL6?
Stefan Lasiewski 2011年

1
您应该能够编写适用于RHEL-5和RHEL-6的代码,而不会出现问题。版本命令不在RHEL-5 atm中。我对/ etc / yum / vars(仅适用于RHEL-6)的意思是,您可以创建一个/ etc / yum / vars / foorelease ...,其中包含您自己的发布数据,甚至可以覆盖系统releasever通过写入/ etc / yum / vars / releasever。
James Antill '10


10

以防万一有人像我一样在这里结束,在Fedora上寻找dnf的等效答案,我发了以下python单行代码:

python3 -c 'import dnf, pprint; db = dnf.dnf.Base(); pprint.pprint(db.conf.substitutions,width=1)'

在Fedora 24上,它看起来像这样:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}

1
通过搜索发现了这一点yum variables repo names。现在可以用dnf代替yum来回答这个问题。做得好!
bgStack15 '17

4

并深入研究$ releasever的分配方式:

_getsysver功能查询rpm数据库,如:

rpm -q --provides $(rpm -q --whatprovides "system-release(releasever)") | grep "system-release(releasever)" | cut -d ' ' -f 3

此处定义 “ system-release(releasever)”值,它可以由yum.conf中的distroverpkg 覆盖。

如果查询未返回任何值,则将releasever设置为“ $ releasever”(例如,如果您设置了distroverpkg = centos-release但已安装了rpm redhat-release-server)


0

查看变量替换结果的另一种方法是执行以下操作:

yum-config-manager -c /etc/reposyncb.conf  | grep -i spacewalk

我正在修改yum变量,以控制选择哪个Spacewalk客户端来构建本地存储库,并发现这对于了解如何解释变量很有用。


很酷,但是此方法似乎没有提供像这样的变量releasever
Stefan Lasiewski
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.