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