The Geek Diary

Softwarepflege mit RPM (Red Hat Package Manager)

RPM ist ein leistungsfähiger Software-Manager, mit dem einzelne Softwarepakete erstellt, installiert, abgefragt, verifiziert, aktualisiert und deinstalliert werden können. Ein RPM-Paket besteht aus einem Archiv von Dateien und Paketinformationen wie Name, Version, einer Beschreibung und Informationen über Abhängigkeiten von anderen RPM-Paketen.

RPM ist mehr als ein Red Hat-spezifisches Werkzeug. Viele andere moderne Distributionen, wie Ubuntu und SuSE, verwenden RPM ebenfalls. Zu den Vorteilen der Verwendung von RPM gehören:

  • Vereinfachte Softwareverteilung, Installation, Upgrade und Entfernung
  • Garantiert, dass:
    • Voraussetzungssoftware wird auf dem System installiert.
    • Versionen der Vorraussetzungssoftware bleiben kompatibel.
    • Lokal geänderte Konfigurationsdateien werden bei der Aktualisierung des RPM nicht verschlüsselt.
    • Lokal geänderte Konfigurationsdateien werden mit einem „.rpmsave“ gespeichert, wenn das Paket später gelöscht wird.
  • Ermöglicht die Zertifizierung, dass installierte Software nicht verändert, modifiziert, beschädigt oder in irgendeiner Weise verändert wurde.

RPM hält Informationen über installierte Pakete im Verzeichnis „/var/lib/rpm“.

Bestandteile des RPM-Tools sind:

  • Eine benutzerdefinierte Datenbank, die Informationen über alle auf dem System installierte Software enthält, die aus den einzelnen RPMs gesammelt werden.
  • Eine ausführbare Datei „/bin/rpm“.
  • Im Internet zugängliche Repositories mit verfügbaren RPM-Paketen.

Typen von RPM-Paketen

RPM-Pakete gibt es in zwei Kategorien: Quell- und Binärpakete.

Ein Quell-RPM ist immer daran zu erkennen, dass der Dateiname mit der Zeichenfolge „.src.rpm“ endet. In einem Quell-RPM befinden sich nicht nur die ursprünglichen Programmquellcode-Dateien, sondern auch Skripte, die es ermöglichen, den Code automatisch zu rekompilieren, automatisch zu installieren und automatisch zu entfernen. Ein Quell-RPM enthält keine ausführbaren Dateien für den Endbenutzer. Normalerweise sind nur Entwickler an einem Quell-RPM interessiert.

Ein binäres RPM enthält die Endbenutzerkomponenten eines RPMs. Binäre RPM-Dateinamen identifizieren die Host-Architektur für den Inhalt. Beispiel: Die binäre RPM-Datei:

bash-3.1-16.1.x86_64.rpm

Sie enthält Dateien, die nur auf einer 64-Bit Intel X86-Architektur-CPU verwendet werden können. Andere gängige Architekturwerte sind „i386“ für 32-Bit-Intel-Hosts. Einige binäre RPMs können auf jeder CPU-Architektur installiert werden, da ihre Dateien auf jedem Host funktionieren; ein Beispiel für diese „.noarch.rpm“-Pakete ist das RPM „tzdata“, das Informationen über Weltzeitzonen enthält. Um Ihr System mit der neuesten Version eines Pakets zu aktualisieren, benötigen Sie das neueste binäre RPM dafür.

RPM-Namensschema

Jedes RPM-Paket ist in einer einzigen Datei enthalten. Der Dateiname hat mehrere Felder, um den Inhalt des Pakets vollständig zu identifizieren. Obwohl die RPM-Tools selbst nicht auf den Dateinamen angewiesen sind, sollten Sie die Konvention der Dateinamen verstehen, damit Sie das richtige Paket identifizieren oder herunterladen können. Hier ist ein Beispiel für einen RPM-Dateinamen:

bash-3.1-16.1.x86_64.rpm

Dieses RPM ist für die BASH-Shell („/bin/bash“). Der Dateiname besteht aus mehreren Teilen:

--..rpm

wobei:

    der Name des Programms oder Pakets ist. Er wird normalerweise vom Autor des Programms vergeben. In unserem Beispiel haben die Entwickler beschlossen, ihr Produkt „bash“ zu nennen, weil sie es für amüsant hielten.

  • Version] gibt an, welche Ausgabe der Software dieses RPM enthält. Die Nummer wird vom Autor des Programms zugewiesen. Anhand der Nummer kann man feststellen, welche Version der Quellen des Autors verwendet wurde, um das RPM zu erstellen.
  • liefert die Editionsnummer der RPM-Datei selbst und nicht die Version der Quelldateien des Autors. Ein aktualisiertes RPM kann ausgegeben werden, um eine gepatchte Version der ursprünglichen Software des Autors bereitzustellen. Der Patch muss nicht vom ursprünglichen Entwickler stammen, so dass die RPM anstelle der .
  • den Inhalt der RPM beschreibt und angibt, ob diese Datei den Produktquelltext (eine „.src.rpm“), architekturunabhängige Dateien (eine „.noarch.rpm“) oder Dateien, die nur auf einem bestimmten Host-Typ installiert werden können (eine „.sh.rpm“ funktioniert nur auf einem STRONGHOLD Embedded Prozessor).
