RPM (Redhat Package Manager) ist der am weitesten verbreitete PaketManager - siehe auch [[apt/RPM]].

Homepage: http://www.rpm.org/

Lizenz: [[GPL]]

= FrontEnds =
== mit Auflösen von Abhängigkeiten ==
 * [[urpmi]] (bei jeder Installation von [[Mandriva]] Linux dabei, kann aber natürlich auch auf anderen RPM-Systemen installiert werden)
 * [[apt/RPM]]
 * [[yum]] (bzw. kyum, Gnome-yum und Yumex als GUI)
 * up2date von RedHat (Veraltet. Seit Fedora-Core 5 durch yum ersetz)
 * [[SuSE/YaST]] ist das von SUSE-Linux entwickelte FrontEnt nicht nur zur RPM-Paketverwaltung (yast ist meines Wissens nach nicht frei)
 * [[http://team.pld.org.pl/~mis/poldek/|poldek]]
 * [[http://smartpm.org|SMART]]

== simple GUIs für RPM ==
 * kpackage
 * gnorpm

== ähnliche Software-Projekte ==
 * http://thomas.apestaart.org/projects/mach/ to build rpm packages

= Tips & Tricks =
 * Suchmaschinen für RPM-Pakete:
  * http://rpm.pbone.net/
  * http://www.rpmseek.com/
  * http://rpmfind.net/
 OffeneFrage: Wäre es nicht eine gute Idee, eine Tauschbörsensoftware für RPMs zu haben statt der Webseiten wie rpmssek etc.?

ce, 20031102

 * [[http://www.rpm.org/RPM-HOWTO/|RPM HOWTO: RPM at Idle]]
 * [[http://www.tu-chemnitz.de/docs/lindocs/RPM/|Das RPM-Buch]] nicht mehr ganz aktuell, aber sehr ausführlich
 * [[http://www.rpm.org/max-rpm/|Maximum RPM]] englisches Buch, was sehr ausführlich den gesamten Aubau von RPM beschreibt

== Achtung bei "fremden" RPM-Paketen ==
/!\ Obwohl viele Distributionen das RPM-Format benutzen, heißt das NICHT, dass man z.B. problemlos ein RPM von RedHat auf einem [[SuSE]]-System installieren kann. Die Distributionen unterscheiden sich oft in kleinen Einzelheiten, die Dir aber das System ziemlich kaputtkriegen können, wenn Du hier das falsche Paket zwanghaft installierst. Besonders gilt das für irgendwelche Bibliotheken.

Bei der normalen Installation (ohne Zwang, d.h. kein {{{-nodeps}}} oder gar {{{--force}}}) kann normalerweise nichts schiefgehen, denn genau deswegen gibt es die PaketAbhängigkeiten.

Fazit: SuSE RPM Pakete nur auf einem SuSE System installieren, etc.

Pakete hängen von den Versionen der Bibliotheken ab, unter denen sie kompiliert wurden. Wenn man also Probleme bekommt, weil ein Paket neuere (evtl. auch bei älteren) Bibliotheken benötigt, kann es helfen, das Paket selbst zu kompilieren.

== Updaten mit einem (1) Kommando ==
Wenn man sein System komplett updaten will, sollte man sich eines der oben genannten Frontends bedienen. Falls man die Pakete schon heruntergeladen hat (oder z.B. auf CD erhalten) bietet sich der Einsatz von [[yum]] an, da das Erstellen von sog. Repositories damit besonders einfach ist.

Die manuelle Vorgehensweise wird im Folgenden beschrieben.

Wenn man sich die kompletten Updates / Security-Fixes seiner RPM-basierten Distribution runtergeladen hat, dann aber nur die für die bereits installierten Pakete einspielen will, kann man das folgende Kommando gut gebrauchen - vorher sollte man aber Kernel-RPMs in ein anderes Verzeichnis verschieben, siehe auch Hinweis weiter unter zu Kernel und glibc-Updates):

{{{rpm -Fvh *.rpm  # Auffrischen der Installation mit allen RPMs im aktuellen Verzeichnis}}}

Falls es Probleme gibt, kann man nach reiflicher Überlegung auch noch ggf. {{{--nodeps}}} und {{{--force}}} hinzufügen.

/!\ es ist manchmal wichtig, wirklich ALLE Updates mit {{{*.rpm}}} auf einen Schlag zu erfassen. Ansonsten kann es leicht passieren, dass Abhängigkeiten fehlschlagen oder das System nachher nicht richtig funktioniert, falls man dies per {{{--nodeps}}} ignorieren hat lassen. Vor allem bei Bibliotheken (libs) oder anderen grundlegenden Dingen kann das leicht passieren.

== Vorsicht bei glibc-Updates ==
Ein glibc-Update ist ein tiefgreifender Eingriff in ein Linux-System, denn fast alle Linux-Programme sind dynamisch gegen die glibc gelinkt. Dies hat zur Konsequenz, dass nach Einspielen einer nicht funktionierenden glibc praktisch '''nichts''' mehr funktioniert.

Daher folgende Ratschläge aus eigener praktischer Erfahrung:

 * nicht ohne zwingenden Grund ''brandneue'' glibc-Updates einspielen, lieber erst ein paar Tage warten
 * keine glibc-Updates unter Zeitdruck machen - falls ein solcher Update schiefläuft, können es leicht ein paar Stunden mehr werden
 * glibc-Updates am besten im Single-User-Mode (vorher {{{telinit S}}})

Falls es trotzdem schiefgeht (selten, kommt aber vor):

 * folgende Programme sind meist statisch gelinkt, tun also auch ohne glibc: rpm, ash / sash (manchmal gibt es auch Versionen mit der Endung {{{.static}}})
 * booten mit: {{{linux init=/bin/ash  # irgendeine statisch gelinkte Shell}}}
  * folgendes tut nicht, weil i.d.R. auch gegen glibc gelinkt:
  * der normale {{{init}}}
  * die normale {{{sh / bash}}}
  * viele externe Kommandos, also praktisch fast alle, die nicht in der ash / sash eingebaut sind
 * dann per rpm eine funktionierende glibc installieren (von CD/DVD, von Platte ...)

== Kernel-Updates ==
Kernel-Updates ''immer'' mit {{{rpm -ivh ...}}} einspielen, denn bei -U wird ja der alte Kernel entfernt - dies will man aber erst, nachdem man den neuen ausgiebig getestet hat!

Anpassen / kontrollieren der [[LILO]]/[[GRUB]]-Konfiguration nicht vergessen.

Bei Verwendung von lilo unbedingt auch den LILO-Map-Installer laufen lassen: {{{lilo -v}}} und auf Fehlermeldungen achten.

= Mini-Howto =
||||<style="text-align: center;">'''Installieren/Deinstallieren/Updaten''' ||
||Installation von RPMs ||{{{rpm -ivh paket.rpm}}} ||
||Installation von RPMs u. ignoriert dabei Datei-Konflikte, d. h. überschreibt Dateien ( z. B. Bibliotheken) die bereits durch andere Pakete installiert wurden (bitte mit Vorsicht anwenden). ||{{{rpm -ivh --replacefiles paket.rpm}}} ||
||Installation von RPMs trotz nicht erfüllter Abhängigkeiten (nicht zu empfehlen) ||{{{rpm -ivh --nodeps paket.rpm}}} ||
||Upgrade von Paketen (wenn das Paket noch nicht installiert ist, wird es neu installiert) ||{{{rpm -Uvh paket.rpm}}} ||
||Auffrischen von Paketen (nur bereits installierte Pakete updaten) ||{{{rpm -Fvh paket.rpm}}} ||
||Deinstallation von Paketen ||{{{rpm -e paket}}} ||
||Deinstallation von Paketen trotz bestehender Abhängigkeiten (nicht zu empfehlen) ||{{{rpm -e --nodeps paket}}} ||
||||<style="text-align: center;">'''Tipp:''' Ohne die Optionen ''-vh'' gibt RPM keinen Mucks von sich, solange kein Fehler auftritt. ||
||||<style="text-align: center;">'''Abfragen ''' ||
||Was ist alles installiert? ||{{{rpm -qa}}} (wenn man was bestimmtes sucht, einfach noch ein {{{| grep suchbegriff}}} dahinter) ||
||Zu welchem Paket gehört eine Datei? ||{{{rpm -qf <pfad/zur/datei>}}} ||
||Paketbeschreibung eines installierten Paketes anzeigen ||{{{rpm -qi paket}}} ||
||||<style="text-align: center;">'''Pakete überprüfen''' ||
||System auf Veränderungen gegenüber der RPM-Datenbank prüfen ||{{{rpm -Va}}} ||
||Signatur von RPM-Dateien prüfen ||{{{rpm --check-sig paket.rpm}}} ||


== RPMs aus src.rpms selber bauen ==
siehe /BuildAlsUser

== Fragen & Antworten ==
Wie kann ich ein RPM relativ zu einem Verzeichnis entpacken? Also ich will nicht mein "/" als Basisverzeichnis haben, sondern ein von mir definiertes! -- JanRoehrich <<DateTime(2002-09-22T00:52:21)>>

 * Mittels "--badreloc --relocate /=<dir>", das macht aber sehr selten Sinn (nie), da die meisten (alle) Pakete nicht verschiebbar sind. Die Verzeichnisse stehen dann so auch in der RPM-Datenbank.
 * Ich glaub er wollte eher wissen, wie man in nen chroot was installiert (z.B. für /nfsroot) - das geht m.W. auch, Optionen siehe [[RTFM]].
 * salbox@gmx.net Man kann rpm auch anweisen ein anderes Root-Verzeichnis als "/" zu verwenden:
  . rpm -hiv -r /<Verzeichnis> <Packet> Das bedeuted das unter /<Verzeichnis> eine neue rpm-db aufgebaut wird; Das Packet ist aber ausgepackt!
 * @ salbox

Und wie packe ich src.rpms aus? -- JanRoehrich <<DateTime(2002-09-22T01:47:21)>>rpm

 * {{{rpm -i}}} -- BastianBlank <<DateTime(2002-09-22T01:52:40)>>
 * das geht so auch als User, die Dateien landen dann in den in ~/.rpmmacros definierten Verzeichnissen

Wenn man die Pakete nicht installieren will, sondern wirklich nur entpacken, dann hilft rpm2cpio oder das Programm unp. In letzterem Falle reicht die Eingabe von `unp paketname.rpm`.

 * habe ich versucht, aber mit der Bedienung von cpio komme ich nicht klar! Was muss ich eingeben, damit ich einfach den Inhalt einer cpio-Datei in einen Verzeichnisbaum auspacken kann? -- JanRoehrich <<DateTime(2002-09-22T12:50:55)>>
  * {{{cd zielverzeichnis; cpio -i --no-absolute-filenames --make-directories </pfad/zu/cpiofile}}}

----
 . Ich hab' vor kurzem ein Problem gehabt, daß solchermassen auskommentierte Defines trotzdem ausgewertet wurden:

{{{
##%define foo bar
}}}
War auf SuSE 7.0 mit dem dortigen RPM (hab' grad kein System zur Hand zum Nachschauen der exakten Version). Könnte mal jeamand versuchen, das (ggf. mit aktuellerem RPM) nachzuvollziehen? -- JürgenHermann <<DateTime(2002-11-29T07:55:09)>>

 * angeblich ist das ein Feature, Macros werden auch in Kommentaren ausgewertet, zum Ausschalten ein zweites Prozentzeichen davorsetzen, also
 {{{
#%%define foo bar
}}}
  . -- RonnyBuchmann <<DateTime(2002-11-29T15:08:09)>>

----
 . Frage: Wie packt man rpm-Pakete manuell aus?
 * z.B. mit {{{rpm2cpio}}}:
 {{{
rpm2cpio PaketName.rpm | cpio -i --make-directories
}}}
 Ist aber nur eine von vermutlich 1000 Möglichkeiten. -- HenrykGerlach <<DateTime(2004-09-16T08:24:19Z)>>
  . Gibt es unter diesen 1000 Möglichkeiten eine die funktioniert? -- ThomasHochstetter <<DateTime(2006-11-28T01:53:13Z)>>