Gepipete Pakete

RPM-Datenbank in der Konsole

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

Abbildung 1: Die Ausgabe des Befehls "rpm -qi xmms"

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.

Abbildung 2: Die Datei forms.h wurde gefunden

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

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Einfache Skripte mit Versionskontrolle verwalten
    Das Revision Control System (RCS) verwaltet Dateien, die häufigen Änderungen unterworfen sind. Es erleichtert Ihnen die Kontrolle über Ihre Schreib- und Programmierprojekte durch automatisierte Versionsnummern, Logfiles und Textvergleiche.
  • Stark und schnell
    Wer schnell ist, verfügt nicht unbedingt über nennenswerte Stärke. Beim Bildbetrachter Qiv verhält sich das anders: Er legt ein rasantes Arbeitstempo vor und punktet zusätzlich mit starken Funktionen. Wir haben uns den vitalen Viewer genauer angeschaut.
  • Multifunktional: Telnet
    Mit Telnet rufen Sie Webseiten ab, schreiben E-Mails oder News, chatten oder spielen. Einer der ältesten Internet-Dienste nützt in mehr Anwendungsbereichen, als man meint.
  • Frisch lackiert
    Mit Pinfo erlebt die altbewährte Info-Seite ein farbiges Revival. Damit nutzen Sie die Standard-Dokumentation auf Ihrem Linux-System noch effektiver.
  • Digitaler Atlas
    Wissen Sie, wie die Nationalhymne von Marokko klingt? Wussten Sie, dass Grönland über eine Küste von 44087 Kilometern verfügt? Falls nicht, ist es an der Zeit, das Tool Xrmap zu installieren.
Kommentare

Infos zur Publikation

LU 01/2015: E-Books im Griff

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

PCLinuxOS Version 2014.08 "FullMonty" Umstellung auf deutsch
Karl-Heinz Welz, 19.12.2014 09:55, 3 Antworten
Hallo, liebe Community, ich bin 63 Jahre alt und möchte jetzt nach Jahrzehnten Windows zu Linux...
ICEauthority
Thomas Mann, 17.12.2014 14:49, 2 Antworten
Fehlermeldung beim Start von Linux Mint: Could not update ICEauthority file / home/user/.ICEauth...
Linux einrichten
Sigrid Bölke, 10.12.2014 10:46, 5 Antworten
Hallo, liebe Community, bin hier ganz neu,also entschuldigt,wenn ich hier falsch bin. Mein Prob...
Externe USB-Festplatte mit Ext4 formatiert, USB-Stick wird nicht mehr eingebunden
Wimpy *, 02.12.2014 16:31, 0 Antworten
Hallo, ich habe die externe USB-FP, die nur für Daten-Backup benutzt wird, mit dem YaST-Partition...
Steuern mit Linux
Siegfried Markner, 01.12.2014 11:56, 2 Antworten
Welches Linux eignet sich am besten für Steuerungen.