Hinweis: Die wird vom Originalautor kontrolliert und die wird von demjenigen kontrolliert, der das RPM erstellt hat.

Versionen von RPMs verstehen

Die RPM und die Felder sind nicht immer streng numerisch und können neben normalen Ziffern auch andere Zeichen enthalten. Es ist üblich, sowohl eine Version „10“ als auch eine „10a“ Version desselben Pakets zu sehen. Manchmal kann es schwierig sein, die neueste Version zu finden. Hier ist, wie RPM selbst intern Versions- und Versionsnummern vergleicht:

1. Entfernen Sie das Präfix und das Suffix „..rpm“. Zum Beispiel:
„bash-3.1-16.1.x86_64.rpm“ wird zu „3.1-16.1“ und „bash-3.1-16.5a.1.x86_64.rpm“ wird zu „3.1-16.5a.1“

2. Vergleichen Sie die verbleibenden Zeichenfolgen Zeichen für Zeichen, von links nach rechts, bis Sie auf eine Ziffer stoßen. Wenn sich die Zeichen unterscheiden, ist das spätere Zeichen in der Sortierfolge die neuere RPM.

3. Wenn eine Ziffer gefunden wird, wandeln Sie die gesamte Ziffernfolge in eine einzelne Binärzahl um. In unserem Beispiel werden die beiden Zeichen „16“ zu einem Wert von sechzehn (16) kombiniert. Die sich daraus ergebenden Binärwerte werden verglichen, und der größere Wert ist die aktuellere Drehzahl. Ein RPM mit einem a von „0010“ ist also aktueller als eines mit einem a von „9“.

Die Schritte 2 und 3 werden so lange wiederholt, bis ein Unterschied auftritt.

Installieren und Entfernen von Dateien

Hinweis: Normalerweise darf nur ein RPM auf einmal installiert werden.

Spätere Versionen werden normalerweise mit der RPM-Funktion „-U“ (Update) anstelle der RPM-Funktion „-i“ installiert. Häufige Ausnahmen von der „Nur-ein-RPM“-Regel sind die Kernel-RPMs. Auf einem System sind in der Regel mehrere Kernel-Versionen installiert; RPM verfügt über eine Liste der RPMs, die mehrere Versionen installiert haben können. Um eine Version zu löschen, wenn mehrere installiert sind, müssen Sie den Paketnamen und die Version vollständig angeben.

Bei der x86_64-Architektur ist es üblich, sowohl die 32-Bit „.i386“ als auch die 64-Bit „.x86_64“ RPM-Pakete zu installieren, um sowohl 32-Bit als auch 64-Bit-Anwendungen zu unterstützen. Normalerweise zeigt RPM die Architektur eines Pakets bei einer Abfrage nicht an, aber Sie können sie manuell anzeigen lassen.

Installation und Entfernung

# rpm -i --install (install new RPM; error if already installed)# rpm -U --upgrade (delete existing RPM, if any; install new)# rpm -F --freshen (update RPM only if package already installed)# rpm -e --erase (remove, delete, expunge)

Gemeinsame Optionen
Ausgabe: -v (verbose – Dateiname), -h (hash)
Vorbedingungen: -nodeps, -replacefiles, -force (HIER VORSICHT !!!)
Verschieben: -excludepath, -prefix, -relocate, -badreloc, -root
URL-Unterstützung: ftp, http

Beispiele:

# rpm -ivh binutils-2.11.90.0.8-12.i386.rpm# rpm -Uvh finger-0.17-9-i386.rpm# rpm -Fvh ftp://updates.redhat.com/current/i386/*.rpm# rpm -e diffutils# rpm -e kernel-enterprise-2.4.9-e.12

Hinweis: Verwenden Sie niemals die Option „-U“, um einen neuen Kernel-RPM zu installieren. Die Aktualisierungsfunktion „-U“ löscht zunächst das aktuelle RPM aus dem System und versucht dann, das neue RPM zu installieren. Jedes Problem, das verhindert, dass das neue RPM installiert werden kann, führt dazu, dass das System nicht mehr gestartet werden kann. Dies ist nicht erwünscht, verwenden Sie daher immer den Schalter „-i“, um ein Kernel-RPM zu installieren.

