8.44. Umgang mit Waisen

Während der Verwendung von APT und aptitude werden die Abhängigkeiten der Pakete automatisch aufgelöst und daher auch zusätzlich benötigte Pakete eingespielt. Deinstallieren Sie zu einem späteren Zeitpunkt Pakete, werden bei Aptitude alle nicht mehr benötigten Pakete ebenfalls wieder entfernt. APT (apt, apt-get) weißt im Gegensatz dazu in der Standard-Einstellung nur auf nicht mehr benötigte Pakete hin, entfernt sie aber nicht automatisch.

So verbleiben mitunter „Reste“ auf dem System zurück, die ohne Bezug zu anderen Paketen sind. Hängt ein Paket von keinem weiteren mehr ab und bildet kein eigenständiges Programm, wird es daher zu einem Waisen – engl. orphan. Häufig betrifft dies Pakete aus den Kategorien für Bibliotheken (libs), veraltete Bibliotheken (oldlibs) und Entwicklungsbibliotheken (libdevel).

Der Umgang mit Waisen ist im Allgemeinen recht unproblematisch. Waisen können Sie bedenkenlos entfernen, um unnötigerweise belegten Speicherplatz auf Ihrem System wieder freizugeben. Wir empfehlen Ihnen, diesen Aufräumvorgang bei der Systempflege als weiteren Schritt mit durchzuführen. Das hält Ihr System sauber und befreit es von unnützen Lasten.

Neben den Mechanismen von APT und aptitude existieren eine ganze Reihe von weiteren Programmen, um Waisen aufzuspüren und auch zu entfernen. Für die Kommandozeile sind das debfoster (siehe Abschnitt 8.44.2, „debfoster) und deborphan (siehe Abschnitt 8.44.3, „deborphan“). Auf Ncurses basieren Orphaner und Editkeep (siehe Abschnitt 8.44.4, „Orphaner und Editkeep“) und auf GTK+ das Pendant Gtkorphan (siehe [Gtkorphan]). Darüber hinaus bietet wajig (Abschnitt 8.44.6, „wajig) entsprechende Möglichkeiten zur Suche, die wir Ihnen ebenfalls nicht vorenthalten möchten.

8.44.1. APT und aptitude

Zwischen der Standardkonfiguration von APT und aptitude gibt es subtile Unterschiede, die sich über die Zeit herausgebildet haben und die es im Alltag zu beachten gilt. Kurz gefasst, beläßt APT verwaiste Pakete, während aptitude diese automatisch entfernt.

APT-Versionen aus der Prä-Lenny-Ära – d.h. vor Debian 5.0 Lenny (2009) – nehmen auf die Erzeugung von Waisen kaum Rücksicht. Spätere Veröffentlichungen von APT achten deutlich stärker darauf und weisen den Benutzer darauf hin. Ohne explizite Aufforderung entfernt APT keine Waisen.

Bei aptitude ist das ganze Prozedere ein klein wenig anders. aptitude räumt in der Standard-Einstellung eigenständig auf. Das betrifft jedoch nur Pakete, die als "automatisch installiert" markiert sind und von denen wiederum kein manuell installiertes Paket abhängt (keine reverse dependencies bestehen).

Über die aptitude-Option aptitude::Delete-Unused schalten Sie dieses Verhalten zu oder ab – entweder über die Benutzeroberfläche unter OptionenEinstellungen, oder direkt in der Konfigurationsdatei von aptitude.

Abbildung 8.33. Nicht verwendete Pakete automatisch entfernen in aptitude

werkzeuge/paketoperationen/aptitude-delete-unused.png

