HOWTO zu RPM (Redhat Package Manager)
(C) 2008 T.Birnthaler/H.Gottschalk <howtos(at)ostc.de>
OSTC GmbH, www.ostc.de
$Id: unix-rpm-HOWTO.txt,v 1.10 2010-05-26 13:56:46 tsbirn Exp $
Dieses Dokument beschreibt die Installation und Verwaltung von
RPM-Software-Paketen.
1) Einführung
2) RPM-Haupt-Optionen
3) Zusätzliche Angaben zu Optionen "--install/freshen/upgrade/erase"
4) Zusätzliche Angaben zu Optionen "--verify/query"
5) Änderungsstati/Dateihinweise der Option "--verify"
6) Aufruf-Beispiele
7) Hinweise
8) UNIX Standard Software-Installationsmethode
9) Standard-UNIX-Programm-Pfade für Anwenderprogramme
RPM ist ein Paketmanager, mit dem unter Linux Softwarepakte verwaltet werden.
Er pflegt dazu eine RPM-Datenbank "/var/lib/rpm/*" der installierten
Softwarepakete. Die Aufgaben eines Paketmanagers sind:
* Überprüfen ob Platz für Installation ausreicht
* Anwendung aus Quellen erzeugen
* Anwendung installieren
* Anwendung konfigurieren
* Anwendung updaten (ohne alte Konfiguration/Anpassungen zu zerstören)
* Auf Konflikte mit anderer Software prüfen
* Voraussetzungen und Abhängigkeiten überprüfen
* Korrekte Besitzverhältnisse, Zugriffsrechte, Datum und Inhalt überprüfen
* Anwendung deinstallieren
RPM arbeitet bei der Installation eines Pakets in mehreren Phasen:
+---+--------------------------------------------------------------+
| 1 | Preinstall-Skript ausführen (optional) |
| 2 | Archiv auspacken und Dateien ins Dateisystem kopieren (muss) |
| 3 | Postinstall-Skript ausführen (optional) |
| 4 | Deinstall-Skript ausführen (optional) |
+---+--------------------------------------------------------------+
Mögliche Fehler beim Installieren eines RPM-Pakets sind:
* Abhängigkeiten mit anderen Paketen sind nicht auflösbar
* Konflikte mit bereits installierten Paketen (gleichnamige Dateien)
* Fehler bei der Konfiguration eines Pakets
+---------------+------------------------------------------------------------+
| -? --help | Usage-Meldung ausgeben |
+---------------+------------------------------------------------------------+
| -i --install | Paket installieren |
| -U --upgrade | Paket aktualisieren (falls nicht inst. oder älteres inst.) |
| -F --freshen | Paket aktualisieren (NUR falls bereits älteres inst.) |
| -e --erase | Paket entfernen |
+---------------+------------------------------------------------------------+
| -V --verify | Integrität eines inst. Pakets überprüfen ("SM5DLUGT", s.u.)|
| -q --query | Installierte Pakete oder Informationen zu Paketen abfragen |
+---------------+------------------------------------------------------------+
| -K --checksig | RPM-DATEI original und unbeschädigt |
+---------------+------------------------------------------------------------+
+-------------------+-------------------------------------------------------+
| -h --hash | Fortschrittsanzeige einschalten (###...) |
| --ignoresize | Platzbedarf vor Install. nicht prüfen (Netzlaufwerk!) |
| --nodeps | Paketabhängigkeiten ignorieren [no dependencies] |
| --noscripts | Ausführung von Paket-Skripten unterdrücken |
| --percent | Prozentanzeige während Installation einschalten |
| --prefix=DIR | Pfad dem Inst.verz. voransetzen (falls relozierbar) |
| --relocate=OLD=NEW| Verz.pfad umsetzen (mehrfach angebbar) |
| --replacefiles | Dateikonflike zw. Paketen ignorieren |
| --test | Erfolg der Paketinst. prüfen (aber nicht durchführen) |
+-------------------+-------------------------------------------------------+
+------------------+------------------------------------------------------+
| -a --all | Alle installierten Pakete |
| -i --info | Information über Paket |
| -l --list | Dateiliste des Pakets, eingeschränkt durch: |
| -c --configfiles| Nur Konfigurationsdateien |
| -d --docfiles | Nur Dokumentationsdateien |
| -s --state | Nur Status ("normal", "not installed", "replaced") |
| -R --requires | Was ein Paket benötigt (Pakete oder Dateien) |
| --provides | Was ein Paket enthält (Pakete oder Dateien) |
| --scripts | Skripte |
+------------------+------------------------------------------------------+
| -p --package | Noch nicht installiertes Paket untersuchen |
| -f FILE ... | In welches Paket gehört die Datei FILE |
+------------------+------------------------------------------------------+
| --qf=FORMAT | Ausgaben in bestimmtem Format (queryformat) |
| --querytags | Mögliche Formatangaben für --qf auflisten |
+------------------+------------------------------------------------------+
+---+--------------+-------------------------------------------------------+
| S | Size | Dateigröße unterschiedlich |
| M | Mode | Dateityp oder -rechte unterschiedlich |
| 5 | MD5 | MD5-Checksumme unterschiedlich |
| D | Device | Gerätenummer(n) unterschiedlich (major/minor) |
| L | Link | Symbolischer Link passt nicht (Zielpfad) |
| U | User | Benutzer unterschiedlich |
| G | Group | Gruppe unterschiedlich |
| T | Time | Zeitpunkt der letzten Änderung unterschiedlich |
| P | Capabilities | Inhalt des Pakets (Name, Version, Bibliotheken, Files |
+---+--------------+-------------------------------------------------------+
* Wird in Form einer Flagleiste "SM5DLUGTP" zu jeder Datei angezeigt.
* "." statt Buchstabe: Test bestanden.
* "?" statt Buchstabe: Test nicht durchführbar (wg. Zugriffsrechten)
* Dateien, die alle Tests bestanden haben, werden nicht angezeigt.
* Fehlende Dateien haben "missing" als Wert
* Für Sicherheitschecks sehr sinnvoll!
Dateihinweise bei Option "--verify":
+---+---------+--------------------------+
| c | config | Konfigurationsdatei |
| d | doc | Dokumentationsdatei |
| g | ghost | Nicht im Paket enthalten |
| l | licence | Lizenzdatei |
| r | readme | Readmedatei |
| | (LEER) | Sonstige Datei |
+---+---------+--------------------------+
Formatangaben für -qf:
* Formatangaben benötigen Angabe von Header-Tag-Namen in %{...}.
* Eine Liste der Header-Tags erhält man mit "rpm --querytags".
* Alle installierten Pakete auflisten (-q=query, -a=all):
rpm -qa
* Ist PAKET installiert und in welcher Version:
rpm -q PAKET
rpm -qa | grep -i PAKET
* Dateiliste eines installierten PAKETs auflisten:
rpm -q --list PAKET
* Beschreibung eines installierten PAKETs ausgeben:
rpm -q --info PAKET
* Pre/Postinstallations-Skripte eines installierten PAKETs ausgeben:
rpm -q --scripts PAKET
* Zu welchem installierten RPM-Paket gehört DATEI (-f=file):
rpm -q -f /PFAD/ZU/DATEI
* Dateien eines RPM-PAKETs auf Änderungen seit Installation prüfen (-V=verify):
rpm -V PAKET
* Was ist in RPM-DATEI enthalten (-p=package):
rpm -q -p DATEI.rpm
* RPM-DATEI original und unbeschädigt (--checksig):
rpm -K DATEI.rpm
* RPM-DATEI installieren (falls noch nicht installiert, -i=install):
rpm -ivh DATEI.rpm
* RPM-DATEI inst. (nur falls ältere Version vorhanden, -F=freshen):
rpm -Fvh DATEI.rpm
* RPM-DATEI inst. (falls nicht inst. oder ältere Version vorhanden, -U=update):
rpm -Uvh DATEI.rpm
* RPM-Paket deinstallieren (falls nicht von anderem Paket benötigt, -e=erase):
rpm -e PAKET
* RPM-Paket deinstallieren (ohne Abhängigkeitsüberprüfung):
rpm -e --nodeps PAKET
* In allen Paketen auf einer Installations-CD nach einer bestimmte Datei suchen:
LIB="libgif"
for PAKET in /media/cdrom/RedHat/RPMS/*.rpm # RedHat
for PAKET in /media/cdrom/suse/{i586,i686,noarch,nosrc,src}/*.rpm # SuSE
do
rpm -qp --provides $PAKET | grep -iq $LIB && echo "$PAKET contains $LIB"
done
* Größe der Dateien in Paket "XFree86" ausgeben:
rpm -q --qf "[%{FILENAMES} %{FILESIZES} bytes\n]" XFree86
* Größe der Dateien in Paket "xf86" aufsummieren:
echo $((`rpm -q --qf "[%{FILESIZES+}]" xf86`0)) # ohne Overhead!
* Lizenzen der installierten RPM-Pakete ausgeben:
rpm -qa --qf "%-20{LICENSE}\n" | sort | uniq -c | sort -n
* Größtes installiertes RPM-Paket ausgeben (--qf=queryformat):
rpm -qa --qf "%-10{SIZE} %-30{NAME}\n" | sort -n | tail -1
* Der Name von RPM-Paketen sagt leider wenig über ihren konkreten Inhalt aus
(besonders problematisch bei "Provides"-Namen). Die verschiedenen
Distributionen sind hier auch nicht einheitlich strukturiert.
* Die verschiedenen Distributionen unterscheiden sich in ihrem "init"-Konzept,
d.h. es können zwar fast immer "Normale Anwendungen" aus einem RPM-Paket
einer anderen Distribution installiert werden, bei "Systemnahen Programmen"
müssen hingegen häufig erst Anpassungen gemacht werden.
* Für Installationen muss man als "root" angemeldet sein.
* Unter LINUX ist nach dem Installieren im allgemeinen kein Reboot notwendig
(evtl. mit "rc... reload/restart" Konfigurationsdatei neu lesen lassen").
* RPM sortiert mehrere zu installierende Pakete automatisch gemäß ihren
Abhängigkeiten.
* Viele Optionen gibt es in Kurzform (-X) und in POSIX-Notation (--XXXXXX).
* Bei "--update" werden veränderte Konfigurations-Dateien als "*.rpmsave"
gesichert (anschließend per "diff" vergleichen und Anpassungen übernehmen).
* Bei allen RPM-Aufrufen kann der Paketname auch als URL angegeben werden
(Standard: anonymous ftp, "ftp" kann durch "http" ersetzt werden)
USER:PASSWORD@HOST:PORT/PATH/TO/PACKAGE.rpm
Zugehörige Optionen:
--ftpproxy HOST
--ftpport PORT
* Der "Midnight Commander" ("mc") kann mit RPM-Archiven direkt umgehen
(Verzeichnisse INFO, BUILDTIME, BUILDHOST, PACKAGER, DESCRIPTION,
REQUIRENAME, PROVIDES, ...).
* Der Konqueror kann RPM-Pakete direkt installieren (Doppelklick oder
Rechte Maustaste + Installieren...).
* Alternative: Debian Package Manager (dbpackage, *.deb), Stampede, Slackware.
* Das Programm "alien" kann andere Paketformate von/nach RPM konvertieren.
* Es gibt einige grafische Frontends für RPM: "kpackage", "GnoRPM", "xrpm",
SuSE-Skripte (html)
* Der Paketname kann eine Architektur-Information enthalten
(".i386.rpm", ".noarch.rpm", ".src.rpm", ".spm").
Die schon sehr alte UNIX-Standard-Methode zur Installation von Anwendungen
besteht im Auspacken und Übersetzen eines sogenannten "tar-Ball" (komprimiertes
tar-Archiv). Die meist darin befindlichen Quellcode-Dateien werden anschließend
übersetzt und die erstellten Binärprogramme + Dokus + Konfigurationdateien dann
installiert. Meist muss anschließend noch eine Konfigurationsdatei angepasst
werden.
gunzip PAKET.gz # oder
bzunip2 PAKET.bz2 # oder
uncompress PAKET.Z
tar xzf PAKET.tar # oder
tar xzf PAKET.tgz # oder
tar xzf PAKET.tar.gz # oder
tar xZf PAKET.tar.Z # oder
tar xjf PAKET.tar.bz2
cd PAKET
more README # oder
more INSTALL # oder
more CONFIG # oder
more LIESMICH
makefile anpassen # oder
Makefile anpassen # oder
MAKEFILE anpassen
make config # oder
./configure # oder
./configure --prefix=/usr/local/FOO
make all # oder
make
make doc
make install # (als root) oder
./setup.sh # (als root)
make deinstall # (als root) oder
make uninstall # (als root)
+--------------+---------------------------------------------+
| /usr[/local] | Basisverzeichnisse (UNIX System Ressources) |
| .../bin | Ausführbare Programme |
| .../lib | Bibliotheken |
| .../share | Dokumentation |
| .../etc | Konfigurationsdateien |
| .../var/lib | Skripte |
| .../man | Manualseiten |
| .../doc/ | Dokumentation |
| .../X11R6 | X11-Anwendungen |
+--------------+---------------------------------------------+