Yum

Aus Fedorawiki.de

Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung

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