20.2RPM-Paketverwaltung

Das Kommando rpm installiert und verwaltet RPM-Pakete. Es hilft dabei,

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:

user$ rpm -qf /etc/login.defs shadow-utils-4.2.1-2.fc23.x86_64 user$ rpm -qi shadow-utils Name : shadow-utils Summary : Utilities for managing accounts and shadow password files ... user$ rpm -ql shadow-utils /etc/default/useradd /etc/login.defs /usr/bin/chage ...

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:

user$ rpm -qa | grep perl | sort perl-5.22.0-349.fc23.x86_64 perl-Carp-1.36-346.fc23.noarch perl-constant-1.33-347.fc23.noarch ...

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.

user$ rpm -V perl

Unter Fedora oder RHEL können Sie das Paket nun mit yum reinstall reparieren:

root# yum reinstall perl