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 yum
Befehlszeilendienstprogramms 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.
quelle
cat /etc/redhat-release
Verwenden Siecat /etc/system-release
stattdessen, 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./etc/redhat-release
ist nicht dasselbe wie die$releasever
Variable. Die Frage hier ist, was Yum anstelle dieser Variablen ersetzt. Was passiert programmatisch?rpm -qf /etc/issue
ist die kanonische Methode und wäre die Methode in LSB gewesen, außer dass SuSE sich in den FSStnd-Meetings nicht bewegt hat. YARLY.Antworten:
Wenn Sie installieren
yum-utils
, erhalten Sieyum-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:
quelle
yum-debug-dump
scheint zu tun was ich brauche. Sieht so aus, als ob die Informationen dort unter dem%%%%YUM INFO
Abschnitt sind. Ich kann nicht scheinen, Dinge wie$YUM0-$YUM9
erscheinen zu lassen, aber ich benutze diese Variablen sowieso nie./usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Um alle zu erhalten, müssen Sie Code wie mmckinst posted verwenden , aber wenn Sie nur überprüfen möchten, können
$releasever
Sieyum version nogroups
auf RHEL-6 ausführen .Das andere, was Sie in RHEL-6 tun müssen, ist, Ihr eigenes In zu erstellen
/etc/yum/vars
.quelle
/etc/yum/vars
? Wissen Sie zufällig, ob dies von RHEL5 auf RHEL6 geändert wurde?/etc/yum/vars
finden Sie unter access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…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:
Auf Fedora 24 sieht es so aus:
quelle
yum variables repo names
. Dies beantwortet die Frage vorerst mit dem Ersatz von yum durch dnf. Gute Arbeit!Und detailliert, wie $ releasever zugewiesen wird:
Die Funktion _getsysver fragt die rpm-Datenbank wie folgt ab :
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)
quelle
Eine andere Möglichkeit, die Ergebnisse der Variablensubstitution anzuzeigen, besteht darin, Folgendes zu tun:
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.
quelle
releasever
.