Paketverwaltung mit RPM unter Linux

Red Hat Enterprise LinuxRed Hat Enterprise LinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Labor lernen Sie die Grundlagen der Verwaltung von Softwarepaketen auf RPM-basierten Linux-Distributionen mit dem leistungsstarken Befehlszeilen-Tool rpm. Sie werden praktische Erfahrungen mit wesentlichen Aufgaben der Paketverwaltung sammeln, einschließlich der Abfrage detaillierter Paketinformationen, der Überprüfung der Integrität installierter Pakete und der Inspektion des Inhalts von RPM-Dateien.

In den einzelnen Schritten verwenden Sie spezifische rpm-Befehle, um herauszufinden, zu welchem Paket eine Datei gehört, Paketabhängigkeiten und Konfigurationsdateien aufzulisten und nach umgekehrten Abhängigkeiten zu suchen. Sie lernen auch, wie Sie eine Paketentfernung sicher simulieren, um deren Auswirkungen zu verstehen, und wie Sie den Inhalt einer RPM-Paketdatei vor der Installation mit Tools wie rpm2cpio und cpio untersuchen.

Grundlegende Paketinformationen mit rpm -qi und rpm -qf abfragen

In diesem Schritt lernen Sie, wie Sie Informationen über installierte Pakete mit dem Red Hat Package Manager (rpm) abfragen. rpm ist ein leistungsstarkes Befehlszeilen-Tool zur Verwaltung von Software auf RPM-basierten Linux-Distributionen wie CentOS, Fedora und RHEL. Wir konzentrieren uns auf zwei grundlegende Abfrageoptionen: -qi für detaillierte Paketinformationen und -qf, um herauszufinden, zu welchem Paket eine bestimmte Datei gehört.

Zuerst inspizieren wir die Details eines Pakets, das bereits auf Ihrem System installiert ist. Die bash-Shell ist eine Kernkomponente des Systems und somit ein perfektes Beispiel. Das Flag -q steht für 'query' (abfragen) und das Flag i steht für 'information' (Informationen).

Führen Sie den folgenden Befehl in Ihrem Terminal aus, um Informationen über das bash-Paket abzufragen:

rpm -qi bash

Sie sehen eine detaillierte Ausgabe, die verschiedene Attribute des Pakets auflistet. Die Ausgabe sieht ähnlich wie folgt aus (Versionsnummern und Daten können variieren):

Name        : bash
Version     : 4.4.20
Release     : 5.el8
Architecture: x86_64
Install Date: <some_date>
Group       : System Environment/Shells
Size        : 4989189
License     : GPLv3+
Signature   : RSA/SHA256, <some_date_and_time>, Key ID <some_key_id>
Source RPM  : bash-4.4.20-5.el8.src.rpm
Build Date  : <some_date>
Build Host  : <some_build_host>
Relocations : (not relocatable)
Vendor      : CentOS
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne-Again Shell
Description :
The GNU Bourne-Again Shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C
shell (csh).  Most sh scripts can be run by bash without
modification.

Diese Ausgabe liefert eine Fülle von Informationen, einschließlich der Version des Pakets, einer Zusammenfassung seines Zwecks und einer detaillierteren Beschreibung.

Stellen Sie sich nun vor, Sie haben eine Datei auf Ihrem System, wie die ausführbare bash-Datei unter /usr/bin/bash, und Sie möchten wissen, welches Paket sie installiert hat. Dies ist eine häufige Aufgabe bei der Systemprüfung oder Fehlerbehebung. Hierfür können Sie die Flags -qf verwenden, wobei f für 'file' (Datei) steht.

Führen Sie den folgenden Befehl aus, um herauszufinden, welches Paket die Datei /usr/bin/bash besitzt:

rpm -qf /usr/bin/bash

Der Befehl gibt den vollständigen Namen des Pakets zurück, das diese Datei bereitstellt:

bash-5.1.8-9.el9.x86_64

Wie Sie sehen, identifiziert das System korrekt, dass /usr/bin/bash aus dem bash-Paket stammt, was mit den zuvor gefundenen Informationen übereinstimmt. Sie können diese Flags sogar kombinieren, um direkt Informationen über das Paket zu erhalten, das eine Datei besitzt, indem Sie rpm -qif /usr/bin/bash ausführen.

Paketabhängigkeiten und Konfigurationsdateien mit rpm -qR und rpm -qc auflisten

