Yum: Bagaimana saya bisa melihat variabel seperti $ releasever, $ basearch & $ YUM0?

51

Saya menyiapkan repositori yum, dan perlu men-debug beberapa URL dalam file yum.conf. Saya perlu tahu mengapa Scientific Linux mencoba mengambil URL ini, ketika saya mengharapkannya untuk mengambil URL lain:

# 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

The yum.conf (5) manualnya memberikan beberapa informasi tentang variabel-variabel ini:

Variabel

Ada sejumlah variabel yang dapat Anda gunakan untuk memudahkan pemeliharaan file konfigurasi yum. Mereka tersedia dalam nilai-nilai beberapa opsi termasuk nama, baseurl dan perintah.

$ releasever Ini akan diganti dengan nilai versi paket yang terdaftar di distroverpkg. Ini default ke versi paket 'redhat-release'.

$ arch Ini akan diganti dengan arsitektur Anda seperti yang tercantum oleh os.uname () [4] dengan Python.

$ basearch Ini akan diganti dengan arsitektur dasar Anda di yum. Misalnya, jika $ arch Anda adalah i686, $ basearch Anda akan menjadi i386.

$ YUM0- $ YUM9 Ini akan diganti dengan nilai variabel lingkungan shell dari nama yang sama. Jika variabel lingkungan shell tidak ada maka variabel file konfigurasi tidak akan diganti.

Apakah ada cara untuk melihat variabel-variabel ini dengan menggunakan yumutilitas commandline? Saya lebih suka tidak memburu versi paket 'redhat-release', atau secara manual mendapatkan nilai os.uname () [4] dengan Python.

Stefan Lasiewski
sumber
'memburu versi redhat-release' itu sepele. cat /etc/redhat-release Sebenarnya, gunakan cat /etc/system-releasesaja, karena ini akan menjadi symlink ke / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <apa pun yang menggunakan Linux ilmiah>, sebagaimana mestinya.
Xalorous
3
/etc/redhat-releasebukan hal yang sama dengan $releasevervariabel. Pertanyaannya di sini adalah untuk mencari tahu apa yang menggantikan Yum menggantikan variabel-variabel ini? Apa yang terjadi secara terprogram?
Stefan Lasiewski
1
'memburu versi redhat-release' juga TIDAK sama dengan 'cat / etc / redhat-release'. Yang pertama meminta versi, sedangkan yang kedua melihat file yang benar-benar tidak dapat diandalkan dan tak tergantikan yang tidak akan pernah dipercaya. rpm -qf /etc/issueadalah metode kanonik, dan akan menjadi yang metode dalam LSB kecuali SuSE tidak bergerak dalam pertemuan FSStnd. BENAR.
user2066657

Jawaban:

73

Jika Anda menginstal yum-utils, itu akan memberi Anda yum-debug-dumpyang akan menulis variabel-variabel itu dan info debugging lebih ke file. Tidak ada opsi untuk menulis ke stdout, itu akan selalu menulis ke beberapa file yang sebenarnya tidak terlalu membantu.

Ini jelas bukan solusi yang bagus jadi inilah python one-liner yang dapat Anda salin dan tempel yang akan mencetak variabel-variabel tersebut ke stdout.

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

Ini berfungsi pada CentOS 5 dan 6, tetapi tidak 4. yum ditulis dalam python, jadi modul yum python sudah ada di server Anda, tidak perlu menginstal exra apa pun.

Begini tampilannya di 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]# 
Mark McKinstry
sumber
2
yum-debug-dumptampaknya melakukan apa yang saya butuhkan. Sepertinya semua informasi ada di bawah %%%%YUM INFObagian. Saya sepertinya tidak bisa membuat hal-hal seperti $YUM0-$YUM9muncul, tetapi saya tidak pernah menggunakan variabel-variabel itu.
Stefan Lasiewski
2
Untuk mendapatkan tampilan bersih dari $ releasever di bash shell, gunakan ini:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite
Ini hanya berfungsi untuk versi sistem Python - bagaimana Anda membuatnya bekerja untuk versi "alt-install" tambahan Python?
RCross
apa yang Anda lakukan jika releasever sebenarnya $ releasever the string ....
The Malas Coder
11

Kalau-kalau ada orang yang berakhir di sini, seperti saya, mencari jawaban setara untuk dnf di Fedora, saya memahami python satu-liner berikut:

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

Pada Fedora 24 terlihat seperti ini:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
sysadmiral
sumber
1
Menemukan ini dari pencarian yum variables repo names. Ini menjawab pertanyaan untuk saat ini, dengan penggantian yum dengan dnf. Kerja bagus!
bgStack15
10

Untuk mendapatkan semuanya, Anda harus menggunakan kode seperti mmckinst yang diposting , tetapi jika Anda hanya ingin memeriksa, $releaseverAnda dapat menjalankannya yum version nogroupsdi RHEL-6.

Hal lain yang harus dilakukan, di RHEL-6, adalah dengan membuatnya sendiri /etc/yum/vars.

James Antill
sumber
bisakah kamu menguraikan? Apa yang /etc/yum/varsdicapai dengan menciptakan ? Juga, apakah Anda tahu jika ini berubah dari RHEL5 ke RHEL6?
Stefan Lasiewski
1
Anda harus dapat menulis kode yang berfungsi pada RHEL-5 dan RHEL-6, tanpa masalah. Perintah versi tidak ada di RHEL-5 atm. Yang saya maksud tentang / etc / yum / vars (hanya RHEL-6) adalah Anda hanya dapat membuat / etc / yum / vars / foorelease ... yang memiliki data rilis Anda sendiri di dalamnya, atau bahkan hanya menimpa pelepas sistem dengan menulis ke / etc / yum / vars / releasever.
James Antill
Info lebih lanjut tentang /etc/yum/varsdapat ditemukan di access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Stefan Lasiewski
4

Dan menelusuri cara $ releasever ditugaskan:

The Fungsi _getsysver query database rpm seperti:

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

Nilai "system-release (releasever)" didefinisikan di sini , dan itu bisa ditimpa oleh distroverpkg di yum.conf

Jika kueri tidak mengembalikan nilai apa pun, pelepas ditetapkan ke '$ pelepas' (misalnya jika Anda menyetel distroverpkg = rilis-centos tetapi telah menginstal server redhat-release-server)

adrianlzt
sumber
0

Cara lain untuk melihat hasil substitusi variabel adalah dengan melakukan sesuatu seperti ini:

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

Saya bermain-main dengan variabel yum untuk mengontrol spacewalk client mana yang dipilih untuk membangun repo lokal dan menemukan ini berguna untuk melihat bagaimana variabel ditafsirkan.

Robert B.
sumber
Keren, namun metode ini sepertinya tidak menyediakan variabel suka releasever.
Stefan Lasiewski