8.43. Pakete deinstallieren

Weitaus anspruchsvoller als die Installation eines Pakets ist hingegen deren rückstandsfreie und saubere Entfernung. Dazu zählt nicht nur das Löschen der Dateien des eigentlichen Pakets, sondern auch das Aufräumen und Entsorgen der dazugehörigen Konfigurationsdateien aus Ihrem Linuxsystem.

Wir unterscheiden daher an dieser Stelle fünf Fälle. Fall 1 ist das einfache Deinstallieren eines Pakets, Fall 2 die Recherche, Fall 3 das Entfernen von noch verbliebenen Konfigurationsdateien bereits deinstallierter Pakete sowie als Fall 4 das vollständige Entsorgen von Pakets samt dazugehöriger Konfigurationsdateien in einem einzigen Schritt. In Fall 5 zeigen wir Ihnen, wie sie Pakete für eine bestimmte Architektur entsorgen.

8.43.1. Fall 1: Paket einfach löschen

Dazu dienen die drei Kommandos apt remove Paketname, apt-get remove Paketname und aptitude remove Paketname. Alle Aufrufe entfernen das Paket und ggf. auch alle weiteren Pakete, die davon abhängen. Dabei werden jedoch nur die Daten und die ausführbaren Dateien gelöscht – die dazugehörigen Konfigurationsdateien bleiben unversehrt. Das Vorgehen entspricht dem Aufruf dpkg -r Paketname in der richtigen Reihenfolge der Paketabhängigkeiten. Der nachfolgende Aufruf zeigt das Vorgehen anhand des Pakets cssed für apt-get.

Löschen eines Pakets cssed mittels apt-get

# apt-get remove cssed
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Das folgende Paket wurde automatisch installiert und wird nicht mehr benötigt:
  gcr
Verwenden Sie »apt-get autoremove«, um es zu entfernen.
Die folgenden Pakete werden ENTFERNT:
  cssed