Um den Vorgang der Entfernung ungenutzter Pakete mit APT explizit anzustoßen, verfügen apt und apt-get` über das Unterkommando autoremove. Seitdem nicht nur Aptitude sondern auch APT ein solche Funktionalität besitzt, hat die Bedeutung von deborphan und debfoster deutlich abgenommen.

Pakete automatisch entfernen mit dem Unterkommando autoremove

# apt-get autoremove
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 13 nicht aktualisiert.
#

aptitude verfügt zudem über die Option --purge-unused, die noch einen Schritt weiter geht. Alle Pakete, die aptitude mangels Notwendigkeit entfernt, werden inklusive der dazugehörigen Konfigurationsdateien entsorgt. Diese Option können Sie über den Eintrag aptitude::Purge-Unused aktivieren.

Verwendung der Option --purge-unused

Diese Option ist sehr mächtig und kombiniert eine ganze Reihe von Einzelschritten. Wir raten Ihnen daher, die Anwendung vorab genau zu prüfen.

8.44.2. debfoster

Das Paket debfoster [Debian-Paket-debfoster] ist ein Wrapper für die beiden Werkzeuge dpkg und APT. debfoster pflegt eine Liste mit den Paketen, die Sie auf ihrem System behalten möchten und auf die Sie Wert legen.

Mit Hilfe dieser Liste findet es Pakete, die automatisch installiert wurden, nur weil andere Pakete davon abhängen. Falls diese Abhängigkeiten nicht mehr bestehen – d.h. ein entsprechendes Paket wurde entfernt – bekommt debfoster das mit und fragt Sie, ob Sie das über die Abhängigkeit benannte Paket ebenfalls mit entfernen möchten.

Zu Beginn erstellt debfoster auf der Basis Ihrer Rückmeldung eine Liste mit den derzeit installierten Paketen. Diese Liste speichert debfoster in der Datei /var/lib/debfoster/keepers. Darin vermerkt es, ob Sie das betreffende Paket behalten oder entfernen möchten. Zum Schluss löscht es die Pakete, die in der Liste als „entfernen“ gekennzeichnet sind. Ein Aufruf zur Aktualisierung der Liste ist nach jeder Änderung des Paketbestandes sinnvoll, d.h. einer Installation, Löschung und Aktualisierung eines oder mehrerer Pakete.

Mit dem Kommando debfoster -qv erstellen Sie eine initiale Liste. Bei einem Folgeaufruf zeigt es Ihnen die Pakete, die die unerfüllte Abhängigkeiten aufweisen plus möglicherweise nicht mehr benötigte Pakete. debfoster warnt bei unerfüllten Abhängigkeiten (warning), wenn diese Pakete in der Liste der „zu behaltenden Pakete“ stehen.

Auflistung der unerfüllten Abhängigkeiten mit debfoster

# debfoster -qv

warning: package gnome-session-fallback: unsatisfied dependency on notification-daemon 0.7
warning: package gnome-session-fallback: forcing depdency on notification-daemon
warning: package timidity: unsatisfied dependency on libjack-jackd2-0 1.9.5~dfsg-14
warning: package libreoffice-filter-mobiledev: unsatisfied dependency on default-jre
warning: package libreoffice-filter-mobiledev: unsatisfied dependency on gcj-jre
warning: package libreoffice-filter-mobiledev: unsatisfied dependency on java-gcj-compat
...
Paket wird behalten: gdm3
Paket wird behalten: krita
Paket wird behalten: xfce4-goodies
Paket wird behalten: libreoffice
Paket wird behalten: bluetooth
Paket wird behalten: asciidoc
...
#

debfoster verfügt über eine Reihe von weiteren Optionen. Nachfolgende Liste ist eine Auswahl bzgl. der Thematik „Waisen“, ausführlicher ist die Manpage zum Programm.

-q (Langform --quiet)
keine Darstellung der Fragen und als Standardantwort yes. Sinnvoll zur initialen Erzeugung der Paketliste.
-f (Langform --force)
keine Darstellung der Fragen und als Standardantwort no. Installiert fehlende Pakete nach, wobei die Paketliste maßgeblich ist.
-v (Langform --verbose)
Statusmitteilung darüber, welche Pakete verschwunden sind, Waisen oder Abhängigkeiten wurden.
-d (Langform --show-depends)
gebe alle Pakete an, von denen das Paket abhängt. Die Option ist das Gegenstück zur Option -e und vergleichbar mit dem Unterkommando depends des Programms apt-cache (siehe Abschnitt 8.19, „Paketabhängigkeiten anzeigen“).

Ausgabe aller Abhängigkeiten mittels debfoster

# debfoster -d vim
Paket vim hängt ab von:
  gcc-4.7-base libacl1 libattr1 libc-bin libc6 libc6-i686 libgcc1 libgpm2 libselinux1 libtinfo5
  multiarch-support vim-common vim-runtime
#

-e (Langform --show-dependents)
gebe alle Pakete an, die von dem Paket abhängen. Diese Option ist das Gegenstück zur Option -d und vergleichbar mit dem Unterkommando rdepends des Programms apt-cache (siehe Abschnitt 8.19, „Paketabhängigkeiten anzeigen“).

Ausgabe aller umgekehrten Abhängigkeiten mit debfoster

# debfoster -e apt
Die folgenden 9 Pakete auf der Aufbewahrungsliste verlassen sich auf apt:
  xara-gtk synaptic packagesearch gtkorphan debfoster asciidoc installation-report totem gdm3
Pakete bewahrt durch Standardregeln sich verlassen auf apt.
#

-s (Langform --show-orphans)
auflisten aller Paketwaisen
-i (Langform --ignore-default-rules)
durch alle Pakete gehen, die explizit installiert wurden
-a (Langform --show-keepers)
Ausgabe der debfoster-Datenbank

Ausgabe der Pakete, die sich debfoster gemerkt hat. 

# debfoster -a
Die folgenden Pakete stehen auf der Aufbewahrungsliste:
  abiword acpi acpi-support anacron apache2-utils apcalc apmd app-install-data apt-doc
  apt-dpkg-ref apt-rdepends apvlv aqbanking-tools arora ascii asciidoc ash aspell-de at
...
#

8.44.3. deborphan

Das Programm deborphan aus dem gleichnamigen Debian-Paket [Debian-Paket-deborphan] findet ungenutzte Pakete, die keine weiteren Abhängigkeiten zu anderen Paketen (siehe Abschnitt 8.19, „Paketabhängigkeiten anzeigen“) aufweisen. Es gibt Ihnen eine Liste aller gefundenen Pakete aus, die Sie entfernen sollten, aber nicht müssen. Grundlage für die Liste sind die Paketabhängigkeiten, die deborphan über dpkg und über die Angaben in der Paketbeschreibung zur Verfügung stehen.

Rufen Sie deborphan ohne Optionen auf, beschränkt es sich auf die beiden Paketkategorien libs und oldlibs, um unbenutzte oder veraltete Bibliotheken zu ermitteln. Das nachfolgende Beispiel zeigt diesen Aufruf beispielhaft.

Ausgabe von deborphan bei der Suche nach verwaisten Paketen. 

$ deborphan
mktemp
liblwres40
libdvd0
libxapian15
libdb4.6
libdb4.5
libevent1
librrd4
libbind9-40
diff
dhcp3-common
$

deborphan verfügt über eine ganze Reihe nützlicher Optionen. Daraus zeigen wir die Optionen, die uns für die Thematik „Waisen“ relevant erscheinen. Zu weiteren Optionen gibt Ihnen die Manpage des Programms Auskunft.

-a (Langform --all-packages)
durchsucht die gesamte Paketdatenbank (siehe Abschnitt 3.15, „Lokale Paketliste und Paketcache“)
--libdevel
durchsucht nicht nur die Paketkategorien libs und oldlibs, sondern zusätzlich auch die Liste der Entwicklerbibliotheken (libdevel)
-z (Langform --show-size)
Ausgabe mit Größenangabe des Pakets. Daraus ersehen Sie, wieviel Platz das Paket auf der Festplatte belegt.
-P (Langform --show-priority)
Ausgabe zeigt die Priorität des Pakets (siehe Abschnitt 2.13, „Paket-Priorität und essentielle Pakete“) an; Wert aus required, important, standard, optional oder extra.
-s (Langform --show-section)
zeigt die Paketkategorie (siehe Abschnitt 2.8, „Sortierung der Pakete nach Verwendungszweck“) an, in dem sich das Paket befindet. Ist die Option standardmäßig aktiviert, können Sie das Verhalten mit der Option --no-show-section wieder abschalten.

Auflistung der verwaisten Bibliotheken inkl. Paketkategorie und Größe mittels deborphan

$ deborphan -P -z -s
  20 main/oldlibs  mktemp      extra
 132 main/libs     liblwres40  standard
 172 main/libs     libdvd0     optional
 ...
$

Kompakte Schreibweise der Optionen

Für den obigen Aufruf existiert eine Kurzschreibweise, in der Sie die Optionen in kompakter Form schreiben können. Der Aufruf deborphan -Pzs bewirkt das gleiche wie deborphan -P -z -s.

deborphan verfügt zudem über einen Ratemodus, um Pakete zu finden, die für Sie nicht mehr nützlich sein könnten. Es analysiert dazu den Paketnamen und die Paketbeschreibung. Die Basis bilden die Optionen --guess- und --no-guess-, die Sie mit entsprechenden Suffixen zur genaueren Eingrenzung kombinieren können. Dazu zählen bspw. common, data, dev, doc und mono, aber auch perl, pike, python und ruby für die entsprechenden Programmiersprachen. Eine ausführliche Auflistung ist in der Manpage dokumentiert.

deborphan errät nicht mehr nützliche Pakete. 

# deborphan --guess-perl | sort
gqview
libchromaprint0
libconsole
libcrypt-rc4-perl
libgraphics-magick-perl
libimage-exiftool-perl
libindicate-gtk3
libpdf-api2-perl
librpcsecgss3
librrd4
libtext-pdf-perl
...
#

Mit der Option --find-config suchen Sie nach nicht installierten Paketen, von denen noch Konfigurationsdateien auf dem System vorliegen. Das impliziert die Option -a und durchsucht die gesamte Paketdatenbank. Das nachfolgende Beispiel sortiert zusätzlich die Paketliste alphabetisch aufsteigend und gibt die Ausgabe seitenweise über den Pager more auf dem Terminal aus.

Aufspüren nicht mehr benötigter Konfigurationsdateien über die Option --find-config

$ deborphan --find-config | sort | more
baobab
bluez-utils
dhcdbd
dpatch
dvipdfmx
gnome-screenshot
--More--
$

Für das Paket gnome-screenshot aus obiger Ergebnisliste ergibt eine Suche über dpkg die nachfolgende Ausgabe. Die Buchstaben rc zu Beginn der Zeile mit den Paketdetails zeigen, dass dieses Paket bereits auf dem System installiert war und zwischenzeitlich wieder entfernt wurde (Buchstabe r für removed in der ersten Spalte). Die Konfigurationsdateien des Programms sind noch verfügbar (Buchstabe c für configured in der zweiten Spalte).

Aufspüren verbliebener Konfigurationsdateien mittels dpkg

$ dpkg -l gnome-screenshot
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name                Version             Beschreibung
+++-===================-===================-==================================
rc  gnome-screenshot    2.30.0-2            screenshot application for GNOME
$

Darstellung des Paketstatus

Die ersten beiden Zeichen in der Zeile mit den Paketdetails haben eine besondere Bedeutung und geben den Status des Pakets an. Unter „Paketstatus erfragen“ in Abschnitt 8.4, „Paketstatus erfragen“ stellen wir Ihnen alle weiteren Varianten und deren Bedeutung vor.

Um die verbliebenen Konfigurationsdateien eines Pakets auch noch zu entfernen, benutzen Sie üblicherweise das Kommando apt-get --purge remove Paketname. Für das oben genannte Paket gnome-screenshot heißt der Aufruf apt-get --purge remove gnome-screenshot. Weitere Details dazu finden Sie unter Pakete deinstallieren in Abschnitt 8.43, „Pakete deinstallieren“.

Eine zusätzliche Möglichkeit bietet die Kombination aus apt-get und deborphan. Die Angabe $(deborphan) bewirkt die Ausführung des Kommandos deborphan in einer Subshell und liefert als Rückgabewert alle Pakete, die Waisen sind. Indem Sie das als Parameter an APT übermitteln, sparen Sie einerseits Tipparbeit und können darüber hinaus auf die Rückfragen von APT reagieren.

Kombinieren von APT und deborphan

# apt-get --purge remove $(deborphan)
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen.... Fertig
Die folgenden Pakete werden ENTFERNT:
  gqview* libchromaprint0* libconsole* libindicate-gtk3* librpcsecgss3*
  librrd4* linux-image-2.6-686* mktemp* pdfjam* qemulator*
  ttf-linux-libertine* virtualbox-ose* virtualbox-ose-dkms*
  virtualbox-ose-guest-source* virtualbox-ose-guest-utils*
  virtualbox-ose-source*
0 aktualisiert, 0 neu installiert, 16 zu entfernen und 8 nicht aktualisiert.
Nach dieser Operation werden 2.517 kB Plattenplatz freigegeben.
Möchten Sie fortfahren [J/n]?
...
#

Entsorgen von Waisen

Wenden Sie das Nachfolgende nur an, wenn Sie wissen, was Sie tun, und sich dessen sicher sind. Das Kommando entsorgt kompromisslos alle Waisen und deren Konfigurationsdateien. Die Option -y beantwortet alle Nachfragen von apt-get automatisch mit „ja“:

Komplexer Aufruf von deborphan

# deborphan | xargs apt-get --purge remove -y

8.44.4. Orphaner und Editkeep

orphaner und editkeep sind beides Benutzeroberflächen für deborphan (siehe Abschnitt 8.44.3, „deborphan“) und Bestandteil des gleichnamigen Pakets [Debian-Paket-deborphan]. Ersteres findet und entfernt verwaiste Pakete, das Zweite hilft Ihnen bei der Pflege und Zusammenstellung der Liste der Pakete, die nie von deborphan entfernt werden.

orphaner und editkeep sind beides Shellskripte und rufen nach der Auswahl direkt apt-get bzw. deborphan mit den passenden Optionen auf. Diese beiden Programme verfügen über ein recht ähnliches Ncurses-Interface. Dargestellt werden zwei Spalten – links der Paketname und rechts der der Distributionsbereich (siehe Abschnitt 2.9, „Distributionsbereiche“) und die Kategorie (siehe Abschnitt 2.8, „Sortierung der Pakete nach Verwendungszweck“), in die das Paket eingeordnet ist. Über die Buchstabentasten bewegen Sie den Auswahlbalken zum entsprechenden Menüpunkt. Mit der Leertaste ergänzen bzw. entfernen Sie das betreffende Paket von der Auswahl. Mit der Eingabetaste legt das Programm los.

Abbildung 8.34. orphaner bei der Arbeit

werkzeuge/paketoperationen/orphaner.png

Abbildung 8.35. editkeep im Einsatz

werkzeuge/paketoperationen/orphaner-editkeep.png

8.44.5. gtkorphan

gtkorphan [Gtkorphan] ist ein graphisches Programm auf der Basis von GTK, welches deborphan (siehe Abschnitt 8.44.3, „deborphan“) direkt ansteuert. Die Ausgaben stammen daher direkt von deborphan und somit aus der Paketbeschreibung.

In der Mitte sehen Sie die Paketliste, wobei Sie über den Reiter zwischen der Darstellung für die verwaisten und nicht verwaisten Pakete umschalten können. Für jeden Eintrag ist der Paketname (siehe Abschnitt 2.11, „Benennung einer Paketdatei“), die Paketgröße, der Distributionsbereich (siehe Abschnitt 2.9, „Distributionsbereiche“), die Paketkategorie (siehe Abschnitt 2.8, „Sortierung der Pakete nach Verwendungszweck“) sowie die Paketpriorität (siehe Abschnitt 2.13, „Paket-Priorität und essentielle Pakete“) aufgeführt.

Als zusätzliche Optionen ergänzen Sie die Liste einerseits um bereits gelöschte Pakete, von denen aber noch Konfigurationsdateien vorhanden sind, und andererseits um Pakete aus allen anderen Paketkategorien (siehe Abschnitt 2.8, „Sortierung der Pakete nach Verwendungszweck“). Um den bereits weiter oben angesprochenen Ratemodus zu verwenden, wählen Sie im Auswahlfeld den gewünschten Eintrag aus der Liste der Möglichkeiten aus. Mit einem Klick auf OK werden alle Waisen von ihrem System entfernt, die Sie zuvor aus der Paketliste ausgewählt haben.

Abbildung 8.36. gtkorphan bei der Arbeit

werkzeuge/paketoperationen/gtkorphan.png

8.44.6. wajig

Ähnlich wie die nicht mehr verfügbare aptsh verfügt wajig [Debian-Paket-wajig] über Kommandos zur Suche nach Waisen – orphans und list-orphans. Beide liefern Ihnen das gleiche Ergebnis. Möglich ist ein Aufruf mittels wajig orphans oder die Eingabe des Kommandos in der wajig-Shell. Damit listet es die Bibliotheken auf, die nicht (mehr) von einem installierten Paket benötigt werden. Andere Pakete werden bei der Recherche nicht berücksichtigt.

Die Analyse basiert auf dem Werkzeug deborphan (siehe Abschnitt 8.44.3, „deborphan“). Daher muss das entsprechende Paket installiert sein, wenn Sie dieses Kommando verwenden möchten. Abbildung 8.37, „wajig mit der Ausgabe des Kommandos orphans zeigt das Ergebnis der Suche nach Waisen in der wajig-Shell.

Abbildung 8.37. wajig mit der Ausgabe des Kommandos orphans

werkzeuge/paketoperationen/wajig-orphans.png

8.44.7. rpmorphan

Für rpm-Pakete gibt es ein Gegenstück zu deborphan namens rpmorphan [rpmorphan-rpm]. Dieses ist nicht Bestandteil des Debianpakets rpm [Debian-Paket-rpm] und steht bislang nicht als eigenes Debianpaket zur Verfügung.