next up previous contents index
Next: shutdown Up: Die Kommandos für root Previous: rmmod

Subsections


rpm

  

Funktion:

rpm (RedHat Packet Manager) installiert und verwaltet Softwarepakete

Syntax:

rpm Optionen

Beschreibung:

Der RedHat Packet Manager rpm installiert neue Softwarepakete im RPM-Format auf einem Linux-System oder entfernt vorher installierte Pakete vollständig.

rpm stellt bei der Installation neuer Pakete die Integrität der bereits installierten Pakete sicher. rpm überprüft vor der Installation eines neuen Pakets die durch Abhängigkeit von anderen Paketen gegebenen Voraussetzungen. Beim Update eines installierten Pakets auf eine neuere Version werden die Konfigurationsdateien des alten Pakets automatisch gesichert.

Das Programm glint bietet eine komfortable Benutzerschnittstelle zu den wesentlichen Funktionen von rpm. Eine Einführung in die Benutzung von rpm auf der Kommandozeile ist im Abschnitt über Softwaremanagement zu finden.

Über die für die Systemverwaltung notwendige Funktionalität hinaus kann rpm dazu benutzt werden, neue Softwarepakete im RPM-Format zu erzeugen.


Für die unterschiedlichen Aufgaben benutzt rpm jeweils bestimmte Betriebsarten. Die wichtigsten Betriebsarten sind:

 
Install
Im Installationsmodus werden neue Softwarepakete aus einer RPM-Datei in das laufende System eingefügt. Der Installationsmodus wird durch den Optionsschalter -i oder in der langen Schreibweise -install eingeleitet. Mit zusätzlichen Optionsschaltern kann die Arbeitsweise von rpm im Installationsmodus weiter beeinflußt werden. Als Argument sind die Namen der RPM-Dateien für die zu installierenden Pakete anzugeben.
Upgrade
Im Upgrade-Modus wird ein bereits installiertes Softwarepaket durch eine neuere Version ersetzt. Um rpm im Upgrade-Modus zu starten, muß als erste Option -U oder in langer Schreibweise -upgrade angegeben werden. Die Arbeitsweise gleicht in vieler Hinsicht der beim Installieren neuer Pakete. Entsprechend sind auch die möglichen Modifikationsoptionen und Argumente fast identisch mit denen des Installationsmodus.
Query
Der Query-Modus liefert Informationen über die mit rpm bereits installierten Softwarepakete oder über den Inhalt einer RPM-Datei. rpm gelangt in den Query-Modus, wenn als erste Option ein -q oder -query angegeben wird.
Erase
Der Erase-Modus dient zum vollständigen Löschen vorher installierter RPM-Pakete aus dem System. Der Modus wird durch die Schalter -e oder -erase eingeleitet. Konfigurationsdateien werden gesichert, sofern sie verändert wurden.
Verify
Der Verify-Modus dient zum Überprüfen der Integrität bereits installierter Softwarepakete. Eingeleitet wird dieser Modus mit -V oder -verify. Verify erkennt beispielsweise das Fehlen von zu einem Softwarepaket gehörenden Dateien und die Veränderung von Eigentümer oder Zugriffsrechten.
Build
Im Build-Modus werden neue RPM-Pakete erzeugt. Dieser Modus wird durch die Option -b eingeleitet.

Die Optionen -help -version -showrc -rebuilddb -initdb -recompile -rebuild -setperm -setugids und -checksig können unabhängig von einem der oben beschriebenen Modi verwendet werden.

Um während der Ausführung eines rpm-Kommandos zusätzliche Information über den Status und eventuell hilfreiche Debuginformationen zu erhalten, kann in jedem Modus durch die Option -v oder -v v die Gesprächigkeit des Programms erhöht werden.

Die Optionen -help und -version führen zur Ausgabe der entsprechenden Informationen.


Verschiedene Pfadinformationen und bestimmte Defaulteinstellungen kann rpm aus einer Konfigurationsdatei lesen. Das Programm sucht nach dieser Datei unter dem Namen rpmrc in den Verzeichnissen /usr/lib und /etc. Außerdem werden die Einstellungen aus der Datei .rpmrc im Heimatverzeichnis des Benutzers gelesen, wenn diese Datei existiert. Schließlich ist es noch möglich, mit der Option -rcfile eine Initialisierungsdatei beim Aufruf des Programms auf der Kommandozeile anzugeben. Es werden alle Dateien in der oben aufgeführten Reihenfolge gelesen und eventuell bereits belegte Werte durch die später gelesenen überschrieben.

Installation neuer Pakete

  Der sicher am häufigsten verwendete Modus von rpm ist der Installationsmodus.

