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 yum
utilitas commandline? Saya lebih suka tidak memburu versi paket 'redhat-release', atau secara manual mendapatkan nilai os.uname () [4] dengan Python.
sumber
cat /etc/redhat-release
Sebenarnya, gunakancat /etc/system-release
saja, karena ini akan menjadi symlink ke / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <apa pun yang menggunakan Linux ilmiah>, sebagaimana mestinya./etc/redhat-release
bukan hal yang sama dengan$releasever
variabel. Pertanyaannya di sini adalah untuk mencari tahu apa yang menggantikan Yum menggantikan variabel-variabel ini? Apa yang terjadi secara terprogram?rpm -qf /etc/issue
adalah metode kanonik, dan akan menjadi yang metode dalam LSB kecuali SuSE tidak bergerak dalam pertemuan FSStnd. BENAR.Jawaban:
Jika Anda menginstal
yum-utils
, itu akan memberi Andayum-debug-dump
yang 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:
sumber
yum-debug-dump
tampaknya melakukan apa yang saya butuhkan. Sepertinya semua informasi ada di bawah%%%%YUM INFO
bagian. Saya sepertinya tidak bisa membuat hal-hal seperti$YUM0-$YUM9
muncul, tetapi saya tidak pernah menggunakan variabel-variabel itu./usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Kalau-kalau ada orang yang berakhir di sini, seperti saya, mencari jawaban setara untuk dnf di Fedora, saya memahami python satu-liner berikut:
Pada Fedora 24 terlihat seperti ini:
sumber
yum variables repo names
. Ini menjawab pertanyaan untuk saat ini, dengan penggantian yum dengan dnf. Kerja bagus!Untuk mendapatkan semuanya, Anda harus menggunakan kode seperti mmckinst yang diposting , tetapi jika Anda hanya ingin memeriksa,
$releasever
Anda dapat menjalankannyayum version nogroups
di RHEL-6.Hal lain yang harus dilakukan, di RHEL-6, adalah dengan membuatnya sendiri
/etc/yum/vars
.sumber
/etc/yum/vars
dicapai dengan menciptakan ? Juga, apakah Anda tahu jika ini berubah dari RHEL5 ke RHEL6?/etc/yum/vars
dapat ditemukan di access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…Dan menelusuri cara $ releasever ditugaskan:
The Fungsi _getsysver query database rpm seperti:
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)
sumber
Cara lain untuk melihat hasil substitusi variabel adalah dengan melakukan sesuatu seperti ini:
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.
sumber
releasever
.