it-swarm-id.com

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

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) manual 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 dengan 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 utilitas commandline yum? Saya lebih suka tidak memburu versi paket 'redhat-release', atau secara manual mendapatkan nilai os.uname () [4] dengan Python.

62
Stefan Lasiewski

Jika Anda menginstal yum-utils, Itu akan memberi Anda yum-debug-dump Yang akan menulis variabel-variabel tersebut dan lebih banyak info debugging 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 dengan python, jadi yum python sudah ada di server Anda, tidak perlu menginstal apa pun exra.

Begini tampilannya di CentOS 5:

[[email protected]]# 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'}
[[email protected]]# 
80
Mark McKinstry

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

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'}
14
sysadmiral

Untuk mendapatkan semuanya, Anda harus menggunakan kode seperti mmckinst diposting , tetapi jika Anda hanya ingin memeriksa $releasever Anda dapat menjalankan yum version nogroups di RHEL-6.

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

11
James Antill

Dan menelusuri cara $ releasever ditugaskan:

The function _getsysver permintaan basis data 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 = pelepasan centos tetapi telah menginstal rpm redhat-release-server)

4
adrianlzt

Mendapatkan nilai untuk $Arch Harus benar-benar sesederhana Arch="$(Arch)" atau Arch="$(uname --machine)" tetapi jika Anda benar-benar ingin tahu apa nilai yum untuk $Arch Adalah, coba:

bash-4.2# Arch="$(python -c 'from rpmUtils import Arch; print(Arch.getCanonArch());')";
bash-4.2# declare -p Arch
declare -- Arch="ia32e"

Mendapatkan nilai untuk vars lain tanpa perlu menggunakan Python sedikit lebih mudah.

Pilihan 1:

bash-4.2# distroverpkg="$(awk --field-separator \= '/distroverpkg/{print$2}' /etc/yum.conf)";
bash-4.2# releasever="$(rpm --query --queryformat '%{VERSION}\n' "${distroverpkg:-redhat-release}")";
bash-4.2# basearch="${HOSTTYPE:-$(uname --machine)}";
bash-4.2# declare -p distroverpkg releasever basearch
declare -- distroverpkg="centos-release"
declare -- releasever="7"
declare -- basearch="x86_64"

Pilihan 2:

bash-4.2# releasever="$(rpm --query --file --queryformat '%{VERSION}\n' /etc/system-release)";
bash-4.2# basearch="$(rpm --query --queryformat '%{Arch}\n' "kernel-$(uname --kernel-release)")";
bash-4.2# declare -p releasever basearch
declare -- releasever="7"
declare -- basearch="x86_64"

Catatan: Perintah yang ditampilkan menggunakan long-opts (Bila tersedia) untuk kejelasan.

0
bfs

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

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

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

0
Robert B.