Yum:$ releasever、$ basearch、$ YUM0などの変数を表示するには?

Yum:$ releasever、$ basearch、$ 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設定ファイルのメンテナンスを簡素化するために使用できる多くの変数があります。 name、baseurl、command など、複数のオプション値として使用できます。

$ releasever distroverpkgにリストされているパッケージバージョンの値に置き換えられます。デフォルトは「redhat-release」パッケージのバージョンです。

$ archこれはPythonのos.uname()[4]にリストされているアーキテクチャに置き換えられます。

$ basearchこれはyumのデフォルトスキーマに置き換えられます。たとえば、$ archがi686の場合、$ basearchはi386になります。

$YUM0-$YUM9 これは、同じ名前のシェル環境変数の値に置き換えられます。シェル環境変数が存在しない場合、構成ファイル変数は置き換えられません。

コマンドラインユーティリティを使用してこれらの変数を表示する方法はありますかyum?私は "redhat-release"パッケージのバージョンを見つけるか、Pythonで手動でos.uname()[4]の値を取得したくありません。

答え1

この回答が2011年に書かれたとき、当時のRHEL / CentOSのすべてのバージョンにはPython用のjsonがデフォルトでインストールされていなかったため、pprintを使用してそれを素敵に印刷しました。

2020年で、RHEL / CentOSのすべての最新バージョンはデフォルトでPython用のjsonを提供します。 jsonを使用するように回答が更新され、RHEL / CentOS 8を含めるように修正されました。@sysadmiralからの返信Fedoraの場合。

RHEL/セントOS 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 /]# 

元の答えは次のとおりです。

これをインストールすると、これらの変数と追加のデバッグ情報をファイルに書き込む機能がyum-utils提供されます。yum-debug-dumpstdoutに書き込むオプションはありません。常に一部のファイルに書き込むため、実際には役に立ちません。

これは確かに良い解決策ではありません。したがって、コピーして貼り付けることができるPythonの1行コードがあります。これにより、これらの変数が標準出力として印刷されます。

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

ここで誰かが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'}

答え3

これらすべてを得るには、次のコードを使用する必要があります。出版社:MMckinstただし、RHEL-6で動作していることを$releasever確認したい場合。yum version nogroups

RHEL-6でやるべきもう一つの作業は/etc/yum/vars

答え4

$ releaseverがどのように割り当てられるかを詳しく見てください。

これfunction_getsysver次のようにrpmデータベースを照会します。

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

"system-release(releasever)" 値を定義します。ここであり、上書きすることができます。配布パッケージyum.confから

クエリが値を返さない場合、releaseverは "$ releasever"に設定されます(たとえば、distroverpkg=centos - リリースしかし、rpm redhat-release-serverはすでにインストールされています)

関連情報