Abfragen (Pakete und/oder Informationen)

Verwenden Sie eine Abfrage für Informationen über installierte Pakete. Sie können alle installierten Pakete oder ein einzelnes installiertes Paket abfragen. Sie können auch herausfinden, welches RPM eine bestimmte Datei liefert.

# rpm -q # rpm -qa (all installed packages)# rpm -q package_name# rpm -qf (filename)# rpm -qp (package filename)

Informationen
Standard (Paketname)
-i: allgemeine Informationen
-l: Dateiliste

Beispiele:

# rpm -qa# rpm -q kernel -i (information)# rpm -q kernel -l (files contained in package)# rpm -q kernel --requires (prereqs)# rpm -q kernel --provides (capabilities provided by package)# rpm -q kernel --scripts (scripts run during installation and removal)# rpm -q kernel --changelog (revision history)# rpm -q kernel -queryformat format (rpm --querytags for list of options)

Hinweis: Bei der Suche nach einem bestimmten RPM-Paket, wenn der genaue Name nicht bekannt ist, wird in der Regel eine Befehlspipeline wie:

$ rpm -qa | grep foo

verwendet. Spätere Versionen des RPM-Werkzeugs ermöglichen dies kurz und bündig wie folgt:

$ rpm -qa '*foo*'

Abfragen – Überprüfung (Dateien)

Die RPM-Datenbank enthält viele Attribute über jede einzelne Datei, die von einem RPM installiert wird. Sie können den aktuellen Status der Datei mit den Informationen vergleichen, die RPM bei der Installation des Pakets katalogisiert hat.

# rpm -V package_name# rpm -Va (verify all)# rpm -Vf (filename)# rpm -Vp (package filename)

Hinweis: Viele Linux-Distributionen enthalten ein „prelink“-RPM, das versucht, die Zeit zu verkürzen, die benötigt wird, um eine Anwendung zu starten, die eine gemeinsam genutzte Bibliothek verwendet (die meisten Anwendungen verwenden mindestens eine gemeinsam genutzte Bibliothek und möglicherweise Dutzende), indem spezielle Informationen direkt in die Programmdatei einer Anwendung hinzugefügt werden.

Durch das Hinzufügen dieser Informationen können Anwendungen zwar schneller gestartet werden, aber die Dateiänderungen machen die meisten Dateiattribute in der RPM-Datenbank ungültig, wie z. B. das Datum der letzten Dateiänderung, die Dateigröße und die MD5-Prüfsumme der Datei.

Abfragen – Überprüfung (Pakete)

# rpm -import /mnt/cdrom/RPM-GPG-KEY# rpm -q gpg-pubkey# rpm --checksig m4-1.4.1-11.i386.rpm

Beispiele:

# rpm -qf /path/filename (what package owns filename)# rpm -qf /path/filename -i (what does it do)# rpm -qp m4-1.4.1-11.i386.rpm -l (files in m4)# rpm -qp m4-1.4.1-11.i386.rpm --requires (prereqs needed to install m4)# rpm -q --whatprovides glibc.so (what package provides requisite library)

Reparieren der RPM-Datenbank

Das RPM-Tool verwendet eine eigene, benutzerdefinierte Datenbankimplementierung, um seine Informationen zu speichern. Manchmal kann diese Datenbank beschädigt werden; zu den Symptomen gehört die Behauptung, dass ein installiertes RPM-Paket fehlt; oder Versuche, ein RPM zu aktualisieren, bleiben einfach hängen. Wenn Ihre RPM-Datenbank hängt oder beschädigt ist, können Sie versuchen, sie mit diesen Befehlen zu reparieren. Es wird nicht garantiert, dass dieser Prozess funktioniert.

Für diese Schritte müssen Sie mit Superuser-Rechten (auch bekannt als „root“) angemeldet sein. Die Befehle können direkt in ein Root-Terminalfenster kopiert und eingefügt werden.

1. Stellen Sie sicher, dass auf Ihrem System keine RPM-Prozesse mehr laufen. Verwenden Sie den Befehl ps, um sie zu identifizieren. Use the kill command to terminate any „rpm“ processes you find; a „kill -9“ may be necessary.

2. Delete the lock files that RPM uses:

# rm -f /var/lib/rpm/__db*

3. If you were experiencing a hanging „rpm“ command, try it again. If it works, you are finished. If not, perform Step #1 and #2 again. Then proceed to the next step.

4. Make a backup of your RPM database:

# cd /var/lib# mkdir rpm-backup# rsync -av ./rpm/. ./rpm-backup/.

5. Rebuild your RPM database:

# rpm -vv --rebuilddb > /tmp/rpmrebuilddb.log 2>&1

6. Retry your failed RPM command.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.