Als Argument erwartet das Programm den oder die Namen der zu installierenden RPM-Datei(en). Wenn diese Dateien auf CD, in einem NFS-Verzeichnis oder auf der lokalen Festplatte vorhanden sind, wird das Paket durch seinen normalen Linux-Dateinamen angegeben. rpm erlaubt aber auch die direkte Installation von RPM-Paketen von einem FTP-Server. Dazu muß einfach nur der Paketname als URL (das ist die in HTML-Dokumenten für das WWW übliche Form) angegeben werden. Das Beispiel zeigt eine URL für die Datei bar.rpm im Verzeichnis /pub/foo auf dem FTP-Server server.domain.de. Wenn ein Username und ein Paßwort erforderlich sind, können die ebenfalls angegeben werden. Ein anonymer FTP-Login erfolgt automatisch.

ftp://user:password@server.domain.de/pub/foo/bar.rpm


Zusätzlich zu dem immer erforderlichen Optionsschalter -i (bzw. der langen Version -install) bietet der Installationsmodus folgende Optionen:

-test
führt alle normalerweise vor der eigentlichen Installation vorgenommenen Tests durch, die Installation selbst findet aber nicht statt. Getestet wird, ob alle Pakete, von denen ein zu installierendes Paket abhängig ist, bereits installiert sind und ob eine der bei der Installation erzeugten Dateien einen Namenskonflikt mit einer bereits installierten Datei eines anderen Pakets auslöst.

Wird bei einem der Tests ein Problem erkannt, erscheint eine entsprechende Fehlermeldung und das Programm beendet mit dem Status 1. Anderenfalls wird das Programm ohne weitere Ausgabe mit dem Status 0 beendet.

-replacepkgs
erzwingt die Installation eines bereits installierten Pakets. rpm erkennt durch den Vergleich mit seiner Datenbank, daß ein Paket bereits installiert ist, und lehnt die Wiederinstallation normalerweise mit einer Fehlermeldung ab. Die Durchführung einer solchen Wiederinstallation kann durch diese Option veranlaßt werden. Die existierenden Dateien werden überschrieben, Konfigurationsdateien aber vorher gesichert. Mit dieser Option kann ein teilweise zerstörtes Paket wieder vervollständigt werden.

-replacefiles
veranlaßt das Überschreiben bereits installierter Dateien anderer Pakete. rpm sichert die Integrität der bereits installierten Softwarepakete, indem es das Überschreiben existierender Dateien durch Dateien gleichen Namens, aber anderen Inhalts aus anderen Paketen verhindert.

Konfigurationsdateien werden vor dem Überschreiben automatisch gesichert, wenn sie beim Erzeugen der RPM-Datei als solche gekennzeichnet wurden.

-nodeps
unterdrückt die Prüfung auf nicht erfüllte Abhängigkeitsbedingungen zu anderen Paketen. Abhängigkeiten von ``Services''(beispielsweise eine Shared Library) anderer Pakete sind in der RPM-Datei verzeichnet. rpm stellt anhand seiner Datenbank fest, ob eines der bereits installierten Pakete die Abhängigkeit auflöst. Es lehnt die Installation der neuen Software ab, wenn nicht alle Abhängigkeiten aufgelöst werden können. Um die Installation trotzdem durchzuführen, muß diese Option verwendet werden. 

In bestimmten Fällen kann anstelle einer Abhängigkeit zu einem anderen Paket auch ein ausschließender Konflikt zu einer anderen Software in einem RPM-Paket verzeichnet sein. Auch in diesem Fall kann durch diese Option die Installation des neuen Pakets erzwungen werden.

-force
entspricht der Kombination von -replacepkgs und -replacefiles. Lediglich die Abhängigkeit von anderen Paketen wird bei -force weiterhin getestet.

-excludedocs
unterdrückt die Installation der zu einem Softwarepaket gehörenden Dokumentationsdateien.

Um die Installation von Dokumentation auf dem lokalen Rechner generell zu verhindern, kann in der Datei /etc/rpmrc (oder einer der anderen oben genannten Initialisierungsdateien) die Zeile ``excludedocs: 1'' eingetragen werden.

-includedocs
veranlaßt die Installation von Dokumentationsdateien, obwohl das in der Initialisierungsdatei durch ``excludedocs: 1'' anders voreingestellt wurde.

