Yum: Wie kann ich Variablen wie $ releasever, $ basearch & $ YUM0 anzeigen?

49

Ich richte ein yum-Repository ein und muss einige der URLs in der Datei yum.conf debuggen. Ich muss wissen, warum Scientific Linux versucht, diese URL abzurufen, als ich damit gerechnet habe, dass eine andere URL abgerufen wird:

# 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

Die Hilfeseite yum.conf (5) enthält einige Informationen zu diesen Variablen:

Variablen

Es gibt eine Reihe von Variablen, mit denen Sie die Verwaltung der Konfigurationsdateien von yum vereinfachen können. Sie stehen in den Werten mehrerer Optionen zur Verfügung, einschließlich Name, Baseurl und Befehle.

$ releasever Dies wird durch den Wert der Version des in distroverpkg aufgelisteten Pakets ersetzt. Dies ist standardmäßig die Version des Pakets 'redhat-release'.

$ arch Dies wird durch Ihre Architektur ersetzt, wie sie in Python durch os.uname () [4] aufgeführt ist.

$ basearch Dies wird in yum durch Ihre Basisarchitektur ersetzt. Wenn Ihr $ arch zum Beispiel i686 ist, ist Ihre $ basearch i386.

$ YUM0- $ YUM9 Diese werden durch den Wert der gleichnamigen Shell-Umgebungsvariablen ersetzt. Wenn die Shell-Umgebungsvariable nicht vorhanden ist, wird die Konfigurationsdateivariable nicht ersetzt.

Gibt es eine Möglichkeit, diese Variablen mithilfe des yumBefehlszeilendienstprogramms anzuzeigen ? Ich würde es vorziehen, die Version des Pakets 'redhat-release' nicht zu finden oder den Wert von os.uname () [4] in Python manuell abzurufen.

Stefan Lasiewski
quelle
'die version von redhat-release jagen' ist trivial. cat /etc/redhat-release Verwenden Sie cat /etc/system-releasestattdessen, da dies ein Symlink zu / etc / redhat-release, / etc / centos-release, / etc / oel-release oder / etc / <was auch immer für wissenschaftliches Linux verwendet wird> ist.
Xalorous
3
/etc/redhat-releaseist nicht dasselbe wie die $releaseverVariable. Die Frage hier ist, was Yum anstelle dieser Variablen ersetzt. Was passiert programmatisch?
Stefan Lasiewski
1
'Die Version von RedHat-Release finden' ist auch NICHT dasselbe wie 'cat / etc / RedHat-Release'. Ersteres fragt nach einer Version, während Letzteres eine völlig unzuverlässige und unendlich veränderbare Datei anzeigt, der man NIEMALS vertrauen sollte. rpm -qf /etc/issueist die kanonische Methode und wäre die Methode in LSB gewesen, außer dass SuSE sich in den FSStnd-Meetings nicht bewegt hat. YARLY.
user2066657

Antworten:

71

Wenn Sie installieren yum-utils, erhalten Sie yum-debug-dump, welche Variablen und weitere Debugging-Informationen in eine Datei geschrieben werden. Es gibt keine Möglichkeit, in stdout zu schreiben. Es wird immer in eine Datei geschrieben, die wirklich nicht so hilfreich ist.

Dies ist offensichtlich keine großartige Lösung. Hier ist ein Python-Einzeiler, den Sie kopieren und einfügen können, um diese Variablen in stdout zu drucken.

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

Dies funktioniert unter CentOS 5 und 6, jedoch nicht unter 4. yum ist in Python geschrieben, sodass sich das yum-Python-Modul bereits auf Ihrem Server befindet und keine zusätzliche Installation erforderlich ist.

So sieht es auf CentOS 5 aus:

[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
quelle
2
yum-debug-dumpscheint zu tun was ich brauche. Sieht so aus, als ob die Informationen dort unter dem %%%%YUM INFOAbschnitt sind. Ich kann nicht scheinen, Dinge wie $YUM0-$YUM9erscheinen zu lassen, aber ich benutze diese Variablen sowieso nie.
Stefan Lasiewski
2
Verwenden Sie Folgendes, um eine saubere Anzeige von $ releasever in der Bash-Shell zu erhalten:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite
Dies funktioniert nur für die Systemversion von Python. Wie funktioniert dies für eine zusätzliche "Alt-Install" -Version von Python?
RCross
Was machst du, wenn releasever tatsächlich $ releasever der String ist?
The Lazy Coder
10

Um alle zu erhalten, müssen Sie Code wie mmckinst posted verwenden , aber wenn Sie nur überprüfen möchten, können $releaseverSie yum version nogroupsauf RHEL-6 ausführen .

Das andere, was Sie in RHEL-6 tun müssen, ist, Ihr eigenes In zu erstellen /etc/yum/vars.

James Antill
quelle
Kannst du das näher erläutern? Was leistet das Schaffen /etc/yum/vars? Wissen Sie zufällig, ob dies von RHEL5 auf RHEL6 geändert wurde?
Stefan Lasiewski
1
Sie sollten problemlos Code schreiben können, der auf RHEL-5 und RHEL-6 funktioniert. Der Versionsbefehl ist nicht in RHEL-5 atm. Was ich mit / etc / yum / vars (nur RHEL-6) gemeint habe, ist, dass Sie einfach ein / etc / yum / vars / foorelease erstellen können, das Ihre eigenen Release-Daten enthält, oder sogar den System-Releasever überschreiben indem Sie an / etc / yum / vars / releasever schreiben.
James Antill
Weitere Informationen /etc/yum/varsfinden Sie unter access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Stefan Lasiewski
10

Nur für den Fall, dass jemand hier landet, wie ich, auf der Suche nach der entsprechenden Antwort für dnf auf Fedora, habe ich den folgenden Python-Einzeiler herausgefunden:

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

Auf Fedora 24 sieht es so aus:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
Sysadmiral
quelle
1
Fand dies von der Suche yum variables repo names. Dies beantwortet die Frage vorerst mit dem Ersatz von yum durch dnf. Gute Arbeit!
bgStack15
4

Und detailliert, wie $ releasever zugewiesen wird:

Die Funktion _getsysver fragt die rpm-Datenbank wie folgt ab :

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

Der Wert für "system-release (releasever)" wird hier definiert und kann von distroverpkg in yum.conf überschrieben werden

Wenn die Abfrage keinen Wert zurückgibt, wird releasever auf '$ releasever' gesetzt (zum Beispiel, wenn Sie distroverpkg = centos-release setzen, aber den rpm redhat-release-server installiert haben)

adrianlzt
quelle
0

Eine andere Möglichkeit, die Ergebnisse der Variablensubstitution anzuzeigen, besteht darin, Folgendes zu tun:

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

Ich habe an yum-Variablen herumgebastelt, um zu steuern, welcher Spacewalk-Client zum Erstellen eines lokalen Repos ausgewählt wird, und fand dies hilfreich, um zu sehen, wie die Variablen interpretiert werden.

Robert B.
quelle
Cool, aber diese Methode scheint keine Variablen wie zu liefern releasever.
Stefan Lasiewski