Yum:我如何查看變數,例如releasever,r和一世和一種s和v和r,releasever,基礎架構 & $YUM0?
我正在設置一個 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]#