In diesem Schritt erkunden Sie rpm weiter, indem Sie lernen, wie Sie die Abhängigkeiten eines Pakets und seine zugehörigen Konfigurationsdateien auflisten. Das Verständnis von Abhängigkeiten ist entscheidend, da die meisten Softwarepakete korrekt funktionieren müssen. Das Wissen, wo sich Konfigurationsdateien befinden, ist für die Systemadministration und Anpassung unerlässlich.

Beginnen wir damit, herauszufinden, welche anderen Pakete oder Fähigkeiten das bash-Paket benötigt. Dazu verwenden wir das Flag -qR (oder --requires). Das R steht für 'requires' (benötigt).

Führen Sie den folgenden Befehl aus, um die Abhängigkeiten für bash anzuzeigen:

rpm -qR bash

Die Ausgabe ist eine Liste von Paketen und Systemfähigkeiten, von denen bash abhängt. Diese Liste kann ziemlich lang sein.

/bin/sh
config(bash) = 4.4.20-5.el8
filesystem >= 3
glibc
info
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.28)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
...
rtld(GNU_HASH)

Diese Ausgabe zeigt, dass bash das Paket glibc (das die C-Bibliothek libc.so.6 bereitstellt), das Paket filesystem und andere systemweite Komponenten benötigt.

Als Nächstes suchen wir die Konfigurationsdateien, die als Teil des bash-Pakets installiert wurden. Dies ist nützlich, wenn Sie das Standardverhalten der Shell für neue Benutzer ändern müssen. Das Flag -qc wird hierfür verwendet, wobei c für 'configfiles' (Konfigurationsdateien) steht.

Führen Sie diesen Befehl aus, um die Konfigurationsdateien für bash aufzulisten:

rpm -qc bash

Die Ausgabe zeigt die vollständigen Pfade zu den Konfigurationsdateien:

/etc/skel/.bash_logout
/etc/skel/.bash_profile
/etc/skel/.bashrc

Diese Dateien in /etc/skel sind Vorlagendateien, die in das Home-Verzeichnis eines neuen Benutzers kopiert werden, wenn das Benutzerkonto erstellt wird.

Sie können auch Flags kombinieren, um die Konfigurationsdateien zu finden, die sich auf einen bestimmten Befehl beziehen. Um beispielsweise die Konfigurationsdateien anzuzeigen, die vom passwd-Befehl verwendet werden, können Sie -qcf verwenden. Dies weist rpm an, zuerst das Paket für die Datei zu finden (-f /usr/bin/passwd) und dann seine Konfigurationsdateien aufzulisten (-c).

rpm -qcf /usr/bin/passwd

Dieser Befehl zeigt die Konfigurationsdateien an, die mit dem passwd-Dienstprogramm verbunden sind:

/etc/pam.d/passwd

Dies ist eine leistungsstarke Methode, um schnell zu identifizieren, welche Dateien Sie möglicherweise bearbeiten müssen, um das Verhalten eines Befehls zu ändern.

Paketintegrität und Dateiänderungen mit rpm -V überprüfen

In diesem Schritt lernen Sie, wie Sie die Integrität eines installierten Pakets mit rpm -V (oder rpm --verify) überprüfen. Dieser Befehl ist ein wichtiges Werkzeug für Sicherheit und Fehlerbehebung. Er prüft die von einem Paket installierten Dateien anhand der in der RPM-Datenbank gespeicherten Informationen, wie z. B. Dateigrößen, Berechtigungen und Prüfsummen. Dies ermöglicht es Ihnen, unbefugte oder versehentliche Änderungen an Systemdateien zu erkennen.

Zuerst stellen wir sicher, dass ein paar Dienstprogramme, lsscsi und at, auf dem System installiert sind. Wir werden sie für unsere Verifizierungstests verwenden.

sudo dnf install -y lsscsi at

Nun überprüfen wir das Paket lsscsi. Da wir es gerade installiert haben und keine Änderungen vorgenommen haben, sollte die Verifizierung erfolgreich sein. Eine erfolgreiche Verifizierung erzeugt keine Ausgabe.

rpm -V lsscsi

Wie erwartet kehrt die Befehlszeile ohne Meldung zurück, was darauf hinweist, dass alle Dateien im Paket lsscsi in ihrem ursprünglichen Zustand sind.

Als Nächstes ändern wir absichtlich eine Konfigurationsdatei und sehen, wie rpm -V die Änderung meldet. Wir fügen eine Zeile zur Datei /etc/at.deny hinzu, die zum Paket at gehört. Diese Datei steuert, welchen Benutzern die Verwendung des at-Befehls nicht gestattet ist.

echo "labex" | sudo tee -a /etc/at.deny

Nachdem wir nun eine Datei geändert haben, überprüfen wir das Paket at erneut.

