HOWTO zu RPM (Redhat Package Manager) (C) 2008 T.Birnthaler/H.Gottschalk OSTC GmbH, http://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. ________________________________________________________________________________ Inhaltsverzeichnis 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 ________________________________________________________________________________ 1) Einführung ------------- 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 2) RPM-Haupt-Optionen --------------------- +---------------+------------------------------------------------------------+ | -? --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 | +---------------+------------------------------------------------------------+ 3) Zusätzliche Angaben zu Optionen "--install/freshen/upgrade/erase" -------------------------------------------------------------------- +-------------------+-------------------------------------------------------+ | -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) | +-------------------+-------------------------------------------------------+ 4) Zusätzliche Angaben zu Optionen "--verify/query" --------------------------------------------------- +------------------+------------------------------------------------------+ | -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 | +------------------+------------------------------------------------------+ 5) Änderungsstati/Dateihinweise der Option "--verify" ----------------------------------------------------- +---+--------------+-------------------------------------------------------+ | 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". 6) Aufruf-Beispiele -------------------- * 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 7) Hinweise ----------- * 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) ftp://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"). 8) UNIX Standard Software-Installationsmethode ---------------------------------------------- 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) 9) Standard-UNIX-Programm-Pfade für Anwenderprogramme ----------------------------------------------------- +--------------+---------------------------------------------+ | /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 | +--------------+---------------------------------------------+