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.