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 -q:

rpm --query bridge-utils

Welche Dateien wird eine RPM-Datei installieren?

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

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:

yumdownloader --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

Error in POSTIN scriptlet in rpm package qemu-guest-agent.

Das deutet auf eine korrupte rpm-Datenbank hin:

dnf history
error: rpmdb: BDB0113 Thread/process 258084/139857857010560 failed: BDB1507 Thread died in Berkeley DB library
error: db5 error(-30973) from dbenv->failchk: BDB0087 DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db5 -  (-30973)
error: cannot open Packages database in /var/lib/rpm
Error: Error: rpmdb open failed

So wird das Problem behoben:

mkdir /var/lib/rpm/backup
cp -a /var/lib/rpm/__db* /var/lib/rpm/backup/
rm -f /var/lib/rpm/__db.[0-9][0-9]*
rpm --quiet -qa
rpm --rebuilddb
dnf clean all

Built on 2023-03-17