sudo rpm -V at

Dieses Mal erzeugt der Befehl eine Ausgabe, die darauf hinweist, dass eine Änderung erkannt wurde:

S.5....T.  c /etc/at.deny

Lassen Sie uns diese Ausgabe aufschlüsseln:

  • S: Die Dateigröße (Size) hat sich geändert.
  • 5: Die MD5-Prüfsumme hat sich geändert.
  • T: Die Änderungszeit (Modification Time) hat sich geändert.
  • c: Dies kennzeichnet eine Konfigurationsdatei (configuration file).
  • /etc/at.deny: Der Pfad zur geänderten Datei.

Jede Zeichenposition in der 8-Zeichen-Zeichenkette S.5....T. repräsentiert einen anderen Test. Ein . bedeutet, dass der Test bestanden wurde. Diese Ausgabe zeigt deutlich, dass die Konfigurationsdatei /etc/at.deny seit ihrer Installation verändert wurde.

Sie können auch das Paket, das eine bestimmte Datei besitzt, direkt mit den Flags -qVf überprüfen.

sudo rpm -qVf /etc/at.deny

Dieser Befehl erzeugt dieselbe Ausgabe, da er zuerst das Paket findet, das /etc/at.deny besitzt (at), und es dann verifiziert.

Rückwärtsabhängigkeiten prüfen und Paketentfernung simulieren mit rpm -e --test

In diesem Schritt lernen Sie, wie Sie Rückwärtsabhängigkeiten prüfen und die Entfernung eines Pakets sicher simulieren. Während der Befehl rpm -qR anzeigt, was ein Paket benötigt (seine Abhängigkeiten), zeigt rpm -q --whatrequires an, was andere Pakete es benötigen (seine Rückwärtsabhängigkeiten). Dies ist äußerst wichtig zu wissen, bevor Sie ein Paket entfernen, da Sie sonst andere Teile des Systems beschädigen könnten.

Um die Folgen der Entfernung eines Pakets sicher zu überprüfen, können Sie den Befehl rpm -e --test verwenden. Das Flag -e steht für 'erase' (löschen), und das Flag --test weist RPM an, einen Testlauf durchzuführen, ohne tatsächlich Dateien zu löschen.

Beginnen wir mit der Untersuchung eines Kernsystempakets, von dem viele andere Pakete abhängen. Das Paket glibc stellt die GNU C Library bereit, die für fast alle Programme auf einem Linux-System grundlegend ist. Lassen Sie uns prüfen, welche Pakete glibc benötigen.

rpm -q --whatrequires glibc

Die Ausgabe zeigt mehrere Pakete an, die von glibc abhängen:

glibc-common-2.34-168.el9_6.19.x86_64
glibc-langpack-en-2.34-168.el9_6.19.x86_64
libstdc++-11.5.0-5.el9_5.x86_64
glibc-headers-2.34-168.el9_6.19.x86_64
pam-1.5.1-23.el9.x86_64
glibc-devel-2.34-168.el9_6.19.x86_64
nscd-2.34-168.el9_6.19.x86_64

Wie Sie sehen können, hängen viele kritische Systempakete von glibc ab. Lassen Sie uns nun sehen, was passiert, wenn wir versuchen, glibc zu entfernen. Wir verwenden das Flag --test, um sicherzustellen, dass wir es nicht tatsächlich entfernen, was das gesamte System beschädigen würde.

sudo rpm -e --test glibc

Da so viele Pakete glibc benötigen, wird RPM Abhängigkeitsfehler melden und die Entfernung verhindern. Die Ausgabe zeigt eine lange Liste fehlgeschlagener Abhängigkeiten:

error: Failed dependencies:
	glibc = 2.34-168.el9_6.19 is needed by (installed) glibc-common-2.34-168.el9_6.19.x86_64
	glibc = 2.34-168.el9_6.19 is needed by (installed) glibc-langpack-en-2.34-168.el9_6.19.x86_64
	glibc >= 2.34 is needed by (installed) libstdc++-11.5.0-5.el9_5.x86_64
	... (additional dependency errors)

Betrachten wir nun ein Paket mit weniger Abhängigkeiten. Das zuvor installierte Paket lsscsi ist ein Dienstprogramm mit weniger Rückwärtsabhängigkeiten. Lassen Sie uns prüfen, was es benötigt:

rpm -q --whatrequires lsscsi

Sie sollten eine Ausgabe sehen, die anzeigt, dass keine Pakete lsscsi benötigen:

no package requires lsscsi

