Installations-Tools für RPM-Pakete gibt es in allen Farben und Formen, von Gnorpm über Kpackage bis hin zu YaST. Wer jedoch schnell und zielstrebig arbeitet, wird sich gern mit dem Kommandozeilenwerkzeug rpm anfreunden.
Für viele Anwender ist der Red Hat Package Manager mit dem einprägsamen Kürzel RPM ein geläufiges Installations-Tool. Mit dem Kommando rpm -i Paketname wird ein RPM-Paket auf die Festplatte installiert. Wenn Sie von dem Programm genug haben, entfernt es ein rpm -e Programmname meist ohne Rückstände. Damit sind die Fähigkeiten des Paket-Managers jedoch längst nicht ausgereizt. RPM führt eine Datenbank, die Ihnen bei der Verwaltung Ihrer Programme unter die Arme greift.
Schauen wir uns das erste Beispiel an:
[akneib/akneib]$ rpm -qi xmms
Mit diesem Befehl erhalten Sie eine Kurzbeschreibung des Players Xmms. Die Option -q leitet sich aus dem englischen Wort Query ab, das auf Deutsch Abfrage bedeutet. Die Option -i steht für Information. Diesen Sinn bekommt -i durch die Kombination mit der Abfrage-Option, während es sonst eine Installation einleitet. Sie sehen in Abbildung 1, dass die Kurzinfo zu Xmms in Abschnitte gegliedert ist.
Außer der Beschreibung in der Zeile Description finden Sie Angaben zur Versionsnummer und den Autoren. Wenn Sie sich nur für einen Teil der Ausgabe interessieren, können Sie das Tool Grep einsetzen:
[akneib/akneib]$ rpm -qi xmms | grep Summary Summary : An MP3 player
Die Standardausgabe des Befehls rpm -qi xmms wird mit dem Zeichen “|” an grep übertragen. Im Fachjargon spricht man von einer Pipe zwischen den Programmabläufen. grep filtert die Zeile mit dem Muster “Summary” heraus und zeigt sie an. Anstelle eines groben grep können Sie die Sektionen auch direkt ansprechen:
[akneib/akneib]$ rpm -q --queryformat "%{Summary}\n" xmms
An MP3 player
Durch --queryformat erhalten Sie spezielle Paketinformationen. Das “\n” im Beispiel befiehlt der Shell einem Zeilenumbruch nach der Ausgabe und gehört nicht zum eigentlichen RPM-Kommando.
Eine Kombination aus --queryformat und grep unterstützt Sie bei der Suche nach bestimmten Paketen. Im nächsten Beispiel erhalten Sie von der Datenbank eine Liste aller Pakete der Gruppe Games. Auf die Option -B von grep kommen wir weiter unten im Text noch zu sprechen.
[akneib/akneib]$ rpm -qa --queryformat "\n Paket %{NAME}\n Gruppe %{Group}" | grep -B 1 Games
Paket xkobo
Gruppe X11/Games
–
Paket nethack
Gruppe Amusements/Games
–
[…]
Der Befehl rpm -qi führt allerdings nicht immer zum Erfolg:
[akneib/akneib]$ rpm -qi xterm Paket xterm ist nicht installiert
Xterm ist offensichtlich Teil eines noch unbekannten Paketes. Wo kann man nun ansetzen? Vielleicht kennen Sie den Befehl which bereits. which sucht in allen Verzeichnissen, die in der Variablen $PATH angegeben sind, nach dem vollständigen Pfad eines Kommandos und zeigt ihn an:
[akneib/akneib]$ which xterm /usr/bin/xterm
Jetzt haben Sie den vollständigen Pfad des Befehls xterm. Im nächsten Schritt nutzen Sie die RPM-Option -f: Damit starten Sie eine Anfrage nach dem Paket, das die entsprechende Datei enthält. Anstelle eines rpm -qf /usr/bin/xterm lösen Sie die Aufgabe etwas eleganter durch eine Kommando-Substitution:
[akneib/akneib]$ rpm -qf `which xterm` xf86-4.0.3-33
Mit dem schrecklichen Wort Kommando-Substitution ist ein Verfahren der Shell gemeint, einen Befehl innerhalb eines Befehls auszuführen. Der Befehl in den Rückwärts-Hochkommata wird dabei durch sein Ergebnis ersetzt. Alternativ zu den Backtick-Zeichen neben der Backspace-Taste dürfen Sie folgende Schreibweise verwenden:
[akneib/akneib]$ rpm -qf $(which xterm) xf86-4.0.3-33
Das Xterm gehört also zum Paket xf86-4.0.3-33. Da bei der Abfrage rpm -qi xterm kein Ergebnis gefunden wurde, finden Sie womöglich bei diesem Paket Informationen über die Terminal-Emulation. Die Option -d liefert eine Liste der Dokumentationsdateien. Für die Suche nach Informationen zum Xterm kommt nun erneut das Programm grep zum Zuge:
[akneib/akneib]$ rpm -qd xf86-4.0.3-33 | grep xterm /usr/X11R6/lib/X11/doc/html/xterm.1.html
Jetzt müssen Sie nur noch den Browser starten. Um sich die Tipperei zu ersparen, rufen Sie mit den Pfeiltasten den letzten Befehl auf und machen eine Kommando-Substitution daraus. Setzen Sie den Browser als ausführendes Programm an den Anfang des Kommandos, um die Datei xterm.1.html zu lesen.
[akneib/akneib]$ lynx `rpm -qd xf86-4.0.3-33 | grep xterm`
Die einzelnen Optionen des RPM-Kommandos lassen sich beinahe beliebig kombinieren. Im folgenden Beispiel wird die Option -a ergänzt, mit der Sie die Anfrage an alle Pakete richten:
[akneib/akneib]$ rpm -qia | less
Sie erhalten eine Ausgabe der Kurzbeschreibungen aller installierten Pakete. Um darin lesen und suchen zu können, übernimmt der Pager less die Anzeige. Eine Textdatei mit den Namen aller installierten Pakete erhalten Sie mit dem Befehl
[akneib/akneib]$ rpm -qa > allepakete.txt
Wenn Ihnen diese Liste zu unordentlich ist, bringt das Tool sort alles in alphabetische Reihenfolge:
[akneib/akneib]$ rpm -qa | sort -df -o allepakete.txt
Durch Zählen der Zeilen lässt sich auch heraus finden, wie viele Pakete installiert sind. Auch für diese Aufgabe gibt es ein Programm:
[akneib/akneib]$ rpm -qa | wc -l
561
Zwei weitere nützliche Optionen sind -c und -l. Die Option -c zeigt die Konfigurationsdateien eines Paketes an, während -l sämtliche enthaltenen Dateien auflistet:
[akneib/akneib]$ rpm -qc syslogd /etc/init.d/syslog /etc/syslog.conf [akneib/akneib]$ rpm -ql syslogd /etc/init.d/syslog /etc/syslog.conf /sbin/klogd /sbin/rcsyslog […]
Oft möchte sich der Anwender zuerst mit dem Inhalt eines Paketes vertraut machen, bevor er es installiert. Hier hilft die Angabe -p weiter, die eine nicht installierte RPM-Datei durchleuchtet. Der folgende Befehl listet alle Dateien des noch nicht installierten Paketes mutt-1.3.99-1.i386.rpm auf:
[akneib/akneib]$ rpm -qpl mutt-1.3.99-1.i386.rpm /usr/doc/mutt-1.3.99/ABOUT-NLS /usr/doc/mutt-1.3.99/COPYRIGHT […]
Abhängigkeiten
Ein Vorteil der RPM-Paketverwaltung ist das Erkennen von Abhängigkeiten. Oft kann ein Programm nur deshalb nicht installiert werden, weil es auf noch fehlende Pakete angewiesen ist. Die Option --requires sagt Ihnen, welche Bibliotheken und Pakete eine RPM-Datei benötigt:
[akneib/akneib]$ rpm -qp --requires leafnode-1.9.21-1.i386.rpm ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0) […]
Welche Libraries und Pakete eine nicht installierte RPM-Datei zur Verfügung stellt, bekommen Sie mit der Angabe --provides heraus:
[akneib/akneib]$ rpm -qp --provides xforms-0.89-3.i386.rpm libforms.so.0.89 […]
Um Bibliotheken ihre Geheimnisse zu entlocken, gibt es die Option --whatprovides:
[akneib/akneib]$ rpm -q --whatprovides libext2fs.so.2 e2fsprogs-1.19-56
In diesem Beispiel zeigt die Option an, zu welchem installierte Paket die Bibliothek libext2fs.so.2 gehört. Auch andersrum wird ein Schuh daraus: Mit einem --whatrequires als Option sagt Ihnen RPM, welche installierten Pakete die Bibliothek libext2fs.so.2 benötigen:
[akneib/akneib]$ rpm -q --whatrequires libext2fs.so.2 e2fsprogs-1.19-56 dump-0.4b21-34 mc-4.5.51-46
Was tun, wenn die Installation eines Paketes wegen unaufgelöster Abhängigkeiten abbricht? Dieses Problem taucht nicht nur bei RPM-Paketen, sondern auch bei Installationen aus den Sourcen auf. Nehmen wir an, Sie möchten sich das LaTeX-Frontend LyX aus dem Quelltext kompilieren, doch schon nach dem Ausführen des configure-Skriptes wird der Programmlauf mit der Ausgabe Cannot find forms.h beendet.
Die Suche nach der fehlenden Datei führt Sie geradewegs auf Ihre Distributions-CD. Dort liegen in einem Verzeichnis die RPM-Dateien, auf die ein Tool wie YaST zugreift. Wechseln Sie in dieses Verzeichnis und lassen Sie Ihren Rechner für Sie suchen:
~/cdrom > rpm -qpil --provides *.rpm | grep -B 30 forms\.h$ | less
Das Sternchen in “*.rpm” ist ein Jokerzeichen. Das Programm erfragt also zu allen Dateien mit der Endung .rpm die komplette Dateiliste und gibt an, welche Pakete jedes RPM-Paket auf der CD zur Verfügung stellt. Das Ergebnis der Suche wird an grep weiter gegeben, das aus dem Datenstrom die Zeile heraus fischt, die das Muster forms\.h$ enthält. Der Punkt zwischen den beiden Dateinamensteilen muss in diesem Fall mit einem Backslash maskiert werden, da er sonst als Platzhalter für ein einzelnes Zeichen angesehen würde.
Durch die Option -B 30 gibt das Tool zusätzlich 30 Zeilen vor dem erkannten Muster aus. In diesem Bereich liegt wahrscheinlich die Kurzinformation, mit der Sie das Paket identifizieren, zu dem die Datei forms.h gehört. Damit Sie das Ergebnis besser lesen können, wird das Ergebnis des grep durch eine Pipe an den Pager less überreicht.
Hier ist die Datei forms.h ein Teil des Paketes xformsd (Abbildung 2). Mit dem entsprechenden Tool Ihrer Distribution installieren Sie Xformsd von der CD. Anschließend laufen das Kompilieren von LyX und das make install ohne Fehlermeldungen durch. Das Programm checkinstall (siehe LinuxUser 05/2002, [1]) ist übrigens in der Lage, aus dem übersetzten Quelltext ein RPM-Paket zu bauen. So kommen Sie selbst bei eigenkompilierten Programmen in den Genuss eines bequemen Paket-Managements.
Installation
Auf die CDs Ihrer Distribution sind zwar viele Anwendungen gepresst, jedoch längst nicht alle. Wenn Sie die aktuelle Version eines Programmes aus dem Netz ziehen, dann sind nur eine Hand voll Kommandos notwendig, um es zu installieren. Beginnen wir mit der Installation eines Paketes:
[akneib/akneib]$ rpm -ihv mutt-1.3.99-1.i386.rpm mutt ######################
Die Option -i (ohne -q!) installiert das RPM-Paket. Über die Option -v wird der Paketname angezeigt, und das -h zaubert schließlich einen Fortschrittsbalken hervor. Um ein Paket samt Programmen und Dokumentation zu löschen, genügt ein einfaches…
[akneib/akneib]$ rpm -e mutt
Das e steht für erase, was so viel wie Ausradieren bedeutet. Sehr ruppig geht die Option --nodeps zu Werke: Sie erzwingt beispielsweise eine Installation oder Deinstallation wenn Abhängigkeiten zu anderen Paketen bestehen:
[akneib/akneib]$ rpm -e --nodeps perl
Das Update eines Paketes erreichen Sie mit der Angabe -U. Wenn das Paket noch gar nicht vorhanden war, wird es normal installiert:
[akneib/akneib]$ rpm -Uhv mutt-1.3.99-1.i386.rpm
Als reines Überbügeln kann man die Option --force bezeichnen: Mit ihr installieren Sie ein Paket, selbst wenn es schon auf Ihrer Festplatte ist, und überschreiben die entsprechenden Dateien. Wie --nodeps ist auch --force mit Vorsicht einzusetzen.
Weitere Tipps zum Umgang mit RPM-Dateien und zur Installation lesen Sie in den Artikeln der Heft-CD unter /LinuxUser/Wissen/Installation/install.html[2] und /LinuxUser/Wissen/Pakete/paket.html[3].
In Tabelle 1 finden Sie eine Übersicht der beschriebenen Optionen, mit denen Sie Ihrer Datenbank die Informationen entlocken.
Tabelle 1: Optionen
-a |
Anfrage für alle Pakete |
-e |
Paket deinstallieren |
-i |
Paketinformationen/Installieren |
-U |
Paket aktualisieren |
-q |
Anfrage |
--queryformat |
Detaillierte Paketinformation |
-f |
Welches Paket besitzt die Datei… |
-d |
Dokumentationsdateien anzeigen |
-c |
Konfigurationsdateien anzeigen |
-l |
Gesamte Dateiliste des Pakets |
-p |
Anfrage an nicht installiertes Paket |
--requires |
Abhängigkeiten des Paketes |
--provides |
Unterstützung vom Paket |
--whatprovides |
Welches Paket stellt zur … Verfügung |
--whatrequires |
Welche Pakete benötigen… |
-h |
Fortschrittsbalken |
-v |
verbose: ausführliche Informationen |
--force |
Erzwingt Installation |
--nodeps |
Ignoriert Abhängigkeiten |






