20.2RPM-Paketverwaltung
Das Kommando rpm installiert und verwaltet RPM-Pakete. Es hilft dabei,
-
im Rahmen einer Installation automatisch Änderungen in schon vorhandenen Dateien durchzuführen (etwa in Script-Dateien).
-
ein Programm durch eine aktuellere Version zu ersetzen, wobei von geänderten Dateien automatisch Backups erstellt werden.
-
alle Dateien eines Programms wieder zu entfernen.
-
sicherzustellen, dass vor der Installation eines Programms alle Voraussetzungen erfüllt sind, dass also alle erforderlichen Bibliotheken in der richtigen Version zur Verfügung stehen.
-
zu überprüfen, ob eine Datei seit der Installation des Pakets verändert wurde.
-
festzustellen, zu welchem Paket eine bestimmte Datei gehört.
Die erforderlichen Verwaltungsinformationen befinden sich in jedem RPM-Paket. Bei der Installation werden diese Informationen in eine Datenbank eingetragen, deren Dateien sich im Verzeichnis /var/lib/rpm befinden.
Grundlagen
Die meisten RPM-Pakete werden in zwei Varianten zur Verfügung gestellt: als Binärpaket und als Quellcodepaket. Das Binärpaket enthält die zur Ausführung des Programms notwendigen Dateien. Das Quellcodepaket ist nur für Entwickler interessant. Es enthält den Quellcode, der erforderlich war, um das Binärpaket zusammenzustellen.
Der Paketname enthält ziemlich viele Informationen: abc-2.0.7-1.x86_64.rpm bezeichnet beispielsweise das Paket abc mit der Versionsnummer 2.0.7 und der Release-Nummer 1. Falls bei der Zusammenstellung eines Pakets ein Fehler aufgetreten ist, zusätzliche Online-Dokumentation beigefügt wurde oder andere Änderungen durchgeführt wurden, entstehen Release-Ziffern größer als 1 für eine bestimmte Versionsnummer. Die Versionsnummer bezieht sich also auf das eigentliche Programm, die Release-Nummer auf die rpm-Zusammenstellung.
Die Kennung x86_64 weist darauf hin, dass das Paket Binärdateien für Intel/AMD-kompatible 64-Bit-Prozessoren enthält. Wenn das Paket abc Script- oder Textdateien enthält, die von der CPU-Architektur unabhängig sind, wird statt der CPU-Kennung das Kürzel noarch verwendet. Wenn das Paket den Quellcode enthält, ist stattdessen das Kürzel src üblich.
Die Paketdatei enthält neben den zu installierenden Dateien zahlreiche Verwaltungsinformationen: eine kurze Paketbeschreibung, abermals Informationen über Versionsnummern, die Einordnung in die Gruppenhierarchie, Abhängigkeiten von anderen Paketen etc. Abhängigkeiten bestehen dann, wenn ein Paket eine bestimmte Programmiersprache, wie Perl, oder eine bestimmte Library voraussetzt. In diesem Fall müssen zuerst diese Pakete installiert werden.
rpm verwaltet eine Datenbank mit Informationen über alle installierten Binärpakete. Diese Datenbank wird in diversen Dateien im Verzeichnis /var/lib/rpm gespeichert. Die Datenbank enthält nur Informationen zu Binärpaketen. Eventuell auch installierte Pakete mit Quellcode werden nicht in die Datenbank aufgenommen.
Damit die RPM-Datenbank mit der tatsächlichen Installation übereinstimmt, dürfen Pakete nicht einfach durch Löschen der Dateien, sondern müssen durch ein Deinstallieren (rpm -e) entfernt werden!
Um ein RPM-Paket zu aktualisieren, wird oft das gesamte neue Paket heruntergeladen. Gerade bei Sicherheits-Updates, bei denen oft nur winzige Änderungen an wenigen Dateien erforderlich sind, ist das ineffizient. Aus diesem Grund gibt es Delta-RPM-Pakete, die nur die Änderungen gegenüber einer bestimmten Version des Pakets enthalten.
Die Anwendung von Delta-RPMs ist grundsätzlich einfach: Zuerst erzeugt das Kommando applydeltarpm aus dem Delta-RPM und dem Original-Paket bzw. dessen installierten Dateien das neue, aktualisierte RPM-Paket. Dieses wird dann ganz normal installiert (rpm -U). applydeltarpm ist Teil des Pakets deltarpm.
applydeltarpm setzt voraus, dass momentan eine ganz bestimmte Version des Pakets installiert ist. Ist das nicht der Fall bzw. wurden deren Dateien nach der Installation verändert, ist zur Durchführung des Updates die Original-RPM-Datei erforderlich.
Bei 64-Bit-Distributionen kann es vorkommen, dass rpm -qi name trotz eines eindeutigen Paketnamens Informationen zu zwei Paketen auflistet. Das ist kein Fehler; vielmehr handelt es sich um zwei gleichnamige Pakete mit den Dateien der 32- und der 64-Bit-Variante eines Programms bzw. einer Bibliothek.
SUSE vermeidet gleichnamige Pakete mit unterschiedlichem Inhalt, indem es die 32-Bit-Varianten im Paketnamen mit dem Anhang 32bit kennzeichnet. rpm -qa | grep 32bit liefert dort eine Liste aller 32-Bit-Pakete, die aus Kompatibilitätsgründen erforderlich sind.
RPM-Datenbank reparieren
In seltenen Fällen passiert es, dass die RPM-Datenbank inkonsistente Daten enthält. Das äußert sich darin, dass das rpm-Kommando nicht mehr verwendet werden kann bzw. Fehlermeldungen wie cannot open packages database liefert. Abhilfe schaffen meistens die Kommandos rm -f /var/lib/rpm/__db* und dann rpm --rebuilddb. Damit wird die RPM-Datenbank neu erzeugt. Das dauert allerdings eine Weile.
Das rpm-Kommando
Es mag auf den ersten Blick überraschend wirken, aber Sie werden mit dem rpm-Kommando selten ein Paket installieren oder wieder entfernen. Dazu setzen Sie in aller Regel dnf, yum, zypper oder eine grafische Benutzeroberfläche ein, und rpm kommt nur hinter den Kulissen zum Einsatz.
Der praktische Nutzen des rpm-Kommandos besteht heute primär darin, die Paketdatenbank auszulesen und daraus Informationen zu extrahieren, die yum oder zypper Ihnen gar nicht oder nur viel umständlicher geben. Tabelle 20.1 fasst die wichtigsten rpm-Kommandos zusammen. Die folgenden Beispiele zeigen die praktische Anwendung.
Aufgabe |
Kommando |
---|---|
Paket installieren |
rpm -i datei.rpm |
Paket aktualisieren |
rpm -U datei.rpm |
Paketinstallation überprüfen (verify) |
rpm -V datei.rpm |
Paket entfernen |
rpm -e paketname |
Alle installierten Pakete ermitteln |
rpm -qa |
Paket ermitteln, das diese Datei zur Verfügung stellt |
rpm -qf datei |
Paketbeschreibung anzeigen |
rpm -qi paketname |
Liste aller Dateien des Pakets ermitteln |
rpm -ql paketname |
Liste aller Konfigurationsdateien des Pakets ermitteln |
rpm -qc paketname |
Informationen zu einem noch nicht installierten Paket ermitteln |
rpm -qpli datei.rpm |
Tabelle 20.1Wichtige rpm-Kommandos
Nehmen Sie an, Sie entdecken im /etc-Verzeichnis eine Datei, die Ihnen bisher noch nie aufgefallen ist und von der Sie wissen möchten, welchen Zweck sie hat. rpm -qf verrät, zu welchem Paket sie gehört. rpm -qi liefert eine kurze Beschreibung des Pakets, und rpm -ql zeigt alle anderen Dateien, die ebenfalls von diesem Paket stammen:
Vielleicht möchten Sie wissen, welche perl-Pakete installiert sind. rpm -qa liefert eine Liste aller installierten Pakete. Mit grep filtern Sie daraus die interessanten Pakete heraus; sort sortiert die Liste:
Perl macht Schwierigkeiten, und Sie sind sich nicht sicher, ob das Perl-Paket korrekt installiert ist. Sind noch alle installierten Dateien dieses Pakets im Originalzustand? Die Antwort gibt rpm -V. Es listet alle Dateien auf, die sich geändert haben. In der Regel sollte das Ergebnis wie im folgenden Beispiel leer sein oder nur Konfigurationsdateien enthalten.
Unter Fedora oder RHEL können Sie das Paket nun mit yum reinstall reparieren: