Yum

Yum:我如何查看變數,例如releasever,r和一世和一種s和v和r,releasever,基礎架構 & $YUM0?

  • April 6, 2022

我正在設置一個 yum 儲存庫,並且需要調試 yum.conf 文件中的一些 URL。我需要知道為什麼 Scientific 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 This will be replaced with your base architecture in yum. For example, if your $ arch 是 i686 你的 $basearch 將是 i386。

$ YUM0- $ YUM9 這些將被替換為同名的shell環境變數的值。如果 shell 環境變數不存在,那麼配置文件變數將不會被替換。

有沒有辦法通過使用yum命令行實用程序來查看這些變數?我寧願不尋找“redhat-release”包的版本,或者手動獲取 os.uname() 的值

$$ 4 $$在 Python 中。

當這個答案在 2011 年編寫時,當時所有版本的 RHEL/CentOS 都沒有預設為 python 安裝 json,所以我使用 pprint 很好地列印了這些東西。

現在是 2020 年,所有目前版本的 RHEL/CentOS 預設都有 json 用於 python。答案已更新為使用 json,並通過修改@sysadmiral對 Fedora 的答案進行了更新以包含 RHEL/CentOS 8。

RHEL/CentOS 8:

/usr/libexec/platform-python -c 'import dnf, json; db = dnf.dnf.Base(); print(json.dumps(db.conf.substitutions, indent=2))'

RHEL/CentOS 6 和 7

python -c 'import yum, json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'

RHEL/CentOS 4 和 5

# if you install python-simplejson
python -c 'import yum, simplejson as json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'

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

範例輸出:

# CentOS 8:
# ---
[root@0928d3917e32 /]# /usr/libexec/platform-python -c 'import dnf, json; db = dnf.dnf.Base(); print(json.dumps(db.conf.substitutions, indent=2))'
Failed to set locale, defaulting to C
{
 "arch": "x86_64",
 "basearch": "x86_64",
 "releasever": "8"
}
[root@0928d3917e32 /]# 


# CentOS 7:
# ---
[root@c41adb7f40c2 /]# python -c 'import yum, json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'
Loaded plugins: fastestmirror, ovl
{
 "uuid": "cb5f5f60-d45c-4270-8c36-a4e64d2dece4", 
 "contentdir": "centos", 
 "basearch": "x86_64", 
 "infra": "container", 
 "releasever": "7", 
 "arch": "ia32e"
}
[root@c41adb7f40c2 /]# 

# CentOS 6:
# ---
[root@bfd11c9a0880 /]# python -c 'import yum, json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'
Loaded plugins: fastestmirror, ovl
{
 "releasever": "6", 
 "basearch": "x86_64", 
 "arch": "ia32e", 
 "uuid": "3e0273f1-f5b6-481b-987c-b5f21dde4310", 
 "infra": "container"
}
[root@bfd11c9a0880 /]# 

原答案如下:

如果您 install yum-utils,那將為您yum-debug-dump提供將這些變數和更多調試資訊寫入文件的資訊。沒有寫入標準輸出的選項,它總是會寫入一些確實沒有那麼有用的文件。

這顯然不是一個很好的解決方案,所以這裡有一個 python 單行器,您可以複製和粘貼,它將這些變數列印到標準輸出。

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]# 

引用自:https://unix.stackexchange.com/questions/19701