Da keine Pakete von lsscsi abhängen, können wir die Entfernung sicher simulieren:

sudo rpm -e --test lsscsi

Dieser Befehl sollte ohne Fehler abgeschlossen werden, was darauf hinweist, dass die Entfernung von lsscsi keine anderen Pakete auf dem System beschädigen würde.

Dies zeigt, wie Sie die Auswirkungen der Entfernung eines Pakets vorhersagen und Ihr System durch vorheriges Prüfen der Rückwärtsabhängigkeiten vor Beschädigung schützen können.

RPM-Paketinhalt mit rpm2cpio und cpio inspizieren

In diesem Schritt lernen Sie eine leistungsstarke Methode kennen, um den Inhalt einer RPM-Paketdatei zu inspizieren, ohne sie zu installieren. Dies ist nützlich, um die Dateien zu überprüfen, die ein Paket vor der Installation enthält, oder um eine einzelne Datei aus einem Paket zu extrahieren, um eine beschädigte oder gelöschte Datei wiederherzustellen. Dieser Prozess umfasst zwei Befehle: rpm2cpio, der eine RPM-Datei in ein cpio-Archiv konvertiert, und cpio, das dann Dateien aus diesem Archiv auflisten oder extrahieren kann.

Zuerst benötigen Sie eine tatsächliche .rpm-Datei zur Inspektion. Laden wir die Paketdatei für bash mit dem Paketmanager dnf in Ihr aktuelles Verzeichnis (~/project) herunter. Der Unterbefehl download ruft die Paketdatei ab, ohne sie zu installieren.

sudo dnf download bash

Sie sehen eine Ausgabe, die anzeigt, dass die Datei erfolgreich heruntergeladen wurde. Der Dateiname enthält die Version und die Architektur.

Last metadata expiration check: ...
bash-<version>.<arch>.rpm

Verwenden Sie nun den Befehl ls, um zu bestätigen, dass die .rpm-Datei in Ihrem ~/project-Verzeichnis vorhanden ist:

ls bash-*.rpm

Wenn die RPM-Datei bereit ist, können Sie nun die Befehle rpm2cpio und cpio zusammen verwenden, um ihren Inhalt aufzulisten. Der Befehl rpm2cpio liest die RPM-Datei und gibt ein cpio-Archiv an die Standardausgabe aus. Wir leiten (|) diese Ausgabe dann an den Befehl cpio weiter, der das Archiv von seiner Standardeingabe liest. Das Flag -t für cpio weist es an, die Inhaltsübersicht aufzulisten.

rpm2cpio bash-*.rpm | cpio -t

Dies erzeugt eine lange Liste aller Dateien und Verzeichnisse, die im bash-Paket enthalten sind. Die Ausgabe sieht ungefähr so aus:

.
./etc
./etc/skel
./etc/skel/.bash_logout
./etc/skel/.bash_profile
./etc/skel/.bashrc
./usr
./usr/bin
./usr/bin/bash
./usr/bin/sh
./usr/share
./usr/share/doc
...

Diese Technik gibt Ihnen einen vollständigen Überblick über die Nutzlast eines Pakets und ermöglicht es Ihnen, genau zu sehen, was auf Ihrem System platziert wird, wenn Sie es installieren würden.

Zusammenfassung

In diesem Lab haben Sie gelernt, wie Sie Softwarepakete in einer Linux-Umgebung mit dem RPM-Dienstprogramm verwalten und abfragen. Sie haben damit begonnen, detaillierte Informationen über installierte Pakete mit rpm -qi abzurufen und mit rpm -qf zu identifizieren, zu welchem Paket eine bestimmte Datei gehört. Sie haben auch das Auflisten der Abhängigkeiten eines Pakets mit rpm -qR und das Auffinden seiner Konfigurationsdateien mit rpm -qc geübt, was eine umfassende Ansicht darüber liefert, wie sich ein Paket in das System integriert.

Aufbauend auf diesen Abfragefähigkeiten haben Sie gelernt, die Integrität der Dateien eines installierten Pakets mit rpm -V zu überprüfen, um nach Änderungen zu suchen. Sie haben auch untersucht, wie Sie sicher Rückwärtsabhängigkeiten prüfen und die Entfernung eines Pakets mit rpm -e --test simulieren können, um die potenziellen Auswirkungen zu verstehen, ohne Änderungen vorzunehmen. Schließlich haben Sie die Fähigkeit erworben, den Inhalt einer RPM-Paketdatei vor der Installation zu inspizieren, indem Sie rpm2cpio und cpio verwendet haben, um deren Inhalt zu extrahieren und aufzulisten.