Yum
Aus Fedorawiki.de
Yum (Yellow Dog Updater Modified) ist ein Werkzeug zur Verwaltung von Paketen, welches ursprünglich für die Yellow-Dog-Distribution entwickelt wurde, um dort die Paketverwaltung zu erleichtern. Zu diesem Zweck greift es auf Internet-/CD-/lokale Quellen zu, so genannte Repositories, in denen Pakete hinterlegt sind, und lädt von dort alle benötigten Pakete, die danach mittels rpm installiert werden.
Yum ist integraler Bestandteil der Fedora Distribution und wird folglich automatisch von Anaconda in der Paketauswahl für eine Installation der Distribution berücksichtigt.
Yum ist überwiegend ein Konsolen-Frontend für Red Hat Pakete und wurde in Python erstellt, folglich müssen für die Nutzung von Yum Python und RPM auf dem
System verfügbar sein.
Inhaltsverzeichnis |
Einstellungen von Yum
yum.conf - Hier werden die Einstellungen gelesen
Im Verzeiches /etc/ ist die Datei zu finden, in der Yum die Einstellungen liest. Durch folgende Kommandozeile wird der Inhalt der Datei auf der Konsole wiedergegeben:
cat /etc/yum.conf
Nachfolgend ein Beispielinhalt:
[main] cachedir=/var/cache/yum # Legt den Ort des Zwischenspeichers fest. (Voreinstellung) keepcache=1 # Der Zwischenspeicher soll nach Beendigung des Programmes nicht gelöscht werden. debuglevel=2 # Bestimmt die Anzahl der Informationen zur Fehlersuche. logfile=/var/log/yum.log # Bestimmt Namen und Ort der Protokolldatei. exactarch=1 # Weist Yum an, nur der Architektur entsprechende Pakete auszugeben. obsoletes=1 # Sollen nicht mehr gepflegte Repos angezeigt werden ? gpgcheck=1 # Hier kann die Intregritäts- und Authenzitätsprüfung abgeschaltet werden. plugins=1 # Soll Yum Zusatzprogramme nutzen ? metadata_expire=1800 # Angabe (in Sekunden), ab welchem Alter nicht mehr die Zwischenspeicherdaten verwendet werden sollen.
Angaben zu Zusatzprogrammen
Angaben zu Zusatzprogrammen, befinden sich im Verzeichnis:
/etc/yum/pluginconf.d/
Hier werden die Dateien, in denen die Einstellungen für Yum's Hilfsprogramme gespeichert sind, zentral abgelegt.
Ausführliche Informationen zu Programmen, die als Erweiterung von YUM erstellt wurden finden sich im Artikel Yum-Plugins
Der Zwischenspeicher von Yum
Wurde in den Einstellungen von Yum keine Änderung des Ortes des Zwischenspeichers vorgenommen, befinden sich alle zwischengepseicherten Informationen im folgenden Verzeichnis:
/var/cache/yum
Für jedes Repository wird hier ein Verzeichnis angelegt, Metadaten und Pakete werde hier ebenso abgelegt.
Repo-Daten
Im Verzeichnis
/etc/yum.repos.d
werden Dateien angelegt, die Informationen für Yum, bezüglich der Verwendung von Repos, enthalten. Die Dateien enthalten Daten im ASCII text - Format:
name=$Name $Art des Repos - $Bezeichnung failovermethod=priority # Eine Alternative zu priority ist roundrobin, also reihum. Bei reihum wird ein beliebiger Rechner aus der Repo-Spiegelliste abgefragt. #baseurl=http://$Rechnername/$Verzeichniszweig # Gibt den Ort der Repo-Metadaten an. mirrorlist=http://$Rechnername/$Verzeichniszweig # Ortsangabe zur Liste der Rechner, die die Inhalte des originalen Repo-Anbieters spiegeln. enabled=1 # Über diesen "Schalter" kann das Repo de- oder aktiviert werden. gpgcheck=1 # Hier kann für jedes Repo entschieden werden, ob GPG genutzt wird. gpgkey=file:///etc/pki/rpm-gpg/$Dateiname # Ort an dem der GPG-Schlüssel abgelegt werden soll. Alternativ kann auch eine URL angegeben werden.
In einer Datei können mehrere Repos verwaltet werden.
Weitere Informationen
Weitere Informationen sind leider nur in Englisch verfügbar. Die Kommandozeile
man yum.conf
hilft hier weiter.
Benutzung von Yum
Bei der Installation oder dem Update von Paketen werden von Yum die aktivierten Repositories durchsucht. Ist das Paket Bestandteil der Repositories, übernimmt Yum automatisch alle weiteren notwendigen Schritte:
- Auflösen der Abhängigkeiten:
- Eventuelle Abhängigkeiten werden automatisch aufgelöst und angezeigt. Sofern die zur Auflösung der Abhängigkeiten benötigten Pakete ebenfalls Bestandteil der Repositories sind, werden sie automatisch mit heruntergeladen und installiert.
- Download der Pakete:
- Die zur Installation benötigten Pakete werden von den Repositories auf den lokalen Computer geladen.
- Installation der Pakete:
- Die heruntergeladenen Pakete werden im System installiert.
Yum bietet eine Fülle an Möglichkeiten, die wichtigsten seien hier erwähnt:
| | Anmerkung:
Durch den Parameter -y (direkt hinter yum einzugeben) kann die manuelle Bestätigung vor dem Installationsvorgang umgangen werden. |
Dateioperationen
yum provides Dateiname
- Yum sucht das zur Datei zugehörige Paket. Im Gegensatz zu rpm -qf muss das Paket nicht bereits installiert sein.
Paketoperationen
Pakete installieren
yum install Paketname
- Yum durchsucht nun die vorhandenen, aktiven Repositories nach Paketname. Ist das Paket vorhanden, wird wie oben beschrieben verfahren. Fehlt das Paket, bricht Yum ab.
Pakete entfernen
yum remove Paketname
| | Achtung:
Dieser Befehl deinstalliert nicht nur das einzelne Paket, sondern auch seine Abhängigkeiten! |
yum erase Paketname
- Entfernt ein Paket.
Pakete suchen
yum search Suchwort
- Dieser Befehl durchsucht die Paketenamen und Paketinformationen nach dem angegebenen Suchwort. (Achtung: Die Ausgabe kann sehr umfangreich sein.)
yum list *Suchwort*
- Dieser Befehl sucht nach einem Paket, dass im Namen das Suchwort enthält. Die Sternchen (*) sind dabei notwendig, falls vor und nach dem Suchwort noch weitere Buchstaben stehen. Die Suche kann durch reguläre Ausdrücke begrenzt werden.
Paketinformationen
yum info Paketname
- Yum listet eine kurze Beschreibung sowie Informationen über das Paket.
Pakete aktualisieren
yum update Paketname
- Yum durchsucht die Repositories nach Paketname. Ist in einem Repository eine neuere Version des Paketes vorhanden, wird sie installiert.
- Nützlich ist der Aufruf dieses Befehls ohne die Angabe eines Paketnamens:
yum update
- Nun updatet Yum alle auf dem System installierten Pakete. So lässt sich durch einen simplen Befehl auf einfache Weise das komplette System auf den jeweils aktuellen Stand bringen.
- Will man nur die verfügbaren Updates angezeigt bekommen, lässt sich das folgenderweise realisieren:
yum check-update
- Yum liefert nun eine Liste der Pakete, von denen eine neuere Version in einem der Repositories zur Verfügung steht. Dies dient rein der Information, ein Download oder eine Installation findet nicht statt.
Installation lokaler Pakete
yum localinstall Verzeichniszweig/Name.rpm
- richtet ein lokales Paket ein.
Gruppenoperationen
Gruppe installieren
yum groupinstall Gruppen-Name
- Yum durchsucht nun die vorhandenen, aktiven Repositories nach Gruppen-Name. Ist die Gruppe, z. B. Development Tools, vorhanden, wird wie oben beschrieben verfahren. Fehlt die Gruppe, bricht Yum ab.
Gruppe entfernen
groupremove 'Gruppenname'
- entfernt die genannte Gruppe aus dem Betriebssystem.
Gruppen anzeigen
Durch yum grouplist lässt sich eine Liste mit den verfügbaren und bereits installierten Gruppen anzeigen. Diese Funktion ist sehr vorteilhaft, wenn man von einer Minimal-Installation ausgeht und sein System punktuell erweitern will, ohne jedes Paket einzeln zu installieren.
Informationen zu einer Gruppe
yum groupinfo 'Gruppenname'
- gibt eine kurze Beschreibung und die Paketkonstellation aus.
Repository-Operationen
Repo-Übersicht
yum repolist
- Gibt eine Übersicht aller, dem Betriebssystem bekannten Repositories aus.
Repo aktivieren
yum --enablerepo=repo(s)
- Aktiviert genannte(s) Repo(s), Platzhalter werden unterstützt.
Repo deaktivieren
yum --disablerepo=repo(s)
- Deaktiviert genannte(s) Repo(s), Platzhalter werden unterstützt.
Siehe auch
- Paketverwaltung - Artikelsammlung zum Thema Software-Management im Fedorawiki
Programmierung von YUM über dessen Python API
Yum in 5 Minuten programmiert!
Ein Blick auf den Quelltext von Yum kann schon ein wenig Furcht hervorrufen. Es wurde eine Menge unternommen um die einfachen Dinge angenehmer und die komplexen Dinge etwas einfacher zu gestalten.
Jedes Programm zu YUM enthält, in etwa, diese vier Zeilen (zumindest die Erste und Letzte).
1 #! /usr/bin/python -tt 2 3 import os 4 import sys 5 import yum
Diese Zeilen informieren Python darüber, dass Sie auf Quelltexte von YUM und vom Betriebssystem zugreifen möchten, ähnlich den Includes.
Nun folgt der nächste Schritt der in fast jedem Programm, welches YUM behandelt, vorhanden ist:
7 yb = yum.YumBase()
Hier wird eine YUM-Instanz erstellt, mit der Sie arbeiten können.
Ein weiteres brauchbares Stück:
9 yb.conf.cache = os.geteuid() != 0
Hier wird die Instanz informiert keine Daten zu aktualisieren, da der Aufrufer des Skriptes wahrscheinlich keine Berechtigung dazu hat.
Nun, da wir über eine eigene YUM-Instanz verfügen, können wir auf die drei mächtigsten Funktionen zugreifen: pkgSack, rpmdb und repos Die ersten beiden sind sich ähnlich, aber rpmdb führt Abfragen basierend auf den installierten Paketen aus, während pkgSack auf alle aktiven Repositories zugreift (gewöhnliche Fernrepos).
Diese Repo Eigenschaften werden oft durch diese drei Funktionen benutzt: repos.enableRepo(), repos.disableRepo() und manchmal wird repos.listEnabled() verwendet.
Das ist das Gerüst um die Repo Konfiguration zu manipulieren.
Die pkgSack und rpmdb Eigenschaften haben eine enorme Funktionsanzahl. Die meisten geben Paket Eigenschaften zurück, mit denen ein großer Teil der Arbeit erledigt wird.
Die wohl mächtigsten Eigenschaften sind: searchNevra(), returnPackages() and searchPrimaryFields(). Optimierte Varianten sind: searchNames() and returnNewestByNameArch().
Ein einfaches Anwendungsbeispiel:
Einfache Variante des "yum list" Kommandos
11 # Sucht die Repository Paket Objekte, welche den Angaben entsprechen 12 pkgs = yb.pkgSack.returnNewestByNameArch(patterns=sys.argv[1:]) 13 14 for pkg in pkgs: 15 print "%s: %s" % (pkg, pkg.summary)
Einfache Statistiken die aus den installierten Paketen erstellt wurden
17 # Die 10 größten, installierten Pakete suchen 18 pkgs = yb.rpmdb.returnPackages() 19 pkgs.sort(key=lambda x: x.size, reverse=True) 20 print "Die 10 größten, installierten Pakete:" 21 done = set() 22 for pkg in pkgs: 23 if pkg.name in done: 24 continue 25 done.add(pkg.name) 26 print "%s: %sMB" % (pkg, pkg.size / (1024 * 1024)) 27 if len(done) >= 10: 28 break
Etwas fortgeschrittene Techniken
Nachdem Sie etwas mit den Funktionen gespielt haben, werden Sie möglicherweise festellen, dass das eine Funktion nicht immer das erwartete Ergebnis zurück meldet. Statt einer Eigenschaft wird manchmal ein Tupel (n-gliedrige Folge) geliefert. Zwei übliche Tupel sind Pakettupel und und das Abhängigkeitstupel.
Die da wären: 30 # Paket Tupel: 31 (pkg.name, pkg.arch, pkg.epoch, pkg.version, pkg.release) 32 # Abhängigkeits (Verfügt/Benötigt/Kollodiert/Überflüssig (VBKÜ)) Tupel: 33 (pkg.name, 'EQ', (pkg.epoch, pkg.version, pkg.release))
Vielleicht wollen Sie nun ein wenig mit den Tranktionsinformationen (yb.tsInfo) spielen, oder den "install", "update" und "remove" Funktionen von YumBase.
Das System kann ebenfalls abgefragt und verändert werden. Um die ermittelten Informationen auf eine sinnvolle Weise darzustellen, kann der der inter Ausgabe Modus des Yum eigenen Kommandozeileninterpreters genutzt werden (obwohl dies nicht wirklich unterstützt wird).
Ein brauchbares Beispiel: Manuelle Aktualisierung fast aller Metadaten nutzbarer, installierter Repos.
1 #! /usr/bin/python -tt
2
3 import os
4 import sys
5 import yum
6
7 yb = yum.YumBase()
8
9 yb.conf.cache = os.geteuid() != 0
10
11 from urlgrabber.progress import TextMeter
12
13 # Nutze internen Yum Cli Modus
14 sys.path.insert(0, '/usr/share/yum-cli')
15 import output
16
17 # Konflikte mit cron etc verhindern.
18 if sys.stdout.isatty():
19 yb.repos.setProgressBar(TextMeter(fo=sys.stdout))
20 yb.repos.callback = output.CacheProgressCallback()
21 yumout = output.YumOutput()
22 freport = ( yumout.failureReport, (), {} )
23 yb.repos.setFailureCallback( freport )
24
25 # Aktivieren der Repos, die ein Benutzer nutzen und synchronisieren möchte
26 # Dieser Schritt muss vor dem Zugriff auf die Repos erfolgen
27 for name in ('updates-testing', 'rawhide', 'livna', 'adobe-linux-i386',
28 'brew', 'rhts', 'koji-static'):
29 yb.repos.enableRepo(name + ',')
30 for repo in yb.repos.listEnabled():
31 yb.repos.enableRepo(repo.id + '-source' + ',')
32 yb.repos.enableRepo(repo.id + '-debuginfo' + ',')
33 yb.repos.doSetup()
34 for repo in yb.repos.listEnabled():
35 repo.mdpolicy = 'group:main'
36 repo.metadata_expire = 0
37 repo.repoXML
38 # Nun werden die Metadaten extrahiert und nutzbar gemacht.
39 yb.repos.populateSack(mdtype='metadata', cacheonly=1)
40 yb.repos.populateSack(mdtype='filelists', cacheonly=1)
Mehr Informationen
Für weitere Recherchen kann die Hilfe Funktion von IPython genutzt werden, Kommentare und Dokumentationen der verschiedenen Komponenten und sogar die TAB- Autovervollständigung von IPython um alle vorhandenen Eigenschaften der Pakete, Repos, phgSack oder YumBase selber, zu sehen.
Quelle
http://illiterat.livejournal.com/6254.html (Englisch)
Links

