Großreinemachen: Entsorgen alter Debian Paketreste

Es gibt ja viele Gründe einmal die Kommandozeile zu besuchen. Für mich ist das nach dem Editor fast schon die Hauptarbeitsumgebung. Ein schönes Beispiel für den Einsatz der "Shell" ist zum Beispiel das Großreinemachen alter Paketreste...

Durch das Zurückportieren (engl. "backports") und Bauen von Debian-Paketen sammelt sich so einiges an Resten von Paketen an. Das ständige Installieren und Deinstallieren bringt das so mit sich. Dabei kennt Debian die Möglichkeit, Pakete auch zusammen mit den Konfigurationsdaten zu deinstallieren. Die grafischen Tools machen einem das aber nicht immer so einfach.

Manchmal ist es interessant die geänderten Konfigurationsdateien zu behalten. wenn man ein Paket deinstalliert verliert man auf diese Weise nicht seine Änderungen. So gesehen macht diese "Einschränkung" durchaus Sinn.

Mit dem Kommandozeilenprogramm dpkg kann man sich die Liste aller Pakete der lokalen Paketdatenbank anzeigen lassen. Hat man zum Beispiel das Paket von Samba mit einer GUI wie Synaptic deinstalliert, dann könnte die (gekürzte) Ausgabe dieser Liste so aussehen:

$ dpkg -l
...
rc  samba                       4.1.17  all  SMB/CIFS-Datei-, ...
...
ii  joede-latex-prjdoc          0.3-2   all  LaTeX class for writing project documentation
ii  joede-meta-standard-fonts   1.0-5   all  Joedes personal metapackage for standard fonts
ii  joede-meta-workstation      1.0-5   all  Joedes personal metapackage for workstations
ii  joede-wallpaper-collection  1.0-2   all  Joergs personal wallpaper for 1920x1080
...

Das "ii" am Anfangt einer Zeile zeigt, dass ein Paket installiert ist. Das "rc" vor dem Paket samba zeigt an, dass das Paket entfernt wurde, dass aber Konfigurationsdateien (die besagten "Reste") übrig geblieben sind.

Mit ein bisschen grep voodoo kann man die Ausgabe auf die Zeilen mit "rc" am Anfang reduzieren.

$ dpkg -l | grep '^rc'
...
rc  samba                       4.1.17  all  SMB/CIFS-Datei-, ...
...

Wenn man jetzt noch das "schweizer Textverdauungsmesser" awk hinzunimmt, dann kann man die zweite Textspalte aus der Liste herausschneiden.

$ dpkg -l | grep '^rc' | awk '{print $2}'
...
samba
...

Das Beispiel oben zeigt die Ausgabe. Diese Kommandozeile macht nichts kaputt sondern zeigt lediglich etwas an. Statt awk könnte man auch das Tool cut mit der Option -f benutzen. Das könnt ihr gerne als Hausaufgabe machen. Tipp: schaut euch dann auch die Option -d an.

Und jetzt zur "heißen Phase". Um die Liste als Parameter an ein Programm zu übergeben gibt es mindestens zwei Wege (wir sind ja unter Unix). Zum einen könnte man das Programm xargs benutzten, zum anderen die $() Klammerung der Shell. Ich verwende hier letztere Methode, da die Aufrufreihenfolge einfacher zu sehen ist.

Statt die Liste zu speichern und alle Einträge in eine Zeile zu verschieden kann man die Befehlskette, die die Liste erzeugt, einfach in besagte Klammern packen. Dann macht die Shell den Rest.

Jetzt muss man nur noch den Befehl zum Aufräumen kennen. Unter Debian ist dafür das Tool apt-get zuständig. Übergibt man hier die Option purge, dann werden (anders als mit remove) alle Pakete und deren Konfigurationsdaten restlos entsorgt. Da wir zuvor filtern, sind alle Pakete in der Liste nicht installiert, sodass nichts Schlimmes passieren sollte.

Am Ende sieht der komplette Aufruf so aus.

$ sudo apt-get purge $(dpkg -l | grep '^rc' | awk '{print $2}')

Die Anwendung erfolgt auf eigenes Risiko. ;-) Wenn ihr ganz sicher gehen wollt, das nichts unbeabsichtigtes entsorgt wird, dann könnt ihr die Eingabe aus Beispiel-3 als Probelauf eingeben.

Tipp: Manchmal kommt es vor, dass Pakete installiert bleiben, die man garnicht selbst installiert hat. Dies kann passieren, wenn Pakete als Abhängigkeit oder Empfehlung von anderen Paketen mit installiert wurden. Diese Pakete werden eigentlich nicht mehr benötigt und können auch entsorgt werden. Dafür kennt apt-get die Option autoremove. Wenn man also ganz gründlich Reinemachen will, dann kann man vor dem Purge oben noch sudo apt-get autoremove ausführen.

Wer sich noch viel mehr Spielarten zu diesem Punkt ansehen möchte, findet unter How to purge previously only removed packages? eine ordentliche Sammlung.

So, das war's mal wieder.

Comments