Rpm: Unterschied zwischen den Versionen
Dirkwagner verschob die Seite Rpm nach Kategorie:Rpm Markierung: Neue Weiterleitung |
K Textersetzung - „== Syntax ==“ durch „== Aufruf ==“ |
||
(13 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
# | {{DISPLAYTITLE:rpm}} | ||
'''rpm''' ist ein [[Paketverwaltung]]s-System für [[Linux]] | |||
== Beschreibung == | |||
[[Datei:RPM Logo.svg|180px|thumb| Logo von RPM Package Manager]] | |||
'''RPM Package Manager''' ist ein [[Freie Software|freies]] ([[GNU General Public License|GPL]]) [[Paketverwaltung]]s-System, ursprünglich entwickelt von dem Unternehmen [[Red Hat]]. | |||
* Es umfasst das Paketformat und alle nötigen Programme, um RPM-Pakete zu erstellen und zu [[Paketverwaltung|verwalten]]. | |||
Das RPM-Format ist Teil der [[Linux Standard Base]] | |||
; Bezeichnung | |||
Ursprünglich | |||
:'''R'''ed Hat '''P'''ackage '''M'''anager | |||
Aktuell | |||
:'''R'''PM '''P'''ackage '''M'''anager | |||
== Installation == | |||
== Anwendungen == | |||
=== Problembehebung === | |||
== Aufruf == | |||
=== Optionen === | |||
=== Parameter === | |||
=== Umgebung === | |||
=== Rückgabewert === | |||
== Konfiguration == | |||
=== Dateien === | |||
== Sicherheit == | |||
== Dokumentation == | |||
=== RFC === | |||
=== Man-Page === | |||
=== Info-Pages === | |||
== Siehe auch == | |||
# [[Paketverwaltung]] | |||
# [[dpkg]] und [[.deb]] – das System bei [[Debian]] | |||
# [[Ebuild]] und [[emerge]] – die Wahl bei [[Gentoo Linux]] | |||
# [[Arch Linux#Pacman|Pacman]] – Paketmanager von [[Arch Linux]] | |||
== Links == | |||
=== Projekt-Homepage === | |||
=== Weblinks === | |||
# [http://rpm.org/ Projektseite von rpm.org] (englisch) | |||
# [http://rpm5.org/ Projektseite von rpm5.org] (englisch) | |||
# [http://apt-rpm.org/ APT-RPM] (englisch) | |||
# {{dmoz|Computers/Data_Formats/Archive/RPM/|RPM}} | |||
# {{Webarchiv | url=http://www.xinux.de/docs/linux/rpm/ | wayback=20080225214130 | text=RPM E-Book}} von Thomas Schletter | |||
= Wikipedia = | |||
== Geschichte == | |||
Ursprünglich bedeutete RPM ''R''ed Hat ''P''ackage ''M''anagement. | |||
* Ende der Neunziger wurde der Name jedoch in ''R''PM ''P''ackage ''M''anagement geändert. | |||
** Der Hintergrund waren rechtliche Aspekte. | |||
* RPM wurde inzwischen von vielen Distributoren verwendet, und man strebte die Aufnahme von RPM in die [[Linux Standard Base]] an. | |||
* Der Unternehmensname (Firma) im Namen der Software hätte dies zumindest erschwert. | |||
[[Linux-Distribution]]en | |||
* [[OpenSUSE|SUSE]] | |||
* [[Mageia]] | |||
* [[Mandriva Linux]] | |||
[[Unix]]-Systeme | |||
* [[IBM]] [[AIX]] | |||
* [[Solaris (Betriebssystem)|Solaris]] | |||
Da die meisten Linux-Distributionen freie Software sind, besteht der Vorteil einer bestimmten Distribution gegenüber anderen zu einem großen Teil aus den Annehmlichkeiten des jeweiligen Paket-Managers (und aus den zusammengestellten, getesteten und regelmäßig aktualisierten (RPM-)Paketsammlungen des jeweiligen Distributors im Internet). | |||
Pakete zwischen Distributoren auszutauschen, war früher nahezu unmöglich. | |||
* Dies wurde mit RPM einfacher, ist aber immer noch mit Problemen behaftet, da die verschiedenen Distributionen, die RPM benutzen, oft verschiedene Versionen und/oder Konfigurationen von Systemsoftware wie etwa Grafik-Bibliotheken verwenden. | |||
Für den Entwickler vereinfacht ein Paketverwaltungssystem wie RPM das Einbauen von Software in die durch die Distribution vorgegebene Struktur (Pfade, Abhängigkeiten, Dateinamen, Paketnamen). | |||
* Das Paketformat selbst überprüft allerdings den jeweiligen Inhalt eines Pakets nicht automatisch. | |||
* Der Entwickler bestimmt den Aufbau des Paketes selbständig und muss sich damit für jede Distribution in die jeweiligen Besonderheiten einarbeiten. | |||
Mit Einführung der Linux Standard Base wurden viele Unstimmigkeiten zwischen den Distributoren ausgeräumt. | |||
* LSB erleichtert die Arbeit der Paketbauer erheblich, weil zumindest Dateinamen und Pfade vereinheitlicht sind. | |||
* Entsprechende Sorgfalt des Paketmaintainers vorausgesetzt, lässt sich relativ sicher ein RPM von einem anderen LSB-Distributor in ein beliebiges anderes LSB-System einspielen. | |||
== Aufbau == | |||
Die RPM-Dateien sind in der Regel mit [[gzip]] oder [[LZMA]]<ref name="XZ">{{Internetquelle | url=http://fedoraproject.org/wiki/Features/XZRpmPayloads | titel=XZ (LZMA) Payloads in RPM | autor=Poelstra | hrsg=[[Fedora-Projekt]] | datum=2009-08-19 | zugriff=2014-05-02 | sprache=englisch}}</ref> ([[xz]]) komprimierte [[cpio]]-Archive, die einzelnen Teile können jedoch einfach nach bestimmten Informationen durchsucht werden, denn ein [[Kopfdaten]]bereich im Binärformat ist an jedes Paket angefügt. | |||
* Diese Kopfdaten sind nicht komprimiert und enthalten alle wichtigen Informationen. | |||
* Das erleichtert das schnelle Durchsuchen von RPM-Paketen. | |||
Entpacken ohne Installation ist möglich: <code>rpm2cpio foo.rpm | cpio -idmv</code> | |||
== XML Package Metadata == | |||
In den RPM-Spezifikationen finden sich ebenfalls die Spezifikationen für Verzeichnisse mehrerer RPM-Pakete. | |||
* Die Pakete werden dabei in einem Verzeichnis gespeichert, das neben den Paketen noch Informationen über die Pakete selbst in Form von Metadaten-Dateien enthält. | |||
* Wenn ein geeignetes Programm dann Informationen über die im Verzeichnis enthaltene Software benötigt, reicht es, die Metadaten herunterzuladen. | |||
* In diesen Daten sind die vorhandenen Pakete, deren Versionen, Abhängigkeiten, Architektur etc. | |||
* enthalten. | |||
Programme, die XML-Package-Metadaten verwalten können, sind yum, Yast, Red Carpet, smartpm und apt-rpm. | |||
<!-- Gehört wohl er in Wikibook | |||
== Nutzung von RPM == | |||
=== Beispiele zur RPM-Benutzung === | |||
Die einfachste Möglichkeit der Anwendung ist die Installation eines Paketes. | |||
* Beispiel: | |||
rpm -i BEISPIEL-1.0-1.i386.rpm | |||
Empfehlenswerter ist allerdings, die Option -U sowohl zum Aktualisieren ("update") sowie zur erstmaligen Installation zu verwenden: | |||
rpm -U BEISPIEL | |||
Allerdings sollte man die Option -i (statt -U) bei Kernel-Paketen verwenden! (http://docs.fedoraproject.org/deployment-guide/f12/en-US/html-single/#s2-rpm-installing) | |||
Zur Deinstallation eines Paketes gibt man in der Konsole ein: | |||
rpm -e BEISPIEL | |||
Anzeigen aller im (bereits installierten) Paket enthaltenen Dateien: | |||
rpm -ql BEISPIEL | |||
Weiteres auf den [[Manpage]]s von rpm oder unter | |||
rpm --help | |||
Alle installierten Pakete (Liste mit Paketnamen) anzeigen | |||
rpm -qa | |||
Zuletzt installierte Pakete anzeigen | |||
rpm -qa -last | |||
Ermitteln, zu welchem Paket eine Datei gehört | |||
rpm -qf <DATEINAME> | |||
--> | |||
== RPM-Programme == | |||
* rpm – ein [[Linux]]-Programm, das direkt über die Konsole aufrufbar ist | |||
=== Konsolen-Frontends === | |||
* [[urpm]] von [[Mandriva]] – damit werden bei der Installation automatisch die Abhängigkeiten aufgelöst. | |||
* up2date von Red Hat | |||
* [[Yellowdog Updater, Modified]] (Yum) | |||
* [[YaST]] von [[SuSE]] – enthält ein Modul zur Verwaltung von RPMs | |||
* [[Smart Package Manager]] – dieses Werkzeug greift auf bestehende Werkzeuge (rpm, dpkg, … ) zurück und kann so auf vielen Distributionen eine einheitliche Oberfläche bieten | |||
* [[DNF (Dandified Yum)|DNF]] | |||
* rpm-ostree – Tool aus Red Hats Container-Betriebssystem Atomic Host | |||
=== GUI-Frontends === | |||
* KPackage ([[K Desktop Environment|KDE]]) | |||
* gnorpm ([[Gnome]]) | |||
* Yumex und KYum – zwei grafische Oberflächen für Yum (Gnome; KDE) | |||
* [[PackageKit]] – ein grafisches Programm, das sowohl auf der Basis von APT als auch auf Yum läuft. | |||
* anpm (ArcaNoaePackageManager) – Frontend für OS2 bzw. | |||
* eComStation.<ref>https://www.arcanoae.com/resources/downloadables/</ref> | |||
=== Maintaining Tools === | |||
* apt4rpm – eine Portierung von [[Advanced Packaging Tool|APT]] für das RPM-Format. | |||
* rpmlint | |||
* [[Alien (Programm)|alien]] – ein Programm, welches RPM-Pakete in [[Debian-Paket]]e für [[Debian]] (und auf dessen Paketverwaltung aufbauende Distributionen wie [[Ubuntu]]), und umgekehrt, konvertiert. | |||
=== Server / Repositories === | |||
* [[RHN]] | |||
* [[Spacewalk (Software)|Spacewalk]] – rpm repository channel tool | |||
* [[openSUSE Build Service]] | |||
* [[Pulp (Software)|Pulp]] – rpm repository channel tool wie Spacewalk | |||
== Betriebssysteme == | |||
=== Linux-Distributionen === | |||
* [[AlmaLinux]] | |||
* [[CentOS]] | |||
* [[Fedora (Linux-Distribution)|Fedora Project]] | |||
* [[Mageia]] | |||
* [[Mandriva Linux]] (nutzt einen Fork) | |||
* [[MeeGo]] | |||
* [[openSUSE]] | |||
* [[Oracle Linux]] | |||
* [[PCLinuxOS]] | |||
* [[Red Hat Enterprise Linux]] | |||
* [[Jolla#Sailfish OS|Sailfish OS]] | |||
* [[Scientific Linux]] | |||
* [[SUSE Linux Enterprise]] ([[SUSE Linux Enterprise Server]]) | |||
=== UNIX-Systeme === | |||
* [[AIX]] | |||
* [[Solaris (Betriebssystem)|Solaris]] | |||
=== Andere === | |||
* [[OS/2]] / [[eComStation]] / [[ArcaOS]] | |||
* [[Netware]] | |||
{{SORTIERUNG:rpm}} | |||
= TMP = | |||
=== Der Redhat Package Manager === | |||
RPM (RPM Package Manager) wird für die Verwaltung von Softwarepaketen verwendet. Seine Hauptbefehle lauten '''rpm''' und '''rpmbuild'''. In der leistungsstarken RPM-Datenbank können Benutzer, Systemadministratoren und Paketersteller ausführliche Informationen zur installierten Software abfragen. | |||
Im Wesentlichen hat '''rpm''' fünf Modi: Installieren, Deinstallieren oder Aktualisieren von Software-Paketen; Neuaufbauen der RPM-Datenbank, Abfragen der RPM-Basis oder individuellen RPM-Archiven, Integritätsprüfung der Pakete und Signieren von Paketen. '''rpmbuild''' ermöglicht das Aufbauen installierbarer Pakete von Pristine-Quellen. | |||
Installierbare RPM-Archive sind in einem speziellen binären Format gepackt. Diese Archive bestehen aus den zu installierenden Programmdateien und aus verschiedenen Metadaten, die bei der Installation von '''rpm''' benutzt werden, um das jeweilige Softwarepaket zu konfigurieren, oder die zu Dokumentationszwecken in der RPM-Datenbank gespeichert werden. RPM-Archive haben für gewöhnlich die Dateinamenserweiterung <tt>.rpm</tt>. | |||
{|| class="wikitable sortable" | |||
|- | |||
|| [[Image:Grafik16.png|top|alt="[Tip]"]] | |||
|| '''Pakete zur Software-Entwicklung''' | |||
|- | |||
| colspan="2" | Bei etlichen Paketen sind die zur Software-Entwicklung erforderlichen Komponenten (Bibliotheken, Header- und Include-Dateien usw.) in eigene Pakete ausgelagert. Diese Entwicklungspakete werden nur benötigt, wenn Sie Software selbst kompilieren möchten – beispielsweise die neuesten GNOME-Pakete. Solche Pakete sind am Namenszusatz <tt>-devel</tt> zu erkennen, z. B. die Pakete <tt>alsa-devel</tt>, <tt>gimp-devel</tt> und <tt>kdelibs3-devel</tt>. | |||
|- | |||
|} | |||
==== Graphische Frontends ==== | |||
Wer mit der Kommandozeile des rpm-Kommandos auf Kriegsfuß steht oder Probleme hat, sich die wichtigsten Optionen zu behalten, hat die Auswahl zwischen mehreren graphischen Frontends, die aber nicht alle Optionen von rpm abdecken. | |||
[[Image:Grafik6.png|right|alt="Bild:Rpm-frontends.png"]]# kpackage ist bei KDE dabei und unterstützt Drag & Drop, d. h. man kann ein heruntergeladenes Paket aus dem Datei-Manager heraus in kpackage hineinschieben und fallen lassen. Es versteht auch das Debian-Paketformat, das an der Endung .deb erkennbar ist. | |||
# GnoRPM ist für Freunde des Gnome-Desktops. | |||
# xrpm ist ein in Python geschriebenes Frontend, das einfach zu bedienen ist und alle wichtigen Funktionen enthält. | |||
# <div >mc -- der Midnight Commander ist zwar kein graphisches RPM-Frontend, kann aber RPM-Archive lesen und anzeigen </div> | |||
==== Prüfen der Authentizität ==== | |||
RPM-Pakete sind mit GnuPG signiert. Der Schlüssel mit dem "Fingerabdruck" lautet: | |||
<div >1024D/9C800ACA 2000-10-19 SuSE Package Signing Key <[mailto:build@suse.de build@suse.de]> | |||
Key fingerprint = 79C1 79B2 E1C8 20C1 890F 9994 A84E DAE8 9C80 0ACA</div> | |||
Mit dem Befehl '''rpm --checksig '''<tt>paket</tt>'''-1.2.3.rpm''' können Sie die Signatur eines RPM-Pakets überprüfen und feststellen, ob es wirklich von SUSE oder einer anderen vertrauenswürdigen Quelle stammt. Dies ist insbesondere bei Update-Paketen aus dem Internet zu empfehlen. Der öffentliche Paketsignierschlüssel von SUSE ist standardmäßig in <tt>/root/.gnupg/</tt> hinterlegt. Der Schlüssel befindet sich zusätzlich im Verzeichnis <tt>/usr/lib/rpm/gnupg/</tt>, damit auch normale Benutzer die Signatur von RPM-Paketen prüfen können. | |||
==== Pakete verwalten ==== | |||
In der Regel kann ein RPM-Archiv einfach installiert werden: '''rpm -i '''<tt>package</tt>'''.rpm'''. Mit diesem Befehl wird das Paket aber nur dann installiert, wenn seine Abhängigkeiten erfüllt sind und keine Konflikte mit anderen Paketen bestehen. '''rpm''' fordert per Fehlermeldung die Pakete an, die zum Erfüllen der Abhängigkeiten installiert werden müssen. Im Hintergrund stellt die RPM-Datenbank sicher, dass keine Konflikte entstehen: Jede spezifische Datei darf nur zu einem Paket gehören. Durch die Wahl anderer Optionen können Sie '''rpm''' zwingen, diese Standards zu ignorieren, jedoch ist dies nur für Spezialisten gedacht. Andernfalls wird damit die Integrität des Systems gefährdet und möglicherweise die Update-Fähigkeit aufs Spiel gesetzt. | |||
Die Optionen <tt>-U</tt> oder <tt>--upgrade</tt> und <tt>-F</tt> oder <tt>--freshen</tt> können für das Update eines Pakets benutzt werden, z. B. : '''rpm -F '''<tt>paket</tt>'''.rpm'''. Dieser Befehl entfernt die Dateien der alten Version und installiert sofort die neuen Dateien. Der Unterschied zwischen den beiden Versionen besteht darin, dass mit <tt>-U</tt> auch Pakete installiert werden, die vorher nicht im System vorhanden waren, wohingegen mit <tt>-F</tt> nur zuvor installierte Pakete aktualisiert werden. Bei einem Update verwendet '''rpm''' zur sorgfältigen Aktualisierung der Konfigurationsdateien die folgende Strategie: | |||
* Falls eine Konfigurationsdatei vom Systemadministrator nicht geändert wurde, installiert '''rpm''' die neue Version der entsprechenden Datei. Es sind keine Eingriffe seitens des Administrators nötig. | |||
* Falls eine Konfigurationsdatei vom Systemadministrator vor dem Update geändert wurde, speichert '''rpm''' die geänderte Datei mit der Erweiterung <tt>.rpmorig</tt> oder <tt>.rpmsave</tt> (Sicherungsdatei) und installiert nur dann die Version aus dem neuen Paket, wenn sich die ursprünglich installierte Datei und die neue Version unterscheiden. Vergleichen Sie in diesem Fall die Sicherungsdatei (<tt>.rpmorig</tt> oder <tt>.rpmsave</tt>) mit der neu installierten Datei und nehmen Sie Ihre Änderungen erneut in der neuen Datei vor. Löschen Sie anschließend unbedingt alle <tt>.rpmorig</tt>- und <tt>.rpmsave</tt>-Dateien, um Probleme mit zukünftigen Updates zu vermeiden. | |||
* <tt>.rpmnew</tt>-Dateien erscheinen immer dann, wenn die Konfigurationsdatei bereits existiert ''und'' wenn die Kennung <tt>noreplace</tt> mit der <tt>.spec</tt>-Datei angegeben wurde. | |||
Im Anschluss an ein Update sollten alle <tt>.rpmsave</tt>- und <tt>.rpmnew</tt>-Dateien nach einem Abgleich entfernt werden, damit sie bei zukünftigen Updates nicht stören. Die Erweiterung <tt>.rpmorig</tt> wird zugewiesen, wenn die Datei zuvor nicht von der RPM-Datenbank erkannt wurde. | |||
Andernfalls wird <tt>.rpmsave</tt> verwendet. Mit anderen Worten: <tt>.rpmorig</tt> entsteht bei einem Update von einem Fremdformat auf RPM. <tt>.rpmsave</tt> entsteht bei einem Update aus einem älteren RPM auf einen neueren RPM. <tt>.rpmnew</tt> informiert nicht darüber, ob der Systemadministrator die Konfigurationsdatei geändert hat. Eine Liste all dieser Dateien ist in <tt>/var/adm/rpmconfigcheck</tt> verfügbar. Einige Konfigurationsdateien (wie <tt>/etc/httpd/httpd.conf</tt>) werden nicht überschrieben, um den weiteren Betrieb zu ermöglichen. | |||
Der Schalter <tt>-U</tt> ist ''nicht'' einfach gleichbedeutend mit der Deinstallation mit der Option <tt>-e</tt> und der Installation mit der Option <tt>-i</tt>. Verwenden Sie <tt>-U</tt>, wann immer möglich. | |||
Geben Sie '''rpm -e '''<tt>paket</tt> ein, wenn Sie ein Paket entfernen möchten. '''rpm''' löscht das Paket nur, wenn keine nicht erfüllten Abhängigkeiten vorhanden sind. Theoretisch ist es unmöglich, beispielsweise Tcl/Tk zu löschen, solange eine andere Anwendung Tcl/Tk noch benötigt. Auch in diesem Fall nutzt RPM die Datenbank zur Unterstützung. Falls es in Ausnahmefällen nicht möglich ist, zu löschen, obwohl ''keine'' zusätzlichen Abhängigkeiten bestehen, können Sie versuchen, die RPM-Datenbank mit der Option <tt>--rebuilddb</tt> neu aufzubauen. | |||
==== RPM und Patches ==== | |||
Um die Betriebssicherheit eines Systems zu garantieren, müssen von Zeit zu Zeit Update-Pakete auf dem System installiert werden. Bisher konnte ein Fehler in einem Paket nur eliminiert werden, indem das vollständige Paket ersetzt wurde. Bei großen Paketen mit Fehlern in kleinen Dateien kann dies schnell zu großen Datenmengen führen. Jedoch bietet SUSE RPM nun eine Funktion, mit der Patches in Pakete installiert werden können. | |||
Die wichtigsten Überlegungen dazu werden am Beispiel "pine" aufgezeigt: | |||
<div >Ist der Patch-RPM für mein System geeignet?</div> | |||
Um dies zu prüfen, fragen Sie zunächst die installierte Version des Pakets ab. Im Fall von pine verwenden Sie den Befehl: | |||
<div >rpm -q pine | |||
pine-4.44-188</div> | |||
Prüfen Sie dann, ob der Patch-RPM sich für diese Version von pine eignet: | |||
<div >rpm -qp --basedon pine-4.44-224.i586.patch.rpm | |||
pine = 4.44-188 | |||
pine = 4.44-195 | |||
pine = 4.44-207</div> | |||
Dieser Patch passt zu drei verschiedenen Versionen von pine. Auch die im Beispiel installierte Version wird aufgeführt, d. h. der Patch kann installiert werden. | |||
<div >Welche Dateien werden durch den Patch ersetzt?</div> | |||
Die durch einen Patch betroffenen Dateien können leicht im Patch-RPM abgelesen werden. Der '''rpm'''-Parameter <tt>-P</tt> ermöglicht die Auswahl von speziellen Patch-Funktionen. Zeigen Sie die Dateiliste mit dem folgenden Befehl an: | |||
<div >rpm -qpPl pine-4.44-224.i586.patch.rpm | |||
/etc/pine.conf | |||
/etc/pine.conf.fixed | |||
/usr/bin/pine</div> | |||
Oder verwenden Sie, falls der Patch bereits installiert ist, den folgenden Befehl: | |||
<div >rpm -qPl pine | |||
/etc/pine.conf | |||
/etc/pine.conf.fixed | |||
/usr/bin/pine</div> | |||
<div >Wie kann ein Patch-RPM im System installiert werden?</div> | |||
Patch-RPMs werden wie normale RPMs verwendet. Der einzige Unterschied liegt darin, dass ein passender RPM bereits installiert sein muss. | |||
<div >Welche Patches sind bereits auf dem System installiert und zu welchen Paketversionen gehören sie? </div> | |||
Eine Liste aller im System installierter Patches kann über den Befehl '''rpm '''<tt>-qPa</tt> angezeigt werden. Wenn nur ein Patch in einem neuen System installiert ist (wie in unserem Beispiel), sieht die Liste wie folgt aus: | |||
<div >rpm -qPa | |||
pine-4.44-224</div> | |||
Wenn Sie zu einem späteren Zeitpunkt wissen möchten, welche Paketversion ursprünglich installiert war, können Sie auch diese Information der RPM-Datenbank entnehmen. Für '''pine''' rufen Sie diese Information mit dem folgenden Befehl ab: | |||
<div >rpm -q --basedon pine | |||
pine = 4.44-188</div> | |||
Weitere Informationen, auch zur Patch-Funktion von RPM, stehen auf den man-Seiten von '''rpm''' und '''rpmbuild''' zur Verfügung. | |||
==== Delta-RPM-Pakete ==== | |||
Delta-RPM-Pakete enthalten die Unterschiede zwischen einer alten und einer neuen Version eines RPM-Pakets. Wenn Sie ein Delta-RPM auf ein altes RPM anwenden, ergibt dies einen vollständig neuen RPM. Es ist nicht erforderlich, dass eine Kopie des alten RPM vorhanden ist, da ein Delta-RPM auch mit einem installierten RPM arbeiten kann. Die Delta-RPM-Pakete sind sogar kleiner als Patch-RPMs, was beim Übertragen von Update-Paketen über das Internet von Vorteil ist. Der Nachteil ist, dass Update-Vorgänge mit Delta-RPMs erheblich mehr CPU-Zyklen beanspruchen als normale oder Patch-RPMs. | |||
Die Binärdateien '''prepdeltarpm''', '''writedeltarpm''' und '''applydeltarpm''' sind Teil der Delta-RPM-Suite (Paket <tt>deltarpm</tt>) und helfen Ihnen beim Erstellen und Anwenden von Delta-RPM-Paketen. Mit den folgenden Befehlen erstellen Sie ein Delta-RPM mit dem Namen <tt>new.delta.rpm</tt>. Der folgende Befehl setzt voraus, dass <tt>old.rpm</tt> und <tt>new.rpm</tt> vorhanden sind: | |||
<div >prepdeltarpm -s seq -i info old.rpm > old.cpio | |||
prepdeltarpm -f new.rpm > new.cpio | |||
xdelta delta -0 old.cpio new.cpio delta | |||
writedeltarpm new.rpm delta info new.delta.rpm</div> | |||
Entfernen Sie zum Schluss die temporären Arbeitsdateien <tt>old.cpio</tt>, <tt>new.cpio</tt> und <tt>delta</tt>. | |||
Mit '''applydeltarpm''' können Sie den neuen RPM aus dem Dateisystem rekonstruieren, wenn das alte Paket bereits installiert ist: | |||
<div >applydeltarpm new.delta.rpm new.rpm</div> | |||
Um es aus dem alten RPM abzuleiten, ohne auf das Dateisystem zuzugreifen, verwenden Sie die Option <tt>-r</tt>: | |||
<div >applydeltarpm -r old.rpm new.delta.rpm new.rpm</div> | |||
Technische Details finden Sie in <tt>/usr/share/doc/packages/deltarpm/README</tt>. | |||
==== RPM Abfragen ==== | |||
Mit der Option <tt>-q</tt> initiiert '''rpm''' Abfragen und ermöglicht es, ein RPM-Archiv zu prüfen (durch Hinzufügen der Option <tt>-p</tt>) und auch die RPM-Datenbank nach installierten Paketen abzufragen. Zur Angabe der benötigten Informationsart stehen mehrere Schalter zur Verfügung. Weitere Informationen hierzu finden Sie unter [../quellen/manual/sec.rpm.anfragen.html#tab.rpm.query Tabelle 6.1, „Die wichtigsten RPM-Abfrageoptionen“]. | |||
; Die wichtigsten RPM-Abfrageoptionen | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>-i</tt> | |||
|| Paketinformation | |||
|- | |||
|| <tt>-l</tt> | |||
|| Dateiliste | |||
|- | |||
|| <tt>-f FILE</tt> | |||
|| Abfrage nach Paket, das die Datei <tt>FILE</tt> enthält. (<tt>FILE</tt> muss mit dem vollständigen Pfad angegeben werden.) | |||
|- | |||
|| <tt>-s</tt> | |||
|| Dateiliste mit Statusinformation (impliziert <tt>-l</tt>) | |||
|- | |||
|| <tt>-d</tt> | |||
|| Nur Dokumentationsdateien auflisten (impliziert <tt>-l</tt>) | |||
|- | |||
|| <tt>-c</tt> | |||
|| Nur Konfigurationsdateien auflisten (impliziert <tt>-l</tt>) | |||
|- | |||
|| <tt>--dump</tt> | |||
|| Dateiliste mit vollständigen Details (mit <tt>-l</tt>, <tt>-c</tt> oder <tt>-d</tt> benutzen) | |||
|- | |||
|| <tt>--provides</tt> | |||
|| Funktionen des Pakets auflisten, die ein anderes Paket mit <tt>--requires</tt> anfordern kann | |||
|- | |||
|| <tt>--requires</tt>, <tt>-R</tt> | |||
|| Fähigkeiten, die das Paket benötigt | |||
|- | |||
|| <tt>--Skripten</tt> | |||
|| Installationsskripten (preinstall, postinstall, uninstall) | |||
|- | |||
|} | |||
Beispielsweise gibt der Befehl '''rpm -q -i wget''' die in [../quellen/manual/sec.rpm.anfragen.html#aus.update.rpm-i Beispiel „rpm -q -i wget“] gezeigte Information aus. | |||
; Beispiel rpm -q -i wget | |||
<div >Name : wget Relocations: (not relocatable) | |||
Version : 1.9.1 Vendor: SUSE LINUX AG, Nuernberg, Germany | |||
Release : 50 Build Date: Sat 02 Oct 2004 03:49:13 AM CEST | |||
Install date: Mon 11 Oct 2004 10:24:56 AM CEST Build Host: f53.suse.de | |||
Group : Productivity/Networking/Web/Utilities Source RPM: wget-1.9.1-50.src.rpm | |||
Size : 1637514 License: GPL | |||
Signature : DSA/SHA1, Sat 02 Oct 2004 03:59:56 AM CEST, Key ID a84edae89c800aca | |||
Packager : [http://www.suse.de/feedback http://www.suse.de/feedback] | |||
URL : [http://wget.sunsite.dk/ http://wget.sunsite.dk/] | |||
Summary : A tool for mirroring FTP and HTTP servers | |||
Description : | |||
Wget enables you to retrieve WWW documents or FTP files from a server. | |||
This can be done in script files or via the command line. | |||
[...]</div> | |||
Die Option <tt>-f</tt> funktioniert nur, wenn Sie den kompletten Dateinamen mit dem vollständigen Pfad angeben. Sie können so viele Dateinamen wie nötig angeben. Beispielsweise führt der folgende Befehl | |||
<div >rpm -q -f /bin/rpm /usr/bin/wget</div> | |||
zum Ergebnis: | |||
<div >rpm-4.1.1-191 | |||
wget-1.9.1-50</div> | |||
Wenn nur ein Teil des Dateinamens bekannt ist, verwenden Sie ein Shell-Skript, wie in [../quellen/manual/sec.rpm.anfragen.html#dat.rpm.search Beispiel 6.2, „Skript für die Suche nach Paketen“] gezeigt. Übergeben Sie den partiellen Dateinamen als Parameter beim Aufruf des Skripts. | |||
Beispiel 6.2. Skript für die Suche nach Paketen | |||
<div ><nowiki>#! /bin/sh</nowiki> | |||
for i in $(rpm -q -a -l | grep $1); do | |||
echo "\"$i\" is in package:" | |||
rpm -q -f $i | |||
echo "" | |||
done</div> | |||
Der Befehl '''rpm -q --changelog rpm''' zeigt eine detaillierte Liste der Änderungsinformation zu einem bestimmten Paket nach Datum sortiert. Dieses Beispiel zeigt Informationen zum Paket <tt>rpm</tt>. | |||
Mithilfe der installierten RPM-Datenbank sind Überprüfungen möglich. Initiieren Sie die Überprüfungen mit <tt>-V</tt>, <tt>-y</tt> oder <tt>--verify</tt>. Mit dieser Option zeigt '''rpm''' alle Dateien in einem Paket an, die seit der Installation geändert wurden. '''rpm''' verwendet acht verschiedene Zeichen als Hinweis auf die folgenden Änderungen: | |||
; RPM-Überprüfungsoptionen | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''5'''</tt> | |||
|| MD5-Prüfsumme | |||
|- | |||
|| <tt>'''S'''</tt> | |||
|| Dateigröße | |||
|- | |||
|| <tt>'''L'''</tt> | |||
|| Symbolischer Link | |||
|- | |||
|| <tt>'''T'''</tt> | |||
|| Änderungszeit | |||
|- | |||
|| <tt>'''D'''</tt> | |||
|| Major- und Minor-Gerätenummern | |||
|- | |||
|| <tt>'''U'''</tt> | |||
|| Eigentümer | |||
|- | |||
|| <tt>'''G'''</tt> | |||
|| Gruppe | |||
|- | |||
|| <tt>'''M'''</tt> | |||
|| Modus (Berechtigungen und Dateityp) | |||
|- | |||
|} | |||
Bei Konfigurationsdateien wird der Buchstabe <tt>c</tt> ausgegeben. Beispielsweise für Änderungen an <tt>/etc/wgetrc</tt> (<tt>wget</tt>): | |||
<div >rpm -V wget | |||
S.5....T c /etc/wgetrc</div> | |||
Die Dateien der RPM-Datenbank werden in <tt>/var/lib/rpm</tt> abgelegt. Wenn die Partition <tt>/usr</tt> eine Größe von 1 GB aufweist, kann diese Datenbank beinahe 30 MB belegen, insbesondere nach einem kompletten Update. Wenn die Datenbank viel größer ist als erwartet, kann es nützlich sein, die Datenbank mit der Option <tt>--rebuilddb</tt> neu zu erstellen. Legen Sie zuvor eine Sicherungskopie der alten Datenbank an. Das '''cron'''-Skript '''cron.daily''' legt täglich (mit gzip gepackte) Kopien der Datenbank an und speichert diese unter <tt>/var/adm/backup/rpmdb</tt>. Die Anzahl der Kopien wird durch die Variable <tt>MAX_RPMDB_BACKUPS</tt> (Standard: <tt>5</tt>) in <tt>/etc/sysconfig/backup</tt> gesteuert. Die Größe einer einzelnen Sicherungskopie beträgt ungefähr 1 MB für 1 GB in <tt>/usr</tt>. | |||
==== Installieren von Quellpaketen ==== | |||
Alle Quellpakete haben die Erweiterung <tt>.src.rpm</tt> (Source-RPM). | |||
{|| class="wikitable sortable" | |||
|- | |||
|| [[Image:Grafik17.png|top|alt="[Tip]"]] | |||
|| '''Tipp''' | |||
|- | |||
| colspan="2" | Quellpakete können vom Installationsmedium auf die Festplatte kopiert und mit YaST entpackt werden. Sie werden im Paket-Manager jedoch nicht als installiert (<tt>[i]</tt>) gekennzeichnet. Das liegt daran, dass die Quellpakete nicht in der RPM-Datenbank eingetragen sind. Nur ''installierte'' Betriebssystemsoftware wird in der RPM-Datenbank aufgeführt. Wenn Sie ein Quellpaket „installieren“, wird dem System nur der Quellcode hinzugefügt. | |||
|- | |||
|} | |||
Die folgenden Verzeichnisse müssen für '''rpm''' und '''rpmbuild''' in <tt>/usr/src/packages</tt> vorhanden sein (es sei denn, Sie haben spezielle Einstellungen in einer Datei, wie <tt>/etc/rpmrc</tt>, festgelegt): | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''SOURCES'''</tt> | |||
|| für die originalen Quellen (<tt>.tar.bz2</tt> oder <tt>.tar.gz</tt> files, etc.) und für die distributionsspezifischen Anpassungen (meistens <tt>.diff</tt>- oder <tt>.patch</tt>-Dateien) | |||
|- | |||
|| <tt>'''SPECS'''</tt> | |||
|| für die ''.spec''-Dateien, die ähnlich wie Meta-Makefiles den ''build''-Prozess steuern | |||
|- | |||
|| <tt>'''BUILD'''</tt> | |||
|| Alle Quellen in diesem Verzeichnis werden entpackt, gepatcht und kompiliert. | |||
|- | |||
|| <tt>'''RPMS'''</tt> | |||
|| Speicherort der fertigen Binärpakete | |||
|- | |||
|| <tt>'''SRPMS'''</tt> | |||
|| Speicherort der Quell-RPMs | |||
|- | |||
|} | |||
Wenn Sie ein Quellpaket mit YaST installieren, werden alle notwendigen Komponenten in <tt>/usr/src/packages</tt> installiert: die Quellen und Anpassungen in <tt>SOURCES</tt> und die relevanten <tt>.spec</tt>-Dateien in <tt>SPECS</tt>. | |||
{|| class="wikitable sortable" | |||
|- | |||
|| [[Image:Grafik18.png|top|alt="[Warning]"]] | |||
|| '''Warnung''' | |||
|- | |||
| colspan="2" | Experimentieren Sie nicht mit Systemkomponenten (<tt>glibc</tt>, <tt>rpm</tt>, <tt>sysvinit</tt> usw.), da Sie damit die Funktionstüchtigkeit Ihres Systems aufs Spiel setzen. | |||
|- | |||
|} | |||
Das folgende Beispiel verwendet das <tt>wget.src.rpm</tt>-Paket. Nach dem Installieren des Pakets mit YaST sollten Sie über Dateien ähnlich der in folgender Liste verfügen: | |||
<div >/usr/src/packages/SOURCES/nops_doc.diff | |||
/usr/src/packages/SOURCES/toplev_destdir.diff | |||
/usr/src/packages/SOURCES/wget-1.9.1+ipvmisc.patch | |||
/usr/src/packages/SOURCES/wget-1.9.1-brokentime.patch | |||
/usr/src/packages/SOURCES/wget-1.9.1-passive_ftp.diff | |||
/usr/src/packages/SOURCES/wget-LFS-20040909.tar.bz2 | |||
/usr/src/packages/SOURCES/wget-wrong_charset.patch | |||
/usr/src/packages/SPECS/wget.spec</div> | |||
Mit '''rpmbuild -b '''<tt>X</tt>''' /usr/src/packages/SPECS/wget.spec''' wird die Kompilierung gestartet. <tt>X</tt> ist ein Platzhalter für verschiedene Stufen des build-Prozesses (Einzelheiten siehe in <tt>--help</tt> oder der RPM-Dokumentation). Nachfolgend wird nur eine kurze Erläuterung gegeben: | |||
{|| class="wikitable sortable" | |||
|- | |||
|| <tt>'''-bp'''</tt> | |||
|| Bereiten Sie Quellen in <tt>/usr/src/packages/BUILD</tt> vor: entpacken und patchen. | |||
|- | |||
|| <tt>'''-bc'''</tt> | |||
|| Wie <tt>-bp</tt>, jedoch zusätzlich kompilieren. | |||
|- | |||
|| <tt>'''-bi'''</tt> | |||
|| Wie <tt>-bp</tt>, jedoch zusätzlich die erstellte Software installieren. Vorsicht: Wenn das Paket die Funktion BuildRoot nicht unterstützt, ist es möglich, dass Konfigurationsdateien überschrieben werden. | |||
|- | |||
|| <tt>'''-bb'''</tt> | |||
|| Wie <tt>-bi</tt>, jedoch zusätzlich das Binärpaket erstellen. Nach erfolgreicher Kompilierung sollte das Binärpaket in <tt>/usr/src/packages/RPMS</tt> sein. | |||
|- | |||
|| <tt>'''-ba'''</tt> | |||
|| Wie <tt>-bb</tt>, jedoch zusätzlich den Quell-RPM erstellen. Nach erfolgreicher Kompilierung sollte dieses in <tt>/usr/src/packages/RPMS</tt> liegen. | |||
|- | |||
|| <tt>'''--short-circuit'''</tt> | |||
|| Einige Schritte überspringen. | |||
|- | |||
|} | |||
Der erstellte Binär-RPM kann nun mit '''rpm '''<tt>-i</tt> oder vorzugsweise mit '''rpm '''<tt>-U</tt> erstellt werden. Durch die Installation mit '''rpm''' wird er in die RPM-Datenbank aufgenommen. | |||
==== Kompilieren von RPM-Pakten ==== | |||
Bei vielen Paketen besteht die Gefahr, dass während der Erstellung ungewollt Dateien in das laufende System kopiert werden. Um dies zu vermeiden, können Sie <tt>build</tt> verwenden, das eine definierte Umgebung herstellt, in der das Paket erstellt wird. Zum Aufbau dieser chroot-Umgebung muss dem '''build'''-Skript ein kompletter Paketbaum zur Verfügung stehen. Dieser kann auf Festplatte, über NFS oder auch von DVD bereitgestellt werden. Legen Sie die Position mit '''build --rpms '''<tt>Verzeichnis</tt> fest. Im Unterschied zu '''rpm''' sucht der Befehl '''build''' die SPEC-Datei im Quellverzeichnis. Wenn Sie, wie im obigen Beispiel, wget neu erstellen möchten und die DVD unter <tt>/media/dvd</tt> im System eingehängt ist, verwenden Sie als Benutzer <tt>root</tt> folgende Befehle: | |||
<div >cd /usr/src/packages/SOURCES/ | |||
mv ../SPECS/wget.spec . | |||
build --rpms /media/dvd/suse/ wget.spec</div> | |||
Anschließend wird in <tt>/var/tmp/build-root</tt> eine minimale Umgebung eingerichtet. Das Paket wird in dieser Umgebung erstellt. Danach befinden sich die resultierenden Pakete in <tt>/var/tmp/build-root/usr/src/packages/RPMS</tt>. | |||
Das '''build'''-Skript bietet eine Reihe zusätzlicher Optionen. Beispielsweise können Sie das Skript veranlassen, Ihre eigenen RPMs bevorzugt zu verwenden, die Initialisierung der build-Umgebung auszulassen oder den Befehl '''rpm''' auf eine der oben erwähnten Stufen zu beschränken. Weitere Informationen erhalten Sie über '''build '''<tt>--help</tt> oder die Manualpage '''build'''. | |||
==== Werkzeuge ==== | |||
Midnight Commander ('''mc''') kann den Inhalt von RPM-Archiven anzeigen und Teile daraus kopieren. Archive werden als virtuelle Dateisysteme dargestellt und bieten alle üblichen Menüoptionen von Midnight Commander. Zeigen Sie den <tt>HEADER</tt> mit F3 an. Zeigen Sie die Archivstruktur mit den Cursortasten und der Eingabetaste an. Kopieren Sie Archivkomponenten mit F5. | |||
KDE bietet das Werkzeug kpackage als Front-End für '''rpm''' an. Ein Paket-Manager mit allen Funktionen ist als YaST-Modul verfügbar (siehe Kapitel Installieren bzw. Entfernen von Software (↑Start)). | |||
[[Kategorie:rpm]] |
Aktuelle Version vom 12. November 2024, 18:45 Uhr
rpm ist ein Paketverwaltungs-System für Linux
Beschreibung
RPM Package Manager ist ein freies (GPL) Paketverwaltungs-System, ursprünglich entwickelt von dem Unternehmen Red Hat.
- Es umfasst das Paketformat und alle nötigen Programme, um RPM-Pakete zu erstellen und zu verwalten.
Das RPM-Format ist Teil der Linux Standard Base
- Bezeichnung
Ursprünglich
- Red Hat Package Manager
Aktuell
- RPM Package Manager
Installation
Anwendungen
Problembehebung
Aufruf
Optionen
Parameter
Umgebung
Rückgabewert
Konfiguration
Dateien
Sicherheit
Dokumentation
RFC
Man-Page
Info-Pages
Siehe auch
- Paketverwaltung
- dpkg und .deb – das System bei Debian
- Ebuild und emerge – die Wahl bei Gentoo Linux
- Pacman – Paketmanager von Arch Linux
Links
Projekt-Homepage
Weblinks
- Projektseite von rpm.org (englisch)
- Projektseite von rpm5.org (englisch)
- APT-RPM (englisch)
- Vorlage:Dmoz
- Vorlage:Webarchiv von Thomas Schletter
Wikipedia
Geschichte
Ursprünglich bedeutete RPM Red Hat Package Management.
- Ende der Neunziger wurde der Name jedoch in RPM Package Management geändert.
- Der Hintergrund waren rechtliche Aspekte.
- RPM wurde inzwischen von vielen Distributoren verwendet, und man strebte die Aufnahme von RPM in die Linux Standard Base an.
- Der Unternehmensname (Firma) im Namen der Software hätte dies zumindest erschwert.
Unix-Systeme
Da die meisten Linux-Distributionen freie Software sind, besteht der Vorteil einer bestimmten Distribution gegenüber anderen zu einem großen Teil aus den Annehmlichkeiten des jeweiligen Paket-Managers (und aus den zusammengestellten, getesteten und regelmäßig aktualisierten (RPM-)Paketsammlungen des jeweiligen Distributors im Internet). Pakete zwischen Distributoren auszutauschen, war früher nahezu unmöglich.
- Dies wurde mit RPM einfacher, ist aber immer noch mit Problemen behaftet, da die verschiedenen Distributionen, die RPM benutzen, oft verschiedene Versionen und/oder Konfigurationen von Systemsoftware wie etwa Grafik-Bibliotheken verwenden.
Für den Entwickler vereinfacht ein Paketverwaltungssystem wie RPM das Einbauen von Software in die durch die Distribution vorgegebene Struktur (Pfade, Abhängigkeiten, Dateinamen, Paketnamen).
- Das Paketformat selbst überprüft allerdings den jeweiligen Inhalt eines Pakets nicht automatisch.
- Der Entwickler bestimmt den Aufbau des Paketes selbständig und muss sich damit für jede Distribution in die jeweiligen Besonderheiten einarbeiten.
Mit Einführung der Linux Standard Base wurden viele Unstimmigkeiten zwischen den Distributoren ausgeräumt.
- LSB erleichtert die Arbeit der Paketbauer erheblich, weil zumindest Dateinamen und Pfade vereinheitlicht sind.
- Entsprechende Sorgfalt des Paketmaintainers vorausgesetzt, lässt sich relativ sicher ein RPM von einem anderen LSB-Distributor in ein beliebiges anderes LSB-System einspielen.
Aufbau
Die RPM-Dateien sind in der Regel mit gzip oder LZMA[1] (xz) komprimierte cpio-Archive, die einzelnen Teile können jedoch einfach nach bestimmten Informationen durchsucht werden, denn ein Kopfdatenbereich im Binärformat ist an jedes Paket angefügt.
- Diese Kopfdaten sind nicht komprimiert und enthalten alle wichtigen Informationen.
- Das erleichtert das schnelle Durchsuchen von RPM-Paketen.
Entpacken ohne Installation ist möglich: rpm2cpio foo.rpm | cpio -idmv
XML Package Metadata
In den RPM-Spezifikationen finden sich ebenfalls die Spezifikationen für Verzeichnisse mehrerer RPM-Pakete.
- Die Pakete werden dabei in einem Verzeichnis gespeichert, das neben den Paketen noch Informationen über die Pakete selbst in Form von Metadaten-Dateien enthält.
- Wenn ein geeignetes Programm dann Informationen über die im Verzeichnis enthaltene Software benötigt, reicht es, die Metadaten herunterzuladen.
- In diesen Daten sind die vorhandenen Pakete, deren Versionen, Abhängigkeiten, Architektur etc.
- enthalten.
Programme, die XML-Package-Metadaten verwalten können, sind yum, Yast, Red Carpet, smartpm und apt-rpm.
RPM-Programme
- rpm – ein Linux-Programm, das direkt über die Konsole aufrufbar ist
Konsolen-Frontends
- urpm von Mandriva – damit werden bei der Installation automatisch die Abhängigkeiten aufgelöst.
- up2date von Red Hat
- Yellowdog Updater, Modified (Yum)
- YaST von SuSE – enthält ein Modul zur Verwaltung von RPMs
- Smart Package Manager – dieses Werkzeug greift auf bestehende Werkzeuge (rpm, dpkg, … ) zurück und kann so auf vielen Distributionen eine einheitliche Oberfläche bieten
- DNF
- rpm-ostree – Tool aus Red Hats Container-Betriebssystem Atomic Host
GUI-Frontends
- KPackage (KDE)
- gnorpm (Gnome)
- Yumex und KYum – zwei grafische Oberflächen für Yum (Gnome; KDE)
- PackageKit – ein grafisches Programm, das sowohl auf der Basis von APT als auch auf Yum läuft.
- anpm (ArcaNoaePackageManager) – Frontend für OS2 bzw.
- eComStation.[2]
Maintaining Tools
- apt4rpm – eine Portierung von APT für das RPM-Format.
- rpmlint
- alien – ein Programm, welches RPM-Pakete in Debian-Pakete für Debian (und auf dessen Paketverwaltung aufbauende Distributionen wie Ubuntu), und umgekehrt, konvertiert.
Server / Repositories
- RHN
- Spacewalk – rpm repository channel tool
- openSUSE Build Service
- Pulp – rpm repository channel tool wie Spacewalk
Betriebssysteme
Linux-Distributionen
- AlmaLinux
- CentOS
- Fedora Project
- Mageia
- Mandriva Linux (nutzt einen Fork)
- MeeGo
- openSUSE
- Oracle Linux
- PCLinuxOS
- Red Hat Enterprise Linux
- Sailfish OS
- Scientific Linux
- SUSE Linux Enterprise (SUSE Linux Enterprise Server)
UNIX-Systeme
Andere
- OS/2 / eComStation / ArcaOS
- Netware
TMP
Der Redhat Package Manager
RPM (RPM Package Manager) wird für die Verwaltung von Softwarepaketen verwendet. Seine Hauptbefehle lauten rpm und rpmbuild. In der leistungsstarken RPM-Datenbank können Benutzer, Systemadministratoren und Paketersteller ausführliche Informationen zur installierten Software abfragen.
Im Wesentlichen hat rpm fünf Modi: Installieren, Deinstallieren oder Aktualisieren von Software-Paketen; Neuaufbauen der RPM-Datenbank, Abfragen der RPM-Basis oder individuellen RPM-Archiven, Integritätsprüfung der Pakete und Signieren von Paketen. rpmbuild ermöglicht das Aufbauen installierbarer Pakete von Pristine-Quellen.
Installierbare RPM-Archive sind in einem speziellen binären Format gepackt. Diese Archive bestehen aus den zu installierenden Programmdateien und aus verschiedenen Metadaten, die bei der Installation von rpm benutzt werden, um das jeweilige Softwarepaket zu konfigurieren, oder die zu Dokumentationszwecken in der RPM-Datenbank gespeichert werden. RPM-Archive haben für gewöhnlich die Dateinamenserweiterung .rpm.
"[Tip]" | Pakete zur Software-Entwicklung |
Bei etlichen Paketen sind die zur Software-Entwicklung erforderlichen Komponenten (Bibliotheken, Header- und Include-Dateien usw.) in eigene Pakete ausgelagert. Diese Entwicklungspakete werden nur benötigt, wenn Sie Software selbst kompilieren möchten – beispielsweise die neuesten GNOME-Pakete. Solche Pakete sind am Namenszusatz -devel zu erkennen, z. B. die Pakete alsa-devel, gimp-devel und kdelibs3-devel. |
Graphische Frontends
Wer mit der Kommandozeile des rpm-Kommandos auf Kriegsfuß steht oder Probleme hat, sich die wichtigsten Optionen zu behalten, hat die Auswahl zwischen mehreren graphischen Frontends, die aber nicht alle Optionen von rpm abdecken.
# kpackage ist bei KDE dabei und unterstützt Drag & Drop, d. h. man kann ein heruntergeladenes Paket aus dem Datei-Manager heraus in kpackage hineinschieben und fallen lassen. Es versteht auch das Debian-Paketformat, das an der Endung .deb erkennbar ist.
- GnoRPM ist für Freunde des Gnome-Desktops.
- xrpm ist ein in Python geschriebenes Frontend, das einfach zu bedienen ist und alle wichtigen Funktionen enthält.
- mc -- der Midnight Commander ist zwar kein graphisches RPM-Frontend, kann aber RPM-Archive lesen und anzeigen
Prüfen der Authentizität
RPM-Pakete sind mit GnuPG signiert. Der Schlüssel mit dem "Fingerabdruck" lautet:
Mit dem Befehl rpm --checksig paket-1.2.3.rpm können Sie die Signatur eines RPM-Pakets überprüfen und feststellen, ob es wirklich von SUSE oder einer anderen vertrauenswürdigen Quelle stammt. Dies ist insbesondere bei Update-Paketen aus dem Internet zu empfehlen. Der öffentliche Paketsignierschlüssel von SUSE ist standardmäßig in /root/.gnupg/ hinterlegt. Der Schlüssel befindet sich zusätzlich im Verzeichnis /usr/lib/rpm/gnupg/, damit auch normale Benutzer die Signatur von RPM-Paketen prüfen können.
Pakete verwalten
In der Regel kann ein RPM-Archiv einfach installiert werden: rpm -i package.rpm. Mit diesem Befehl wird das Paket aber nur dann installiert, wenn seine Abhängigkeiten erfüllt sind und keine Konflikte mit anderen Paketen bestehen. rpm fordert per Fehlermeldung die Pakete an, die zum Erfüllen der Abhängigkeiten installiert werden müssen. Im Hintergrund stellt die RPM-Datenbank sicher, dass keine Konflikte entstehen: Jede spezifische Datei darf nur zu einem Paket gehören. Durch die Wahl anderer Optionen können Sie rpm zwingen, diese Standards zu ignorieren, jedoch ist dies nur für Spezialisten gedacht. Andernfalls wird damit die Integrität des Systems gefährdet und möglicherweise die Update-Fähigkeit aufs Spiel gesetzt.
Die Optionen -U oder --upgrade und -F oder --freshen können für das Update eines Pakets benutzt werden, z. B. : rpm -F paket.rpm. Dieser Befehl entfernt die Dateien der alten Version und installiert sofort die neuen Dateien. Der Unterschied zwischen den beiden Versionen besteht darin, dass mit -U auch Pakete installiert werden, die vorher nicht im System vorhanden waren, wohingegen mit -F nur zuvor installierte Pakete aktualisiert werden. Bei einem Update verwendet rpm zur sorgfältigen Aktualisierung der Konfigurationsdateien die folgende Strategie:
- Falls eine Konfigurationsdatei vom Systemadministrator nicht geändert wurde, installiert rpm die neue Version der entsprechenden Datei. Es sind keine Eingriffe seitens des Administrators nötig.
- Falls eine Konfigurationsdatei vom Systemadministrator vor dem Update geändert wurde, speichert rpm die geänderte Datei mit der Erweiterung .rpmorig oder .rpmsave (Sicherungsdatei) und installiert nur dann die Version aus dem neuen Paket, wenn sich die ursprünglich installierte Datei und die neue Version unterscheiden. Vergleichen Sie in diesem Fall die Sicherungsdatei (.rpmorig oder .rpmsave) mit der neu installierten Datei und nehmen Sie Ihre Änderungen erneut in der neuen Datei vor. Löschen Sie anschließend unbedingt alle .rpmorig- und .rpmsave-Dateien, um Probleme mit zukünftigen Updates zu vermeiden.
- .rpmnew-Dateien erscheinen immer dann, wenn die Konfigurationsdatei bereits existiert und wenn die Kennung noreplace mit der .spec-Datei angegeben wurde.
Im Anschluss an ein Update sollten alle .rpmsave- und .rpmnew-Dateien nach einem Abgleich entfernt werden, damit sie bei zukünftigen Updates nicht stören. Die Erweiterung .rpmorig wird zugewiesen, wenn die Datei zuvor nicht von der RPM-Datenbank erkannt wurde.
Andernfalls wird .rpmsave verwendet. Mit anderen Worten: .rpmorig entsteht bei einem Update von einem Fremdformat auf RPM. .rpmsave entsteht bei einem Update aus einem älteren RPM auf einen neueren RPM. .rpmnew informiert nicht darüber, ob der Systemadministrator die Konfigurationsdatei geändert hat. Eine Liste all dieser Dateien ist in /var/adm/rpmconfigcheck verfügbar. Einige Konfigurationsdateien (wie /etc/httpd/httpd.conf) werden nicht überschrieben, um den weiteren Betrieb zu ermöglichen.
Der Schalter -U ist nicht einfach gleichbedeutend mit der Deinstallation mit der Option -e und der Installation mit der Option -i. Verwenden Sie -U, wann immer möglich.
Geben Sie rpm -e paket ein, wenn Sie ein Paket entfernen möchten. rpm löscht das Paket nur, wenn keine nicht erfüllten Abhängigkeiten vorhanden sind. Theoretisch ist es unmöglich, beispielsweise Tcl/Tk zu löschen, solange eine andere Anwendung Tcl/Tk noch benötigt. Auch in diesem Fall nutzt RPM die Datenbank zur Unterstützung. Falls es in Ausnahmefällen nicht möglich ist, zu löschen, obwohl keine zusätzlichen Abhängigkeiten bestehen, können Sie versuchen, die RPM-Datenbank mit der Option --rebuilddb neu aufzubauen.
RPM und Patches
Um die Betriebssicherheit eines Systems zu garantieren, müssen von Zeit zu Zeit Update-Pakete auf dem System installiert werden. Bisher konnte ein Fehler in einem Paket nur eliminiert werden, indem das vollständige Paket ersetzt wurde. Bei großen Paketen mit Fehlern in kleinen Dateien kann dies schnell zu großen Datenmengen führen. Jedoch bietet SUSE RPM nun eine Funktion, mit der Patches in Pakete installiert werden können.
Die wichtigsten Überlegungen dazu werden am Beispiel "pine" aufgezeigt:
Um dies zu prüfen, fragen Sie zunächst die installierte Version des Pakets ab. Im Fall von pine verwenden Sie den Befehl:
Prüfen Sie dann, ob der Patch-RPM sich für diese Version von pine eignet:
pine = 4.44-188 pine = 4.44-195pine = 4.44-207
Dieser Patch passt zu drei verschiedenen Versionen von pine. Auch die im Beispiel installierte Version wird aufgeführt, d. h. der Patch kann installiert werden.
Die durch einen Patch betroffenen Dateien können leicht im Patch-RPM abgelesen werden. Der rpm-Parameter -P ermöglicht die Auswahl von speziellen Patch-Funktionen. Zeigen Sie die Dateiliste mit dem folgenden Befehl an:
/etc/pine.conf /etc/pine.conf.fixed/usr/bin/pine
Oder verwenden Sie, falls der Patch bereits installiert ist, den folgenden Befehl:
/etc/pine.conf /etc/pine.conf.fixed/usr/bin/pine
Patch-RPMs werden wie normale RPMs verwendet. Der einzige Unterschied liegt darin, dass ein passender RPM bereits installiert sein muss.
Eine Liste aller im System installierter Patches kann über den Befehl rpm -qPa angezeigt werden. Wenn nur ein Patch in einem neuen System installiert ist (wie in unserem Beispiel), sieht die Liste wie folgt aus:
Wenn Sie zu einem späteren Zeitpunkt wissen möchten, welche Paketversion ursprünglich installiert war, können Sie auch diese Information der RPM-Datenbank entnehmen. Für pine rufen Sie diese Information mit dem folgenden Befehl ab:
Weitere Informationen, auch zur Patch-Funktion von RPM, stehen auf den man-Seiten von rpm und rpmbuild zur Verfügung.
Delta-RPM-Pakete
Delta-RPM-Pakete enthalten die Unterschiede zwischen einer alten und einer neuen Version eines RPM-Pakets. Wenn Sie ein Delta-RPM auf ein altes RPM anwenden, ergibt dies einen vollständig neuen RPM. Es ist nicht erforderlich, dass eine Kopie des alten RPM vorhanden ist, da ein Delta-RPM auch mit einem installierten RPM arbeiten kann. Die Delta-RPM-Pakete sind sogar kleiner als Patch-RPMs, was beim Übertragen von Update-Paketen über das Internet von Vorteil ist. Der Nachteil ist, dass Update-Vorgänge mit Delta-RPMs erheblich mehr CPU-Zyklen beanspruchen als normale oder Patch-RPMs.
Die Binärdateien prepdeltarpm, writedeltarpm und applydeltarpm sind Teil der Delta-RPM-Suite (Paket deltarpm) und helfen Ihnen beim Erstellen und Anwenden von Delta-RPM-Paketen. Mit den folgenden Befehlen erstellen Sie ein Delta-RPM mit dem Namen new.delta.rpm. Der folgende Befehl setzt voraus, dass old.rpm und new.rpm vorhanden sind:
prepdeltarpm -f new.rpm > new.cpio xdelta delta -0 old.cpio new.cpio deltawritedeltarpm new.rpm delta info new.delta.rpm
Entfernen Sie zum Schluss die temporären Arbeitsdateien old.cpio, new.cpio und delta.
Mit applydeltarpm können Sie den neuen RPM aus dem Dateisystem rekonstruieren, wenn das alte Paket bereits installiert ist:
Um es aus dem alten RPM abzuleiten, ohne auf das Dateisystem zuzugreifen, verwenden Sie die Option -r:
Technische Details finden Sie in /usr/share/doc/packages/deltarpm/README.
RPM Abfragen
Mit der Option -q initiiert rpm Abfragen und ermöglicht es, ein RPM-Archiv zu prüfen (durch Hinzufügen der Option -p) und auch die RPM-Datenbank nach installierten Paketen abzufragen. Zur Angabe der benötigten Informationsart stehen mehrere Schalter zur Verfügung. Weitere Informationen hierzu finden Sie unter [../quellen/manual/sec.rpm.anfragen.html#tab.rpm.query Tabelle 6.1, „Die wichtigsten RPM-Abfrageoptionen“].
- Die wichtigsten RPM-Abfrageoptionen
-i | Paketinformation |
-l | Dateiliste |
-f FILE | Abfrage nach Paket, das die Datei FILE enthält. (FILE muss mit dem vollständigen Pfad angegeben werden.) |
-s | Dateiliste mit Statusinformation (impliziert -l) |
-d | Nur Dokumentationsdateien auflisten (impliziert -l) |
-c | Nur Konfigurationsdateien auflisten (impliziert -l) |
--dump | Dateiliste mit vollständigen Details (mit -l, -c oder -d benutzen) |
--provides | Funktionen des Pakets auflisten, die ein anderes Paket mit --requires anfordern kann |
--requires, -R | Fähigkeiten, die das Paket benötigt |
--Skripten | Installationsskripten (preinstall, postinstall, uninstall) |
Beispielsweise gibt der Befehl rpm -q -i wget die in [../quellen/manual/sec.rpm.anfragen.html#aus.update.rpm-i Beispiel „rpm -q -i wget“] gezeigte Information aus.
- Beispiel rpm -q -i wget
Version : 1.9.1 Vendor: SUSE LINUX AG, Nuernberg, Germany Release : 50 Build Date: Sat 02 Oct 2004 03:49:13 AM CEST Install date: Mon 11 Oct 2004 10:24:56 AM CEST Build Host: f53.suse.de Group : Productivity/Networking/Web/Utilities Source RPM: wget-1.9.1-50.src.rpm Size : 1637514 License: GPL Signature : DSA/SHA1, Sat 02 Oct 2004 03:59:56 AM CEST, Key ID a84edae89c800aca Packager : http://www.suse.de/feedback URL : http://wget.sunsite.dk/ Summary : A tool for mirroring FTP and HTTP servers Description : Wget enables you to retrieve WWW documents or FTP files from a server. This can be done in script files or via the command line.[...]
Die Option -f funktioniert nur, wenn Sie den kompletten Dateinamen mit dem vollständigen Pfad angeben. Sie können so viele Dateinamen wie nötig angeben. Beispielsweise führt der folgende Befehl
zum Ergebnis:
Wenn nur ein Teil des Dateinamens bekannt ist, verwenden Sie ein Shell-Skript, wie in [../quellen/manual/sec.rpm.anfragen.html#dat.rpm.search Beispiel 6.2, „Skript für die Suche nach Paketen“] gezeigt. Übergeben Sie den partiellen Dateinamen als Parameter beim Aufruf des Skripts.
Beispiel 6.2. Skript für die Suche nach Paketen
for i in $(rpm -q -a -l | grep $1); do echo "\"$i\" is in package:" rpm -q -f $i echo ""done
Der Befehl rpm -q --changelog rpm zeigt eine detaillierte Liste der Änderungsinformation zu einem bestimmten Paket nach Datum sortiert. Dieses Beispiel zeigt Informationen zum Paket rpm.
Mithilfe der installierten RPM-Datenbank sind Überprüfungen möglich. Initiieren Sie die Überprüfungen mit -V, -y oder --verify. Mit dieser Option zeigt rpm alle Dateien in einem Paket an, die seit der Installation geändert wurden. rpm verwendet acht verschiedene Zeichen als Hinweis auf die folgenden Änderungen:
- RPM-Überprüfungsoptionen
5 | MD5-Prüfsumme |
S | Dateigröße |
L | Symbolischer Link |
T | Änderungszeit |
D | Major- und Minor-Gerätenummern |
U | Eigentümer |
G | Gruppe |
M | Modus (Berechtigungen und Dateityp) |
Bei Konfigurationsdateien wird der Buchstabe c ausgegeben. Beispielsweise für Änderungen an /etc/wgetrc (wget):
Die Dateien der RPM-Datenbank werden in /var/lib/rpm abgelegt. Wenn die Partition /usr eine Größe von 1 GB aufweist, kann diese Datenbank beinahe 30 MB belegen, insbesondere nach einem kompletten Update. Wenn die Datenbank viel größer ist als erwartet, kann es nützlich sein, die Datenbank mit der Option --rebuilddb neu zu erstellen. Legen Sie zuvor eine Sicherungskopie der alten Datenbank an. Das cron-Skript cron.daily legt täglich (mit gzip gepackte) Kopien der Datenbank an und speichert diese unter /var/adm/backup/rpmdb. Die Anzahl der Kopien wird durch die Variable MAX_RPMDB_BACKUPS (Standard: 5) in /etc/sysconfig/backup gesteuert. Die Größe einer einzelnen Sicherungskopie beträgt ungefähr 1 MB für 1 GB in /usr.
Installieren von Quellpaketen
Alle Quellpakete haben die Erweiterung .src.rpm (Source-RPM).
"[Tip]" | Tipp |
Quellpakete können vom Installationsmedium auf die Festplatte kopiert und mit YaST entpackt werden. Sie werden im Paket-Manager jedoch nicht als installiert ([i]) gekennzeichnet. Das liegt daran, dass die Quellpakete nicht in der RPM-Datenbank eingetragen sind. Nur installierte Betriebssystemsoftware wird in der RPM-Datenbank aufgeführt. Wenn Sie ein Quellpaket „installieren“, wird dem System nur der Quellcode hinzugefügt. |
Die folgenden Verzeichnisse müssen für rpm und rpmbuild in /usr/src/packages vorhanden sein (es sei denn, Sie haben spezielle Einstellungen in einer Datei, wie /etc/rpmrc, festgelegt):
SOURCES | für die originalen Quellen (.tar.bz2 oder .tar.gz files, etc.) und für die distributionsspezifischen Anpassungen (meistens .diff- oder .patch-Dateien) |
SPECS | für die .spec-Dateien, die ähnlich wie Meta-Makefiles den build-Prozess steuern |
BUILD | Alle Quellen in diesem Verzeichnis werden entpackt, gepatcht und kompiliert. |
RPMS | Speicherort der fertigen Binärpakete |
SRPMS | Speicherort der Quell-RPMs |
Wenn Sie ein Quellpaket mit YaST installieren, werden alle notwendigen Komponenten in /usr/src/packages installiert: die Quellen und Anpassungen in SOURCES und die relevanten .spec-Dateien in SPECS.
"[Warning]" | Warnung |
Experimentieren Sie nicht mit Systemkomponenten (glibc, rpm, sysvinit usw.), da Sie damit die Funktionstüchtigkeit Ihres Systems aufs Spiel setzen. |
Das folgende Beispiel verwendet das wget.src.rpm-Paket. Nach dem Installieren des Pakets mit YaST sollten Sie über Dateien ähnlich der in folgender Liste verfügen:
/usr/src/packages/SOURCES/toplev_destdir.diff /usr/src/packages/SOURCES/wget-1.9.1+ipvmisc.patch /usr/src/packages/SOURCES/wget-1.9.1-brokentime.patch /usr/src/packages/SOURCES/wget-1.9.1-passive_ftp.diff /usr/src/packages/SOURCES/wget-LFS-20040909.tar.bz2 /usr/src/packages/SOURCES/wget-wrong_charset.patch/usr/src/packages/SPECS/wget.spec
Mit rpmbuild -b X /usr/src/packages/SPECS/wget.spec wird die Kompilierung gestartet. X ist ein Platzhalter für verschiedene Stufen des build-Prozesses (Einzelheiten siehe in --help oder der RPM-Dokumentation). Nachfolgend wird nur eine kurze Erläuterung gegeben:
-bp | Bereiten Sie Quellen in /usr/src/packages/BUILD vor: entpacken und patchen. |
-bc | Wie -bp, jedoch zusätzlich kompilieren. |
-bi | Wie -bp, jedoch zusätzlich die erstellte Software installieren. Vorsicht: Wenn das Paket die Funktion BuildRoot nicht unterstützt, ist es möglich, dass Konfigurationsdateien überschrieben werden. |
-bb | Wie -bi, jedoch zusätzlich das Binärpaket erstellen. Nach erfolgreicher Kompilierung sollte das Binärpaket in /usr/src/packages/RPMS sein. |
-ba | Wie -bb, jedoch zusätzlich den Quell-RPM erstellen. Nach erfolgreicher Kompilierung sollte dieses in /usr/src/packages/RPMS liegen. |
--short-circuit | Einige Schritte überspringen. |
Der erstellte Binär-RPM kann nun mit rpm -i oder vorzugsweise mit rpm -U erstellt werden. Durch die Installation mit rpm wird er in die RPM-Datenbank aufgenommen.
Kompilieren von RPM-Pakten
Bei vielen Paketen besteht die Gefahr, dass während der Erstellung ungewollt Dateien in das laufende System kopiert werden. Um dies zu vermeiden, können Sie build verwenden, das eine definierte Umgebung herstellt, in der das Paket erstellt wird. Zum Aufbau dieser chroot-Umgebung muss dem build-Skript ein kompletter Paketbaum zur Verfügung stehen. Dieser kann auf Festplatte, über NFS oder auch von DVD bereitgestellt werden. Legen Sie die Position mit build --rpms Verzeichnis fest. Im Unterschied zu rpm sucht der Befehl build die SPEC-Datei im Quellverzeichnis. Wenn Sie, wie im obigen Beispiel, wget neu erstellen möchten und die DVD unter /media/dvd im System eingehängt ist, verwenden Sie als Benutzer root folgende Befehle:
mv ../SPECS/wget.spec .build --rpms /media/dvd/suse/ wget.spec
Anschließend wird in /var/tmp/build-root eine minimale Umgebung eingerichtet. Das Paket wird in dieser Umgebung erstellt. Danach befinden sich die resultierenden Pakete in /var/tmp/build-root/usr/src/packages/RPMS.
Das build-Skript bietet eine Reihe zusätzlicher Optionen. Beispielsweise können Sie das Skript veranlassen, Ihre eigenen RPMs bevorzugt zu verwenden, die Initialisierung der build-Umgebung auszulassen oder den Befehl rpm auf eine der oben erwähnten Stufen zu beschränken. Weitere Informationen erhalten Sie über build --help oder die Manualpage build.
Werkzeuge
Midnight Commander (mc) kann den Inhalt von RPM-Archiven anzeigen und Teile daraus kopieren. Archive werden als virtuelle Dateisysteme dargestellt und bieten alle üblichen Menüoptionen von Midnight Commander. Zeigen Sie den HEADER mit F3 an. Zeigen Sie die Archivstruktur mit den Cursortasten und der Eingabetaste an. Kopieren Sie Archivkomponenten mit F5.
KDE bietet das Werkzeug kpackage als Front-End für rpm an. Ein Paket-Manager mit allen Funktionen ist als YaST-Modul verfügbar (siehe Kapitel Installieren bzw. Entfernen von Software (↑Start)).