Yum:$ releasever、$ basearch、$ YUM0などの変数を表示するにはどうすればよいですか?


49

yumリポジトリーをセットアップしていますが、yum.confファイル内のURLのいくつかをデバッグする必要があります。Scientific Linuxがこの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これは、Pythonのos.uname()[4]でリストされているアーキテクチャに置き換えられます。

$ basearchこれは、yumの基本アーキテクチャに置き換えられます。たとえば、$ archがi686の場合、$ basearchはi386になります。

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

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 / <whatever Scientific Linuxが使用するもの>へのシンボリックリンクになるためです。
-Xalorous

3
/etc/redhat-release$releasever変数と同じものではありません。ここでの質問は、これらの変数の代わりにYumが何を置き換えているかを把握することです。プログラムで何が起きているのですか?
ステファンLasiewski

1
「redhat-releaseのバージョンを探す」ことも「cat / etc / redhat-release」と同じではありません。前者はバージョンを要求しますが、後者は完全に信頼できない、無限に変更可能なファイルを表示しますが、これは決して信頼されるべきではありません。 rpm -qf /etc/issueは標準的な方法であり、SuSEがFSStndミーティングで動き出した以外はLSB 方法でした。ヤリー。
user2066657

回答:


71

をインストールするとyum-utilsyum-debug-dumpこれらの変数とより多くのデバッグ情報がファイルに書き込まれます。stdoutに書き込むオプションはありません。常に何らかのファイルに書き込まれますが、実際にはそれほど役に立ちません。

これは明らかに優れたソリューションではないので、コピーして貼り付けてこれらの変数を標準出力に出力できるPythonのワンライナーがあります。

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

これはCentOS 5および6で動作しますが、4では動作しません。yumはpythonで記述されているため、yum pythonモジュールは既にサーバー上にあり、exraをインストールする必要はありません。

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表示されるようなものを作成することはできませんが、とにかくこれらの変数を使用することはありません。
ステファンLasiewski

2
クリーンディスプレイ取得するには$ releasever:bashシェルでは、この使用/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite

これは、システムバージョンのPythonでのみ機能します-追加の「alt-install」バージョンのPythonでこれを機能させるにはどうすればよいですか?
-RCros

releaseverが実際に文字列releasever $ ....であれば、あなたは何をしますか
レイジーCoderの

10

それらをすべて取得するには、mmckinst postedのようなコードを使用する必要がありますが、確認したい場合はRHEL-6で$releasever実行できますyum version nogroups

RHEL-6で行う他のことは、で独自に作成すること/etc/yum/varsです。


詳しく説明してもらえますか?作成は何を/etc/yum/vars達成しますか?また、これがRHEL5からRHEL6に変更されたかどうかを知りましたか?
ステファンLasiewski

1
RHEL-5とRHEL-6で問題なく動作するコードを作成できるはずです。versionコマンドはRHEL-5 atmにはありません。/ etc / yum / vars(RHEL-6のみ)について私が意図したことは、独自のリリースデータを含む/ etc / yum / vars / foorelease ...を作成するか、システムreleaseverをオーバーライドすることさえできるということです。 / etc / yum / vars / releaseverに書き込みます。
ジェームズアンティル

詳細について/etc/yum/varsは、access.redhat.com / knowledge / docs / en
Stefan Lasiewski

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。これは、yumをdnfに置き換えることで、今の質問に答えます。すごい仕事!
bgStack15

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

変数置換の結果を確認するもう1つの方法は、次のようなことです。

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

yum変数をいじって、ローカルリポジトリを構築するためにどのspacewalkクライアントを選択するかを制御し、変数がどのように解釈されているかを確認するのに役立ちました。


しかし、このメソッドはのような変数を提供しないようですreleasever
ステファンLasiewski
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.