RPM

Siehe auch

Der RPM Package Manager (wobei RPM ursprünglich „Red Hat Package Manager“ bedeutete) ist ein initial von Red Hat entwickeltes Paketverwaltungs-System. RPM bezeichnet das Paketformat an sich und alle nötigen Programme, um RPM-Pakete zu erstellen und verwalten. yum und dnf sind demnach erweiterte rpm-Tools, um RPM-Dateien aus RPM-Repositories (Datenbanken im weitesten Sinne) herunterzuladen, zu installieren und dabei Paket-Abhängkeiten aufzulösen.

Umgang mit RPM

Paket entfernen:

rpm --erase packagename

Paket nur aus der RPM-Datenbank entfernen:

rpm --erase --justdb packagename

Wer von rpm wissen möchte, ob ein Paket bereits installiert wurde, verwendet den Parameter --query:

rpm --query bridge-utils

Welche Dateien stecken in einem RPM-Paket?

rpm --query --list --package packagename.rpm

Prüfe die installierten Dateien gegen die ursprüngliche Spezifikation aus dem RPM-Paket:

rpm --verify openssh-server
SM5DLUGTP  c /etc/ssh/sshd_config
S.5....T.  c /etc/sysconfig/sshd
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
D Device major/minor number mismatch
L readLink(2) path mismatch
U User ownership differs
G Group ownership differs
T mTime differs
P caPabilities differ

c %config configuration file.
d %doc documentation file.
g %ghost file (i.e. the file contents are not included in the package payload).
l %license license file.
r %readme readme file.

Owner/Group und Permissions auf die ursprüngliche Spezifikation aus dem RPM-Paket zurücksetzen:

rpm --setugids openssh-server
rpm --setperms openssh-server

Wie extrahiert man die Dateien aus einem RPM, ohne sie zu installieren? Durch Umwandlung in ein .tgz- oder in ein cpio-Archiv, wobei erstes bevorzugt wird.

# get the rpm file
rpm2archive packagename.rpm; tar xvz packagename.rpm.tgz
rpm2cpio packagename.rpm | cpio --extract --make-directories --preserve-modification-time --verbose

So zieht man die Sourcen eines Paketes, beispielsweise von Nano:

# RHEL 7
yumdownloader --source nano

# RHEL 8+
dnf download --source nano

rpm2archive nano-2.3.1-10.el7.src.rpm
tar xvz nano-2.3.1-10.el7.src.rpm.tgz

Changelog zu einem Paket anschauen:

rpm --query --changelog curl

Wer wissen möchte, welche Dateien ein Paket mitliefert, kann repoquery verwenden:

yum -y install yum-utils
repoquery --list packagename

Wer wissen möchte, welche Abhängigkeiten benötigt und installiert werden, nutzt:

repoquery --requires --resolve packagename

Liste alle installierten Pakete auf, die nicht vom CentOS-Projekt, sondern von Drittanbietern stammen:

rpm --query --all --queryformat '%{name} %{vendor}\n' | grep -Ev 'CentOS|none'

Troubleshooting

The GPG keys listed for the "" repository are already installed but they are not correct for this package., Error: GPG check FAILED

Repo-Seite des Lieferanten besuchen und schauen, ob es eine Troubleshooting-Sektion gibt - meistens hat es seinen Grund, dass ein GPG-Key geändert wurde.

Oder:

dnf clean all
rm -rf /var/cache/dnf/*

# search for bad repo key
rpm --query gpg-pubkey --queryformat '%{name}-%{version}-%{release} --> %{summary}\n'

rpm --erase $BAD_REPO_KEY
rpm -vv --import https://example.com/path/to/GOOD_REPO_KEY
dnf repolist
Error in POSTIN scriptlet in rpm package, error: rpmdb: damaged header retrieved, error: cannot open Packages database in /var/lib/rpm

Das deutet auf eine korrupte rpm-Datenbank hin. Backup der DB anlegen:

cp --archive /var/lib/rpm /tmp

Datenbank testweise abfragen und nur Fehler anzeigen:

rpm --query --all > /dev/null

Datenbank-Indizes löschen:

rm /var/lib/rpm/__db*

DB-Dateien verifizieren - ist beispielsweise /var/lib/rpm/Packages als üblicher Verdächtiger defekt? Sonst für jede Datei einzeln durchgehen:

/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

Bemerkung

/usr/lib/rpm/rpmdb_verify /var/lib/rpm/* funktioniert NICHT, Fehler werden so nicht erkannt.

Ja, ist defekt. /var/lib/rpm/Packages umbenennen:

mv /var/lib/rpm/Packages /var/lib/rpm/Packages.broken

Package-Datei neu bauen:

/usr/lib/rpm/rpmdb_dump /var/lib/rpm/Packages.broken | /usr/lib/rpm/rpmdb_load /var/lib/rpm/Packages

DB-Dateien nochmals verifizieren:

/usr/lib/rpm/rpmdb_verify /var/lib/rpm/Packages

Auf Fehler testen und DB neu aufbauen:

rpm --query --all > /dev/null
rpm --rebuilddb  # deletes (!) /var/lib/rpm and rebuilds it

Built on 2024-11-18