Installierte RPM-Pakete mit package-cleanup analysieren und bereinigen

Als ich neulich beim Installieren von Kernel-Updates auf eine "vollgelaufene" /boot-Partition gestoßen bin, habe ich einen eleganten Weg gesucht, alte Kernel zu entfernen.

Natürlich kann man sich auch manuell durch die RPM-Datenbank arbeiten und die aktuellen Version von einer Löschung ausschließen, aber das ist weder komfortabel noch elegant:

1# yum remove `rpm -qa|grep kernel|grep -v $(uname -r)|tr "n" " "`

Auf RPM-basierenden Distributionen, die YUM oder DNF verwenden, steht mit package-cleanup ein Tool zur Verfügung, welches die RPM-Datenbank analysieren und bereinigen kann. Mit dem folgenden Kommando kann man ganz komfortabel alle alten Kernel bis auf den aktuellen entfernen:

1# package-cleanup --oldkernels --count 1 -y
2--> Transaktionsprüfung wird ausgeführt
3---> Paket kernel.x86_64 0:3.10.0-229.11.1.el7 markiert, um gelöscht zu werden
4---> Paket kernel.x86_64 0:3.10.0-229.14.1.el7 markiert, um gelöscht zu werden
5---> Paket kernel.x86_64 0:3.10.0-327.3.1.el7 markiert, um gelöscht zu werden
6--> Abhängigkeitsauflösung beendet
7...

Durch Anpassung des --count Parameters lassen sich auch ältere Kernel aufheben - z. B. 2 für den aktuellen und vorherigen.

Dieses Verhalten kann man auch in der YUM-Konfiguration definieren, um zukünftige Fehler dieser Art zu vermeiden:

1# vi /etc/yum.conf
2[main]
3...
4installonly_limit=1
5
6ESC ZZ

Der Wert der Variable ist durch die Anzahl an Paketrevisionen, die aufbewahrt werden sollen, zu ersetzen - also beispielsweise wieder 2 für den aktuellen und vorherigen Kernel.

Das Programm bietet noch weitere Funktionen zur Analyse und Bereinigung der RPM-Datenbank, einige Beispiele:

Parameter Erklärung
--problems Auflisten von Abhängigkeitsproblemen in der RPM-Datenbank
--orphans Auflisten von installierten, aber nicht mehr in der Software-Quelle verfügbaren, Paketen
--dupes --cleandupes Duplikate in der Datenbank erkennen (--dupes) und bereinigen (--cleandupes)
--leaves Entfernen von "leaf nodes" - also Paketen, die nicht von anderen Paketen referenziert werden

Das folgende Beispiel listet "leaf nodes" auf:

1# package-cleanup --leaves
2glib2-devel-2.42.2-5.el7.armv7hl
3libidn-devel-1.28-4.el7.armv7hl
4libxml2-devel-2.9.1-6.el7.2.armv7hl

Bevor die Pakete gelöscht werden, gilt es zu überprüfen, ob diese wirklich nicht mehr benötigt werden. In dem Beispiel handelt es sich um Entwicklungsdateien, die für das Übersetzen eines Programms installiert wurden. Diese Pakete werden deswegen nicht als Abhängigkeit definiert - aber eventuell soll in Zukunft eine neue Version der Software übersetzt werden? 😉

Das nächste Beispiel listet installierte Pakete, die nicht in den aktuell verwendeten Software-Quellen enthalten sind, auf:

1# package-cleanup --orphans
2m2crypto-0.21.1-15.el7.armv7hl

Der letzte Aufruf listet eventuelle Abhängigkeitsprobleme in der Datenbank auf:

1# package-cleanup --problems
2Package libxml2-devel-2.9.1-6.el7.2.armv7hl hat fehlende Abhängigkeiten zu xz-devel

Hier wurde ein RPM-Paket offensichtlich außerhalb YUM manuell installiert - und eine fehlerhafte Abhängigkeit generiert.

Übersetzungen: