it-swarm.it

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

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.

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

62
Stefan Lasiewski

Se installi yum-utils, Questo ti darà yum-debug-dump Che scriverà quelle variabili e più informazioni di debug in un file. Non esiste 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 python one-liner 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:

[[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

Nel caso in cui qualcuno finisca qui, come me, alla ricerca della risposta equivalente per dnf su Fedora ho capito quanto segue python one-liner:

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

Per ottenerli tutti dovrai usare un codice come mmckinst pubblicato , ma se vuoi solo controllare $releasever puoi eseguire yum version nogroups su RHEL-6.

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

11
James Antill

E analizzando come viene assegnato $ releasever:

funzione _getsysver interroga il database rpm come:

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

Il valore "system-release (releasever)" è definito qui e potrebbe essere sostituito 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 si è installato il rpm redhat-release-server)

4
adrianlzt

Ottenere il valore per $Arch Dovrebbe essere davvero semplice come Arch="$(Arch)" o Arch="$(uname --machine)" ma se vuoi davvero sapere quale valore di yum per $Arch È, prova:

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

Ottenere i valori per gli altri var senza bisogno di usare Python è un po 'più semplice.

Opzione 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"

Opzione 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"

Nota: i comandi mostrati usando long-opts (Quando disponibile) per chiarezza.

0
bfs

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.

0
Robert B.