Yum: come posso visualizzare variabili come $ releasever, $ basearch e $ YUM0?


51

Sto configurando un repository yum e devo eseguire il debug di alcuni degli URL nel file yum.conf. Devo sapere perché Scientific Linux sta cercando di afferrare questo URL, quando mi aspettavo che prendesse un altro 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

La manpage yum.conf (5) fornisce alcune informazioni su queste variabili:

variabili

Esistono diverse variabili che è possibile utilizzare per facilitare la manutenzione dei file di configurazione di yum. Sono disponibili nei valori di diverse opzioni tra cui nome, baseurl e comandi.

$ releasever Questo sarà sostituito con il valore della versione del pacchetto elencato in distroverpkg. L'impostazione predefinita è la versione del pacchetto "redhat-release".

$ arch Questo sarà sostituito con la tua architettura come elencato da os.uname () [4] in Python.

$ basearch Questo sarà sostituito con la tua architettura di base in yum. Ad esempio, se $ arch è i686, $ basearch sarà i386.

$ YUM0- $ YUM9 Verranno sostituiti con il valore della variabile di ambiente shell con lo stesso nome. Se la variabile di ambiente shell non esiste, la variabile del file di configurazione non verrà sostituita.

C'è un modo per visualizzare queste variabili utilizzando l' yumutilità della riga di comando? Preferirei non dare la caccia alla versione del pacchetto 'redhat-release', o ottenere manualmente il valore di os.uname () [4] in Python.


'dare la caccia alla versione di redhat-release' è banale. cat /etc/redhat-release In realtà, usa cat /etc/system-releaseinvece, poiché questo sarà un link simbolico a / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <qualunque cosa usi Linux scientifico>, come appropriato.
Xalorous,

3
/etc/redhat-releasenon è la stessa cosa della $releasevervariabile. La domanda qui è capire cosa sta sostituendo Yum al posto di queste variabili? Cosa sta succedendo a livello di codice?
Stefan Lasiewski,

1
'dare la caccia alla versione di redhat-release' NON è lo stesso di 'cat / etc / redhat-release'. Il primo richiede una versione, mentre il secondo visualizza un file completamente inaffidabile e infinitamente mutabile che non dovrebbe MAI essere attendibile. rpm -qf /etc/issueè il metodo canonico e sarebbe stato il metodo in LSB se non che SuSE non si fosse mosso nelle riunioni di FSStnd. YARLY.
user2066657,

Risposte:


73

Se lo installi yum-utils, questo ti darà yum-debug-dumpquale scriverà quelle variabili e più informazioni di debug in un file. Non c'è alcuna opzione per scrivere su stdout, scriverà sempre su un file che non è poi così utile.

Questa ovviamente non è un'ottima soluzione, quindi ecco un one-liner in pitone che puoi copiare e incollare che stamperà quelle variabili su stdout.

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

Funziona su CentOS 5 e 6, ma non 4. yum è scritto in python, quindi il modulo yum python è già sul tuo server, non è necessario installare nulla exra.

Ecco come appare su 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-dumpsembra fare quello di cui ho bisogno. Sembra che le informazioni siano tutte lì sotto la %%%%YUM INFOsezione. Non riesco a far $YUM0-$YUM9apparire cose come queste, ma non uso mai quelle variabili comunque.
Stefan Lasiewski,

2
Per ottenere un display pulito di $ releasever nella shell bash, usa questo:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite,

Funziona solo con la versione di sistema di Python - come puoi farlo funzionare per una versione aggiuntiva di "alt-install" di Python?
RCross,

cosa fai se releasever è in realtà $ releasever la stringa ....
The Lazy Coder

11

Nel caso in cui qualcuno finisca qui, come me, alla ricerca della risposta equivalente per dnf su Fedora, ho escogitato il seguente one-liner in pitone:

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

Su Fedora 24 è simile al seguente:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}

1
Ho trovato questo dalla ricerca yum variables repo names. Questo risponde alla domanda per ora, con la sostituzione di yum con dnf. Ottimo lavoro!
bgStack15,

10

Per ottenerli tutti dovrai usare il codice come mmckinst pubblicato , ma se vuoi solo controllare $releaseverpuoi eseguire yum version nogroupssu RHEL-6.

L'altra cosa da fare, in RHEL-6, è semplicemente crearne uno tuo /etc/yum/vars.


Puoi elaborare? Cosa /etc/yum/varsrealizza la creazione ? Inoltre, ti capita di sapere se questo è cambiato da RHEL5 a RHEL6?
Stefan Lasiewski,

1
Dovresti essere in grado di scrivere il codice che funziona su RHEL-5 e RHEL-6, senza problemi. Il comando versione non è in RHEL-5 atm. Quello che intendevo per / etc / yum / vars (solo RHEL-6) è che puoi semplicemente creare un / etc / yum / vars / foorelease ... che contiene i tuoi dati di rilascio, o anche semplicemente sostituire il releasever di sistema scrivendo a / etc / yum / vars / releasever.
James Antill,

Maggiori informazioni su /etc/yum/varssono disponibili su access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Stefan Lasiewski il

4

E analizzando come viene assegnato $ releasever:

La funzione _getsysver interroga il database rpm come:

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

"sistema a rilascio (releasever)" valore è definito qui , e potrebbe essere sostituzione da distroverpkg in yum.conf

Se la query non ha restituito alcun valore, releasever è impostato su "$ releasever" (ad esempio se si imposta distroverpkg = centos-release ma è stato installato il server di rilascio redpm rpm)


0

Un altro modo per vedere i risultati della sostituzione delle variabili è fare qualcosa del genere:

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

Stavo armeggiando con le variabili yum per controllare quale client spacewalk è stato selezionato per la creazione di un repository locale e l'ho trovato utile per vedere come vengono interpretate le variabili.


Fantastico, tuttavia questo metodo non sembra fornire variabili simili releasever.
Stefan Lasiewski
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.