0 aktualisiert, 0 neu installiert, 1 zu entfernen und 16 nicht aktualisiert.
Nach dieser Operation werden 2.052 kB Plattenplatz freigegeben.
Möchten Sie fortfahren [J/n]? J
(Lese Datenbank ... 304082 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von cssed ...
Trigger für man-db werden verarbeitet ...
Trigger für menu werden verarbeitet ...
Trigger für gnome-menus werden verarbeitet ...
Trigger für desktop-file-utils werden verarbeitet ...
#

Ein Knackpunkt stellt die Berücksichtigung der jeweiligen Paketabhängigkeiten dar. Dabei treten mehrere Möglichkeiten auf – bestimmte, zur Löschung vorgesehene Pakete werden von anderer Software noch benötigt, Ersetzungen sind erforderlich oder es entstehen Waisen (Orphans). Bei Möglichkeit eins dürfen die Pakete, die von anderer Software noch benötigt werden, nicht gelöscht werden – die andere installierte Software soll ja trotzdem weiterhin funktionieren. Bei systemrelevanten Werkzeugen in essentiellen Paketen erhalten Sie daher eine zusätzliche, deutliche Warnung (siehe nachfolgendes Beispiel sowie „Paketprioritäten und essentielle Pakete“ in Abschnitt 2.13, „Paket-Priorität und essentielle Pakete“).

Ausgabe einer deutlichen Warnung vor dem Löschen des essentiellen Pakets base-files

# apt-get remove base-files
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut
Statusinformationen werden eingelesen... Fertig
Die folgenden Pakete werden ENTFERNT:
  base-files bash bash-completion bsd-mailx build-essential clisp common-lisp-controller debhelper
  dpkg-dev foomatic-db-engine foomatic-filters grsync grub grub-common grub-pc gt5 libnss-mdns rsync
  virtualbox-ose-guest-source virtualbox-ose-source xindy
WARNUNG: Die folgenden essentiellen Pakete werden entfernt.
Dies sollte NICHT geschehen, außer Sie wissen genau, was Sie tun!
  base-files bash
0 aktualisiert, 0 neu installiert, 21 zu entfernen und 138 nicht aktualisiert.
Nach dieser Operation werden 32,4 MB Plattenplatz freigegeben.
Sie sind im Begriff, etwas potentiell Schädliches zu tun.
Zum Fortfahren geben Sie bitte »Ja, tue was ich sage!« ein.
Abbruch.
#

Möglichkeit zwei ist die Ersetzung durch ein alternatives Paket. Das gelingt dann automatisch, wenn in der Paketbeschreibung als Paketabhängigkeit entweder mehrere Einzelpakete oder ein einzelnes, virtuelles Paket benannt wurden. Aus dieser Liste wird dann eines ausgewählt, um die Paketabhängigkeit zu erfüllen. Bestes Beispiel ist das virtuelle Paket pdf-viewer, welches beispielsweise auf epdfview, evince, okular, xpdf und zathura verweist.

Ersetzung durch ein alternatives Paket. 

ToDo: Beispiel mit Ersetzung durch alternatives Paket

Bei der Möglichkeit drei entstehen Waisen – Pakete, die keine Abhängigkeiten mehr zu anderen Paketen mehr aufweisen. Unter „Umgang mit Waisen“ in Abschnitt 8.44, „Umgang mit Waisen“ beleuchten wir dieses Thema näher.

8.43.2. Fall 2: Suche von Konfigurationsdateien bereits deinstallierter Pakete

Um das zu tun, bedarf es zunächst der Lokalisierung der Pakete, welche zwar gelöscht wurden, aber noch als konfiguriert gelten. Dabei geht es nur um die Konfigurationsdateien (conf files), die sich unter dem Verzeichnis /etc befinden. Dateien in ihrem Homeverzeichnis bleiben von der Löschaktion unberührt.

Die passenden Werkzeuge sind dafür die Kombination aus dpkg mit grep sowie aptitude. APT hat u.E. bislang keinen entsprechenden Schalter dafür.

dpkg rufen Sie dazu zunächst mit der Option -l auf (siehe Abschnitt 8.5, „Liste der installierten Pakete anzeigen und deuten“) und schicken dessen Ausgabe an das Kommando grep weiter. Mit dem regulären Ausdruck "^rc " (mit Leerzeichen am Ende) filtern Sie alle Zeilen aus der Ausgabe heraus, die mit den beiden Buchstaben rc beginnen und von einem Leerzeichen gefolgt werden. Damit erhalten Sie eine Liste aller verbliebenen Konfigurationsdateien, die dpkg einem Paket zuordnen kann.

Suche nach gelöschten, aber noch konfigurierten Paketen mittels dpkg

$ dpkg -l | grep "^rc "
rc  akonadi-backend-mysql 1.7.2-3   all   MySQL storage backend for Akonadi
rc  akonadi-server        1.7.2-3   i386  Akonadi PIM storage service
rc  atop                  1.26-2    i386  Monitor for system resources and process activity
rc  audtty                0.1.12-1  i386  ncurses based frontend to audacious
...
$

Auch aptitude kann in diese Richtung recherchieren. Es kennt zu diesem Zweck zum Schalter search die Option ~c bzw. die Langform ?config-files. Das Ergebnis umfasst jedoch alle konfigurierten Pakete – unabhängig davon, ob diese als gelöscht markiert sind oder nicht.

Suche nach konfigurierten Paketen mittels aptitude

$ aptitude search '~c'
c   akonadi-backend-mysql   - MySQL-Speicher-Backend für Akonadi
c   akonadi-server          - PIM-Speicherdienst Akonadi
c   atop                    - Überwachung für Systemressourcen und Proze
c   audtty                  - auf ncurses basierende Oberfläche für auda
...
$

8.43.3. Fall 3: Löschen von Konfigurationsdateien bereits deinstallierter Pakete

Haben Sie die aus Ihrer Sicht unnützen Konfigurationsdateien eines bereits deinstallierten Pakets ausfindig gemacht und möchten diese endgültig ins digitale Nirwana befördern, sind Ihnen APT und aptitude gern dabei behilflich. apt, apt-get und aptitude unterstützen Sie mit der Kombination aus dem jeweiligen Namen des Werkzeugs und dem Unterkommando purge gefolgt vom Paketnamen, bspw. apt purge mc für die restlose Entfernung des Pakets mc.

Löschen der Konfigurationsdateien mittels apt

# apt purge mc
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete wurden automatisch installiert und werden nicht mehr benötigt:
  libconfuse-common libconfuse0
Verwenden Sie »apt-get autoremove«, um sie zu entfernen.
Die folgenden Pakete werden ENTFERNT:
  mc*
0 aktualisiert, 0 neu installiert, 1 zu entfernen und 108 nicht aktualisiert.
Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]
(Lese Datenbank ... 253598 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von mc (3:4.8.13-3) ...
Löschen der Konfigurationsdateien von mc (3:4.8.13-3) ...
#

In den Versionen vor 0.7.2 kennt apt-get das Unterkommando purge noch nicht. Ab der Version 0.7.7 (veröffentlicht 2007) funktionieren auch die Patches dazu zuverlässig. Falls Sie in die Situation kommen, mit einer Version vor 0.7.7 arbeiten zu müssen, benutzen Sie stattdessen im Aufruf die Kombination aus dem Unterkommando remove gefolgt von der Option --purge und den Namen der zu entfernenden Pakete. Nachfolgend sehen Sie das für apt-get und das zu entfernende Paket cssed.

Löschen der Konfigurationsdateien mittels apt-get

# apt-get remove --purge cssed
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  cssed*
0 aktualisiert, 0 neu installiert, 1 zu entfernen und 16 nicht aktualisiert.
Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren [J/n]?
(Lese Datenbank ... 304031 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von cssed ...
Löschen der Konfigurationsdateien von cssed ...
Trigger für menu werden verarbeitet ...
#

Die obigen Beispiele besprechen das Entfernen der Konfigurationsdateien eines einzigen Pakets. Um herauszufinden, welche "Paketreste" sich insgesamt auf ihrem System tummeln, hilft die nachfolgende Kombination aus dpkg, egrep und awk. Aus der mit dpkg erstellten Liste der installierten Pakete filtert egrep zunächst mit Hilfe eines Regulären Ausdrucks alle Zeilen heraus, die mit den beiden Buchstaben rc beginnen (entfernte, aber noch konfigurierte Pakete). Daraus wiederum schneidet awk aus jeder Zeile die zweite Spalte aus, die den Paketnamen enthält. Bei Systemen, die bereits länger in Gebrauch sind und auf denen viel experimentiert wurde, kann die Liste der hierüber gefundenen "Paketreste" durchaus länger werden und Überraschungen zu Tage fördern.

Aufspüren noch konfigurierter Pakete. 

# dpkg -l | egrep "^rc " | awk '{ print $2; }'
mediathekview
php5-mysqlnd
qgis-plugin-grass
samba
skype
subversion
svn-workbench
thunderbird
#

Um alle diese "Paketreste" in einem Rutsch aufzuräumen, kombinieren Sie diesen Aufruf bspw. mit apt purge wie folgt:

Rückfrage vor dem Löschen aufgespürter, noch konfigurierter Pakete. 

# apt purge $(dpkg -l | egrep "^rc " | awk '{ print $2; }')
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  alsa-tools-gui* alsamixergui* bmon* bomber* cifs-utils* d2x-rebirth*
  doxygen-gui* evince* firebird2.5-common* firebird2.5-server-common* geany*
  geany-common* gedit* gkrellm* grass-core* gv* htdig* ibus* icedove*
  iceweasel-l10n-de* im-config* jed* jed-common* kdiff3* keyutils* ktorrent*
  libacpi0* libastro1* libatk1.0-0:i386* libavahi-compat-libdnssd1* libc-ares2*
  libcairo2:i386* libclucene-contribs1* libcmis-0.4-4* libcoin80* libdee-1.0-4*
  libegl1-nvidia* libeot0* libexttextcat-2.0-0* libfbclient2* libfbembed2.5*
  libfftw3-single3* libg15-1* libg15daemon-client1* libg15render1*
  libgdk-pixbuf2.0-0:i386* libgit2-21* libgit2-glib-1.0-0* libgl1-nvidia-glx*
  libgles1-nvidia* libgles2-nvidia* libglew1.10* libgltf-0.0-0* libgmpxx4ldbl*
  libgraphicsmagick3* libgraphite2-3:i386* libgssglue1* libgtk2.0-0:i386*
  libguess1* libharfbuzz0b:i386* libhdb9-heimdal* libhyphen0* libibus-1.0-5*
  libjasper1:i386* libkdegames6abi1* libkeybinder-3.0-0* libkworkspace4abi2*
  liblangtag1* liblvm2app2.2* libmarblewidget19* libmythes-1.2-0*
  libnvidia-eglcore* libnvidia-ml1* libodfgen-0.1-1* libopencore-amrnb0*
  libopencore-amrwb0* libopenscenegraph100* libpango-1.0-0:i386*
  libpangocairo-1.0-0:i386* libpangoft2-1.0-0:i386* libphysfs1*
  libpixman-1-0:i386* libpyside1.2* libqextserialport1* libqgis-analysis2.4.0*
  libqgis-core2.4.0* libqgis-gui2.4.0* libqgis-networkanalysis2.4.0*
  libqgisgrass2.4.0* libqgispython2.4.0* libqscintilla2-11* libqtlocation1*
  libquazip1* libqwt6* libsdl-mixer1.2* libsdl2-2.0-0* libshiboken1.2* libshp2*
  libsidplay1* libsmi2ldbl* libspatialindex3* libspeechd2* libva-glx1*
  libwebrtc-audio-processing-0* libwireshark-data* libwiretap4*
  linux-image-3.16.0-4-amd64* mediathekview* nvidia-settings* php5-mysqlnd*
  qgis-plugin-grass* samba* skype:i386* subversion* svn-workbench* thunderbird*
  wireshark*
0 aktualisiert, 0 neu installiert, 117 zu entfernen und 108 nicht aktualisiert.
Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]
...
#

Nach ihrer Bestätigung löscht apt alle "Paketreste" wie oben genannt — eines nach dem anderen. Möchten Sie hingegen für jedes Paket dessen Entfernung nochmals einzeln bestätigen (oder ggf. auch ablehnen), kommt eine for-Schleife in ihrer Shell zum tragen. Das nachfolgende Beispiel zeigt den Aufruf in einer Bash.

Paketweises Löschen aufgespürter, noch konfigurierter Pakete. 

# for paket in $(dpkg -l | egrep "^rc " | awk '{ print $2; }'); do apt purge $paket; done
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  alsa-tools-gui*
0 aktualisiert, 0 neu installiert, 1 zu entfernen und 108 nicht aktualisiert.
Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt.
Möchten Sie fortfahren? [J/n]
...
#

8.43.4. Fall 4: Paket samt Konfigurationsdateien deinstallieren

APT und aptitude ermöglichen auch das Deinstallieren eines oder mehrerer Pakete samt zugehöriger Konfigurationsdateien in einem einzigen Schritt. Die Aufrufe entsprechen dem Kommando dpkg -P Paketname für eine Menge von Paketen in der richtigen Reihenfolge der Paketabhängigkeiten.

Für diese Aktion gilt das gleiche wie in Fall3. Sie kombinieren entweder apt-get mit dem Schalter remove, der Option --purge und dem Paketnamen oder nur dem Schalter purge und dem Paketnamen. aptitude und apt kennen hingegen auschließlich den Schalter purge für diese Aktion. Das nachfolgende Beispiel zeigt den entsprechenden Aufruf von aptitude und das Paket cssed.

Löschen des Pakets cssed samt Konfigurationsdateien in einem Schritt. 

# aptitude purge cssed
Die folgenden Pakete werden ENTFERNT:
  cssed{p}
0 Pakete aktualisiert, 0 zusätzlich installiert, 1 werden entfernt und 16 nicht aktualisiert.
0 B an Archiven müssen heruntergeladen werden. Nach dem Entpacken werden 2.052 kB frei werden.
Möchten Sie fortsetzen? [Y/n/?]
(Lese Datenbank ... 304082 Dateien und Verzeichnisse sind derzeit installiert.)
Entfernen von cssed ...
Löschen der Konfigurationsdateien von cssed ...
Trigger für man-db werden verarbeitet ...
Trigger für menu werden verarbeitet ...
Trigger für gnome-menus werden verarbeitet ...
Trigger für desktop-file-utils werden verarbeitet ...

#

8.43.5. Fall 5: Paket für eine ausgewählte Architektur entfernen

Ein Sonderfall ist das Entfernen aller Pakete für eine bestimmte Architektur. Das tritt auf, wenn Sie bspw. mit dem Multiarch-Feature experimentieren (siehe Abschnitt 1.2.3, „Multiarch: Mehrere Architekturen gleichzeitig auf einem System“). An den Paketnamen fügen Sie einen Doppelpunkt und den Namen der Architektur an. Um beispielsweise alle Pakete für die Architektur i386 vollständig von ihrem System zu entfernen, nutzen Sie diesen Aufruf:

Vollständiges Entfernen aller installierten Pakete für die Architektur i386

# apt-get remove --purge ".*:i386"