-hash
führt zur Ausgabe von 50 ``Hashmarks'' (#) während der Installation der Daten. Durch diese Anzeige wird der Fortschritt bei der laufenden Installation sichtbar. Durch Hinzufügen der zusätzlichen Option -v entsteht bei der Installation mehrer Pakete eine übersichtliche Anzeige.

-ftpproxy Server
Wenn der Name des zu installierenden RPM-Pakets als URL angegeben ist, das Paket also direkt per FTP installiert werden soll, kann durch diese Option der eventuell erforderliche Name des FTP-Proxy-Servers angegeben werden.

-ftpport Port
veranlaßt den Aufbau einer FTP-Verbindung auf dem angegeben port.

-noscripts
unterdrückt die Ausführung von Prä- und Post-Install-Scripts bei der Installation des Pakets. Die Ausführung dieser Scripts ist in der Regel für die vollständige Installation und für das einwandfreie Funktionieren eines Softwarepakets notwendig. Diese Option ist deshalb nur beim Debuggen eigener RPM-Pakete sinnvoll.

-prefix Verzeichnis
veranlaßt die Installation eines verschiebbaren Pakets in dem angegebenen Verzeichnis. Mit dem Kommando

rpm -qp --queryformat "%{defaultprefix}\n" *.rpm

kann festgestellt werden, ob ein bestimmtes Paket verschoben werden kann. Die Ausgabe ``(none)'' zeigt an, daß ein Paket nicht verschiebbar ist. Anderenfalls wird der Defaultprefix durch den mit dieser Option angegebenen Wert ersetzt.

-ignorearch
erzwingt die Installation eines Pakets auch dann, wenn es für eine andere Rechnerarchitektur erzeugt wurde.
-ignoreos
erzwingt die Installation eines Pakets auch dann, wenn es für ein anderes Betriebssystem erzeugt wurde.
-root Verzeichnis
macht das angegebene Verzeichnis zum Wurzelverzeichnis der Installation. Durch diese Option wird das gesamte Installationssystem in das Verzeichnis verschoben. Normalerweise geschieht das nur bei der Erstinstallation eines Systems.
-dbpath Verzeichnis
veranlaßt die Benutzung der RPM-Datenbank aus dem angegebenen Verzeichnis. Normalerweise befindet sich die Datenbank in /var/lib/rpm.
-percent
veranlaßt die Ausgabe einer prozentualen Fortschrittsanzeige zur Auswertung durch ein anderes Programm während der laufenden Installation.

Upgrade existierender Software

  Das Upgrade eines bereits installierten Softwarepakets auf eine neuere Version entspricht einer Kombination aus Installation der neuen und Löschung der alten Dateien. Die Herausforderung an rpm bei der Automatisierung dieses Vorgangs besteht in der Bewahrung eventuell vorhandener Konfigurationsdateien mit systemspezifischen Einstellungen.

rpm löst das Problem, indem es die existierenden Konfigurationsdateien sichert, wann immer das nötig ist. Damit das Programm die Sicherung durchführen kann, müssen zunächst die Konfigurationsdateien als solche gekennzeichnet sein. Diese Kennzeichnung ist Bestandteil der RPM-Datei. Es ist also in der Verantwortung der Distributoren oder der Entwickler, die Konfigurationsdateien als solche zu markieren.

Beim Upgrade werden existierende Konfigurationsdateien gesichert und durch die Endung .rpmsave erweitert. Wenn die originale Konfigurationsdatei der alten Softwareversion mit der zu installierenden Konfigurationsdatei der neuen Softwareversion identisch ist, wird die existierende Konfigurationsdatei übernommen, wenn sie sich von der originalen unterscheidet.

rpm verfügt nicht über die Möglichkeit, inhaltliche Übereinstimmung festzustellen oder gar Konfigurationsdateien zu konvertieren. Zur Überprüfung der Identitäten benutzt das Programm sogenannte MD5 Prüfsummen. Diese Prüfsummen werden über die vollständigen Dateien erzeugt und von rpm bei der Installation eines Pakets in seiner Datenbank gespeichert. Das Prüfsummenverfahren ist ein sehr zuverlässiger Weg zur Unterscheidung unterschiedlicher Versionen einer Datei. Durch die in der Datenbank gespeicherte Prüfsumme der originalen Datei kann rpm jederzeit Veränderungen an den installierten Daten feststellen.


Der Upgrade-Modus muß durch die Option -U (bzw. das äquivalente -upgrade) eingeleitet werden. Alle für den Installationsmodus beschriebenen Optionen können auch für den Upgrade-Modus verwendet werden.

Zusätzlich versteht rpm im Upgrade-Modus eine weitere Option:

-oldpackage
erlaubt das ``Downgrade'' zu einer älteren Version eines installierten Softwarepakets. Normalerweise erkennt das Programm den Versuch eines solchen ``Rückschritts'' als Fehler. Diese Option ermöglicht es, nach dem Test der leider fehlerhaften aktuellsten Version einer Software wieder zum funktionierenden Ausgangszustand zurückzukehren.

Suche nach Informationen über ein Softwarepaket

  Beim Softwaremanagement geht es nicht nur darum, neue Programme zu installieren und zu aktualisieren. Viele Programme müssen konfiguriert werden, in jedem Fall muß die Dokumentation gelesen werden, eventuell müssen Fehler und Integrationsprobleme gelöst werden. rpm unterstützt Systemverwalterin und Benutzer, indem es einen einfachen Zugang zu den in seiner Datenbank gespeicherten Informationen anbietet.

Im Query-Modus kann rpm beispielsweise herausfinden, zu welchem Paket eine bestimmte Datei gehört, wo und unter welchem Namen die Konfigurationsdateien oder die Dokumentation installiert wurden und welche ``Services'' von einem Paket benutzt oder bereitgestellt werden.


Damit rpm im Query-Modus arbeitet, muß als erste Option -q (oder als Alternative -query) angegeben werden. Welche Information aus welchen Paketen gesucht wird, kann durch weitere Optionen festgelegt werden.


In der Regel werden die im Query-Modus ermittelten Informationen nicht über alle installierten Pakete gleichzeitig benögigt. rpm ermöglicht deshalb die Auswahl der zu untersuchenden Pakete nach verschiedenen Kriterien.

Die einfachste Methode zur Spezifikation eines zu untersuchenden Pakets ist natürlich die Übergabe des Paketnamens als Argument auf der Kommandozeile. Hierbei ist allerdings darauf zu achten, daß die Paketnamen exakt und vollständig angegeben werden müssen. Wildcards sind ebensowenig erlaubt wie die Ignorierung von Groß- und Kleinschreibung. Zusätzlich zu dem eigentlichen Paketnamen kann noch die Versionsnummer und die Releasenummer des Pakets in der exakten Form mitgegeben werden.

Der exakte Paketname, von dem nur ein ungenauer Teil bekannt ist, kann mit Hilfe von grep aus der Liste aller installierten Pakete herausgefiltert werden:

$ rpm -q -a | grep file
fileutils-3.12-3
file-3.19-2
$ _

Weitere Möglichkeiten zur Auswahl bestimmter Pakete werden durch folgende Optionen gegeben:

-a
führt das Query-Kommando für alle in der Datenbank eingetragenen Softwarepakete durch.
-p RPM-Datei
untersucht die angegebene RPM-Datei, nicht die Datenbank des bereits installierten Systems. Mit dieser Option kann der Inhalt eines unbekannten RPM-Pakets untersucht werden, bevor die darin enthaltene Software installiert wird.
-f Datei
ermittelt anhand der Datenbank, zu welchem Paket die angegebene Datei gehört und gibt die Information zu diesem Paket aus.
-whatprovides Service
ermittelt anhand der Datenbank, welches Softwarepaket den angegebenen Service (beispielsweise eine Shared Library) anbietet und gibt die Information zu diesem Paket aus.
-whatrequires Service
ermittelt anhand der Datebank, welche Softwarepakete den angegebenen Service verwenden und gibt Informationen zu diesen Paketen aus.
-g Gruppe
ermittelt anhand der Datenbank alle zur angegebenen Gruppe gehörenden Softwarepakete und führt das Query-Kommando mit diesen Paketen aus. Die Gruppierung der einzelnen Pakete liegt ebenso wie die Bezeichnung der Gruppen im Ermessen des Distributors. Eine Liste mit allen verwendeten Programmgruppen wird durch das folgende Kommando ausgegeben: rpm -q --qf '%{group}\n' -a | sort | uniq


Ohne spezielle Auswahl zeigt rpm nur den Paketnamen (das ``Label'') an. Optional können folgende Informationen über die von rpm verwalteten Softwarepakete gewonnen werden:

-i
gibt die ``Karteikarte'' zu einem Paket aus. Unter anderem sind darauf die Herkunft (Distribution), die Versionsnummer, das Installationsdatum und eine verbale Beschreibung des Inhalts verzeichnet.

Das Ausgabeformat und der Inhalt der Anzeige kann mit der Option -queryformat im Detail eingestellt werden.

-l
zeigt ein Listing aller zu einem Paket gehörenden Dateien. Durch Zusatz der Option -v entsteht ein ausführliches Listing im Format von 'ls -l'.
-c
gibt eine Liste aller zu dem Paket gehörenden Konfigurationsdateien aus. Wenn die Software keine Konfigurationsdatei benutzt, wird kein Dateiname ausgegeben.
-d
zeigt eine Liste aller zu einem Paket gehörenden Dokumentationsdateien an.
-s
zeigt die in der Datenbank gespeicherten Statusinformationen der zu einem Paket gehörenden Dateien an. Es findet keine Überprüfung im Dateisystem statt, die angezeigten Werte stammen allein aus den Datenbankeinträgen, die bei der Installation des Softwarepakets angelegt worden sind. Der Status kann folgende Werte annehmen:
normal
Die Datei wurde nicht durch die Installation eines anderen Pakets verändert.
replaced
Die Datei wurde bei der Installation eines anderen Pakets ersetzt.
not installed
Die Datei wurde nicht installiert. Dieser Fall tritt beispielsweise auf, wenn durch die Option -excludedocs ein Teil der zu einem Paket gehörenden Dateien ausgeschlossen wurde.
net shared
Die Datei befindet sich in einem verteilt genutzten Netzwerkverzeichnis. Die Pfade solcher per NFS gemounteten oder exportierten Verzeichnisse müssen vor der Installation in der Initialisierungsdatei /etc/rpmrc in dem Eintrag netsharedpath angegeben sein, damit der Status entsprechend in der Datenbank festgehalten wird.
-queryformat FormatString
gibt eine ``Karteikarte'' für jedes untersuchte Paket in dem durch den FormatString festgelegten, benutzerspezifischen Format aus. Diese Option kann auch durch -qf abgekürzt werden.

Der Formatstring wird ähnlich aufgebaut wie der bei der C-Funktion printf typischerweise verwendete. In einen Text können Tags eingebettet werden, die bei der Anzeige durch entspechend formatierte Paketinformationen ersetzt werden. Ein Tag hat die Form %{TAGNAME}. Eine Liste aller möglichen Tagnamen wird durch die Option -querytags ausgegeben.

Zwischen dem Prozentzeichen und dem Tagnamen kann zur Ausrichtung einer Tabelle noch die Feldlänge angegeben werden. Soll eine Liste gleichartiger Einträge ausgegeben werden (beispielsweise eine Dateiliste), so muß der zu wiederholende Teil des FormatStrings in eckige Klammern eingeschlossen werden. Soll ein gleichbleibender Tag in mehreren Ausgabezeilen erscheinen, muß der Tagname durch ein Gleichheitszeichen gekennzeichnet werden. Das folgende Beispiel zeigt einen Formatstring zur Ausgabe des Paketnamens vor jeder Datei einer Liste:

$ rpm -q --qf '[%{=name}: %-40{filenames} (%{filesizes} bytes)\n]' ical
ical: /usr/bin/ical                            (10 bytes)
ical: /usr/bin/ical-2.0p2                      (778268 bytes)
ical: /usr/doc/ical-2.0p2-5                    (1024 bytes)
ical: /usr/doc/ical-2.0p2-5/ical.doc           (54451 bytes)
....
$ _
Die Option -queryformat gibt eine vollständige Dateiliste aus, wie -l. Die Einschränkung der Liste, beispielsweise auf die Konfigurationsdateien, ist nicht möglich.
-querytags
gibt eine Liste mit allen vom rpm Queryformat unterstützten Tags aus.
-provides
veranlaßt die Anzeige aller von einem Paket bereitgestellten Services. Diese Services können von anderen Paketen genutzt werden.
-requires
veranlaßt die Anzeige aller von einem Paket genutzten Services. Alle angeforderten Services müssen von bereits installierten Paketen angeboten werden, damit das Softwarepaket voll funktionsfähig ist.
-scripts
gibt alle zu einem Paket gehörenden Scriptdaten aus. Das RPM-System benutzt an fünf verschiedenen Stellen paketspezifische Shellscripts:
preinstall
wird vor der Installation des Pakets ausgeführt
postinstall
wird im Anschluß an die erfolgreiche Installation der Software ausgeführt
preuninstall
wird vor dem Entfernen eines Softwarepakets ausgeführt
postuninstall
wird nach der Löschung eines Softwarepakets ausgeführt
verify
wird zur Überprüfung einer fehlerfreien Installation im Verify-Modus ausgeführt.
-dump
gibt in Verbindung mit -l, -d oder -c alle zu einer Datei in der Datenbank enthaltenen Informationen aus. Das Format ist eher für die Interpretation durch andere Programme als für den menschlichen Leser gedacht. Über die bei einem ausführlichen Listing gelieferten Daten hinaus wird bei -dump auch die MD5 Prüfsumme der Datei angezeigt.

Löschen einer installierten Software

  Beim Löschen eines installiertes Softwarepakets ``von Hand'' können zwei Probleme auftreten:
1.
Es ist nicht ohne weiteres feststellbar, welche Dateien zu dem zu löschenden Paket gehören und welche mit anderen Paketen installiert oder gar während des Betriebs erzeugt wurden. Deshalb bleiben entweder zum Paket gehörende Dateien ohne weitere Funktion zurück oder es werden versehentlich Dateien anderer Softwarepakete gelöscht.
2.
Eventuell werden bestimmte Teile des zu löschenden Pakets von anderen Softwarepaketen verwendet, die nach dem Löschen dann nicht mehr funktionieren. Diese Abhängigkeiten sind ebenfalls nicht ohne weiteres feststellbar.

Beide Probleme lassen sich zuverlässig lösen, indem ganze Softwarepakete mit rpm gelöscht werden. rpm behält alle Informationen über ein mit dem Programm installiertes Softwarepaket in seiner Datenbank und kann so leicht alle zu dem Paket gehörenden Dateien identifizieren. Zusätzlich sind in der Datenbank die Abhängigkeiten der Pakete untereinander verzeichnet. Mit diesen Informationen verhindert rpm automatisch, daß Pakete gelöscht werden, die noch von anderen Paketen gebraucht werden.

rpm sichert zusätzlich die Konfigurationsdateien, sofern diese nicht mit den ursprünglich installierten Defaultdateien übereinstimmen.

Durch spezielle Shellscripts, die von den Herstellern in ein RPM-Paket eingebaut werden können, lassen sich zusätzliche Kommandofolgen zur Vorbereitung und zum Abschluß einer Löschung automatisch ausführen.


Der Erase-Modus muß durch die Option -e oder in ausgeschriebener Form -erase eingeleitet werden. Durch Angabe der zusätzlichen Option -v v wird ein ausführliches Protokoll des Löschvorgangs ausgegeben. Außerdem stehen folgende Optionen im Erase-Modus zur Verfügung:

-test
führt lediglich den Abhängigkeitstest durch, ohne das Paket tatsächlich zu löschen. Eine detaillierte Protokollierung aller für die Löschung vorgesehenen Schritte wird durch die zusätzliche Angabe der Doppeloption -v v ausgegeben.

Bei einem Testlauf werden auch die an der Löschung beteiligten Scriptdateien getestet, das bedeutet, sie werden ausgeführt! Die Ausführung kann verhindert werden, indem -test zusammen mit -noscripts aufgerufen wird. Der Inhalt der uninstall-Scripts kann im Query-Modus durch die Option -scripts angezeigt werden.

-noscripts
unterdrückt die Ausführung der uninstall-Scripts.
-nodeps
erzwingt das Löschen eines Softwarepakets auch dann, wenn die von dem Paket bereitgestellten Services von anderen Programmen verwendet werden. Nach einer solchen erzwungenen Löschung muß damit gerechnet werden, daß die davon abhängigen Softwarepakete nicht mehr einwandfrei funktionieren.

Verifizieren der Integrität einer Softwareinstallation

  Gelegentlich taucht die Frage nach der Integrität eines Softwarepakets auf. Das kann bei der Suche nach der Ursache für einen plötzlich auftretenden Fehler sein, oder es geschieht, nachdem eine Person unberechtigten Zugang zum Rechner hatte.

rpm kann mit Hilfe seiner Datenbank auch hier sehr gute Dienste leisten. Im Verify-Modus prüft rpm alle zu einem Paket gehörenden Dateien im Dateisystem und vergleicht die Daten mit den in der Datenbank gespeicherten. Alle Abweichungen werden als Fehlermeldungen angezeigt. Außerdem wird geprüft, ob alle Services, von denen das Paket abhängig ist, durch andere Pakete bereitgestellt werden.

Wenn rpm im Verify-Modus einen Fehler erkennt, gibt es den Namen der veränderten Datei zusammen mit einer Reihe von 8 oder 9 Zeichen aus. Die 8 Zeichen repräsentieren die 8 Tests, die im Verify-Modus durchgeführt werden. Das neunte Zeichen kennzeichnet Konfigurationsdateien.

Die einzelnen Zeichen und die damit verbundenen Tests sind folgende:

S
(Size) erscheint, wenn die Größe der Datei im Dateisystem von dem in der Datenbank gespeicherten Wert abweicht.
M
(Mode) erscheint, wenn die Zugriffsrechte der Datei im Dateisystem anders gesetzt sind, als das in der Datenbank verzeichnet ist.
5
(md5) erscheint, wenn die MD5-Prüfsumme für die Datei im Dateisystem nicht mit der in der Datenbank gespeicherten übereinstimmt.
D
(Device) erscheint bei Gerätedateien, wenn die Gerätenummern der Datei im Dateisystem nicht mit den in der Datenbank gespeicherten Werten übereinstimmt.
L
(Link) erscheint bei einem symbolischen Link, wenn der darin verzeichnete Dateiname nicht mit dem in der Datenbank gespeicherten übereinstimmt.
U
(User) erscheint, wenn der Eigentümer einer Datei im Dateisystem nicht mit dem in der Datenbank verzeichneten Eigentümer übereinstimmt.
G
(Group) erscheint, wenn die Gruppenzugehörigkeit einer Datei nicht mit der in der Datenbank verzeichneten Gruppe übereinstimmt.
T
(Time) erscheint, wenn die Zeit der letzten Änderung einer Datei im Dateisystem nicht mit der in der Datenbank verzeichneten Zeit übereinstimmt.

Die Zeichen erscheinen, wenn der entsprechende Test nicht bestanden wurde. Für jeden bestandenen Test erscheint ein einzelner Punkt.

Durch den zusätzlichen Buchstaben c werden Konfigurationsdateien gekennzeichnet.


Der Verify-Modus von rpm muß durch die Option -V oder durch die gleichwertigen Optionen -y oder -verify eingeleitet werden. Als Argument kann der Paketname auf der Kommandozeile übergeben werden. Wie beim Query-Modus beschrieben, muß dieser Name vollständig und exakt angegeben werden.

Durch die Angabe der Doppeloption -v v auf der Kommandozeile erscheinen während der Ausführung zusätzliche Informationen über den Programmablauf. Außerdem stehen folgende Kommandozeilenoptionen zur Verfügung:

-p RPM-Datei
führt die Prüfung der Dateien im Dateisystem nicht gegen die in der Datenbank gespeicherten Informationen durch, sondern gegen die in der angegebenen RPM-Datei enthaltenen.
-f Datei
veranlaßt die Prüfung des gesamten Pakets, zu dem die angegebene Datei gehört.
-a
veranlaßt die Prüfung sämtlicher in der Datenbank verzeichneten Softwarepakete.
-g Programmgruppe
veranlaßt die Prüfung aller Pakete aus der angegebenen Programmgruppe.
-noscripts
unterdrückt die Ausführung des mit dem RPM-Paket ausgelieferten Verifikations-Scripts.
-nodeps
unterdrückt die Prüfung auf nicht aufgelöste Abhängigkeiten zu anderen Paketen.
-nomd5
unterdrückt den Test auf unterschiedliche MD5-Prüfsummen.
-nofiles
unterdrückt die Durchführung aller dateispezifischen Tests. Lediglich das Verify-Script und der Abhängigkeitstest werden ausgeführt.

Weil sehr viel Linux-Software über das Internet verteilt wird, besteht Bedarf an einer weiteren Art der Software-Überprüfung, nämlich der Verifizierung des RPM-Pakets selbst. Es gibt zwar praktisch keine Viren unter Linux; Trojanische Pferde oder einfache ``Paketbomben'' können aber leicht in RPM-Dateien versteckt und über das Internet verbreitet werden. Um solchen Mißbrauch zuverlässig zu verhindern, kann die Integrität der RPM-Datei mit Hilfe einer PGP-Signatur zweifelsfrei festgestellt werden.

PGP (Pretty Good Privacy) ist ein sehr leistungsfähiges Programm zum Verschlüsseln von Daten und zum Signieren von Dateien. Es arbeitet mit einem kryptografisch starken Public Key Verfahren. Einige Hersteller von Linux-Distributionen und viele Entwickler signieren ihre Produkte mit einem nur ihnen bekannten geheimen Schlüssel. Der dazu passende öffentliche Schlüssel wird auf verschiedenen Wegen verbreitet, beispielsweise auf den WEB-Servern der Anbieter oder über öffentliche Key-Server.

Um die PGP-Signatur eines Pakets prüfen zu können, muß die PGP-Software installiert sein und der Public Key des Paketherstellers am PGP-Schlüsselring hängen.

-checksig RPM-Datei
führt die Signaturprüfung für die angegebene RPM-Datei durch.

Nach der erfolgreichen Durchführung der Prüfung wird eine Zeile mit dem Paktenamen und den Wörtern ``size pgp md5 OK'' ausgegeben. Wenn das Paket keine PGP-Signatur hat, erscheint nur ``size md5 OK''. Ein defektes oder manipuliertes Paket wird durch die Ausgabe ``size PGP MD5 NOT OK'' gekennzeichnet.

Reparieren einer fehlerhaften Installation

   Die Feststellung eines Fehlers duch rpm im Verify-Modus ist nur der erste Schritt zur Lösung des Problems. Wenn das Fehlen von Dateien oder eine nicht beabsichtigte Veränderung von Daten oder Programmen festgestellt wurde, bleibt eigentlich nur das Überschreiben der betroffenen Softwarepakete. rpm ermöglicht das mit der Option -replacepkgs im Installationsmodus.

Manchmal ist es jedoch gar nicht nötig, die Daten zu überschreiben. Viele Probleme mit einer Software rühren von falschen Eigentums- und Zugriffsrechten her. Die korrekten Voreinstellungen für diese Dateiattribute sind in der Datenbank von rpm verzeichnet und können deshalb jederzeit in ihren ursprünglichen Zustand zurückgesetzt werden:

-setperms
setzt die Zugriffsrechte für alle Dateien des spezifizierten Pakets auf die in der Datenbank gespeicherten Werte.
-setugids
setzt Eigentümer und Gruppe aller spezifizierten Pakete auf die in der Datenbank gespeicherten Werte.

Für beide Optionen können die zu bearbeitenden Softwarepakete auf die beim Query-Modus beschriebene Weise angegeben werden.


Sollte es aus irgend einem Grund zu einem Fehler in der Datenbank von rpm selbst kommen, ist die korrekte Verwaltung der Softwarepakete im System nicht mehr möglich. Bevor diese Software selbst neu installiert wird und damit die Datenbank mit allen Informationen über das bestehende System verloren geht, kann mit der Option -rebuilddb eine Rekonstruktion der Datenbank aus eventuell noch vorhandenen Resten versucht werden.

Eine vollständig zerstörte Datenbank kann aus dem laufenden System nicht mehr zurückgewonnen werden. Mit der Option -initdb kann eine neue, leere Datenbank erzeugt werden, nachdem die eventuell noch vorhandenen Reste einer nicht mehr brauchbaren Datenbank gelöscht wurden.

Erzeugen neuer RPM-Pakete

  Die Funktionalität von rpm wird abgerundet durch den Build-Modus, in dem neue RPM-Pakete erzeugt werden. Die Herstellung von RPM-Paketen ist nur auf den ersten Blick allein Aufgabe der Linux-Distributoren. Wegen der vielen Vorteile, die das Softwaremanagement mit rpm bietet, ist es durchaus auch für eine Systemverwalterin interessant, lokal aus Sourcecode erzeugte Software mit rpm zu installieren.

rpm erledigt wesentliche Teile der Herstellungsarbeit automatisch, so daß der Aufwand für die Umwandlung eines TAR-Pakets in eine RPM-Datei überschaubar bleibt. In der Hauptsache besteht die manuelle Arbeit darin, das sogenannte Spec-File zu erzeugen. Ähnlich dem Makefile steuert diese Datei die Aktionen von rpm.

Die Herstellung eines RPM-Pakets geschieht in mehreren Phasen:

prep
Die Vorbereitung kann beispielsweise im Auspacken der Sourcen, dem Anwenden eines Patches auf diese Sourcen und dem Ausführen von configure bestehen.
build
Der Aufbau besteht in vielen Fällen einfach aus der Ausführung von make im Source-Verzeichnis.
install
Die Erstinstallation wird ebenfalls meistens von make erledigt
binary
Die neu installierten Dateien werden der Packliste entsprechend in einer RPM-Datei zusammengefaßt.
archive
Schließlich werden die Sourcen zusammen mit dem Spec-File, den Patches und allen eventuell sonst noch für die Herstellung nötigen Dateien in ein Source-RPM gepackt.

Zur Unterstützung bei der Erstellung der Packliste kann rpm im Build-Modus prüfen, ob alle Dateien der Liste vorhanden sind und zusätzlich bestimmte Services und Abhängigkeiten feststellen.

Der Build-Modus muß durch die Option -b eingeleitet werden. Direkt an diesen Optionsschalter angehängt wird ein zweiter Buchstabe, mit dem festgelegt wird, welche Herstellungsphasen durchlaufen werden sollen:

p
nur die Vorbereitungsphase
c
die Vorbereitung und der Aufbau
i
Vorbereitung, Aufbau und Erstinstallation
b
wie i, nach der Erstinstallation wird das binäre RPM-Paket gepackt
a
wie b, zusätzlich wird noch das Source-RPM erzeugt
l
Überprüfung der Packliste

Zusätzlich stehen im Build-Modus folgende Optionen zur Verfügung:

-short-circuit
veranlaßt bei den Modi -bc und -bi nur die Ausführung der jeweils letzten Phase. Auf diese Weise kann ein wegen eines Fehlers unterbrochener Herstellungsvorgang wieder aufgenommen werden.
-test
sichert die von rpm erzeugten Shellscripts in /var/tmp. Diese Dateien enthalten alle während des Herstellungsvorgangs ausgeführten Kommandos.
-clean
veranlaßt das Löschen des für die Herstellung angelegten Verzeichnisbaums nach Abschluß des Build-Prozesses.
-sign
fügt eine PGP-Signatur zum RPM-Paket hinzu.
-buildroot Verzeichnis
veranlaßt die Erstinstallation der aufgebauten Software in dem angegebenen Verzeichnis. Die Build-Scripts müssen speziell für diese Option vorbereitet sein, damit der Herstellungsprozeß korrekt ablaufen kann.
-timecheck Sekunden
verhindert das Einpacken von älteren Dateien in das binäre RPM-Paket. Durch diese Option kann sichergestellt werden, daß nur die im Herstellungsprozeß neu erzeugten Dateien in das Binärpaket aufgenommen werden.

Siehe auch:

glint(8), rpm2cpio, dpkg(8) und dselect(8)  
next up previous contents index
Next: shutdown Up: Die Kommandos für root Previous: rmmod

Das Linux Anwenderhandbuch
(C) 1997 LunetIX