TL; DR oder "Verbrenne einfach mein Pi"
sudo apt-get remove --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --purge
(Wiederholen, apt-get autoremove --purge
bis keine Waisenkinder mehr da sind)
Weitere Erklärung
Wenn ein Paket foo hängt auf einem anderen Paket libfoo und Sie entfernen die libfoo Paket, das abhängig ( foo ) wird ebenfalls entfernt. Da Foo eine abhängige Zeile hat, die libfoo angibt , wäre es fehlerhaft , foo zu verlassen, wenn libfoo entfernt würde. Das Gegenteil ist nicht wahr: Entfernen foo nicht löschen libfoo automatisch. Ein anderes Paket xfoo kann auch von libfoo abhängen, sodass apt es nicht einfach entfernt (obwohl apt nachverfolgt, ob es nur als Nebeneffekt der Installation von foo installiert wurde) und bieten an, es automatisch zu entfernen, wenn Sie danach fragen, solange keine anderen noch davon abhängig sind.)
Metapakete hängen von einer Reihe anderer Pakete auf die gleiche Weise ab wie foo von libfoo . Wenn Sie also ein Metapaket entfernen, wird in der Regel nur wenig anderes entfernt. Zum Beispiel kann es zwei Metapakete geben , die von xterm abhängen (lxsession und xfsession vielleicht), aber die Deinstallation von einem oder beiden führt nicht zur Deinstallation von xterm, da xterm ohne lxsession oder xfsession nicht kaputt geht. Metapakete befinden sich im Allgemeinen am oberen Rand des Abhängigkeitsbaums und nicht am unteren Rand, und nur wenige Dinge hängen in der Regel direkt von Metapaketen ab. Metapakete bieten in erster Linie eine bequeme Möglichkeit, eine sinnvolle Gruppe von Paketen gleichzeitig zu installieren, sie sind jedoch keine Deinstallationstools.
Wenn Sie also alles scorchen möchten, was von X11 abhängt, müssen Sie den Basissatz an libx11-Bibliotheken auswählen, von dem letztendlich alle x11-Apps abhängen müssen :
sudo apt-get remove --dry-run --auto-remove --purge 'libx11-.*'
sudo apt-get autoremove --dry-run --purge
Dies (simuliert) entfernt alles, was letztendlich von libx11 -. * Abhängt, und entfernt auch alle Pakete, die als Abhängigkeit von einem X11-Programm installiert wurden, selbst wenn sie nicht direkt von X11 selbst abhängen (CUPS und Ghostscript werden normalerweise installiert) als Nebeneffekt der Installation einer Desktop-Umgebung). Der zweite Befehl entfernt nachfolgende Waisenkinder, bis keine mehr übrig sind. Entfernen Sie "--auto-remove", wenn Sie diesen Schritt später ausführen möchten oder wenn Sie ihn gar nicht ausführen möchten, oder fügen Sie die Pakete einfach manuell wieder hinzu, nachdem Sie die GUI entfernt haben.
Entfernen Sie die Option --dry-run , um den Vorgang tatsächlich auszuführen, nachdem Sie überprüft haben, dass keine Pakete entfernt werden, die nicht entfernt werden sollen.)
Ich bevorzuge es, die Nebenwirkungen zu reinigen und zu beseitigen und sie nach Bedarf wieder hinzuzufügen. Außerdem habe ich dies auf meinem eigenen Pi getestet und es wurde auf einem sehr spartanischen, aber funktionierenden Server neu gestartet. :)
Warum installiert ein Remove etwas?
Die obige Strategie löst das angegebene Problem, aber es besteht immer noch die Neugier, warum ein Entfernungsvorgang dazu führt, dass Pakete installiert werden .
Das Herzstück eines jeden Paketmanagers ist eine Art Erfüllbarkeitslöser . Wenn Sie einen Paketmanager anweisen, einige Pakete zu installieren , zu entfernen oder zu aktualisieren , müssen Sie wirklich den nächsten gewünschten Status der Softwareinstallation ermitteln, wenn ein Satz verfügbarer Pakete vorhanden ist. Diese Lösung kann das Installieren zusätzlicher Pakete (Abhängigkeiten), das Entfernen vorhandener Pakete (Konflikte, Unterbrechungen), das Herunterstufen / Aktualisieren bestimmter Pakete (Kompatibilitätsstufe) oder eine Kombination davon umfassen. Obwohl es ein bisschen unerklärlich ist, dass der Solver feststellt, dass einige Pakete installiert werden müssen, damit andere Pakete entfernt werden könnenEs macht vollkommen Sinn. Dies ist das schlimme Abhängigkeitsverwaltungsproblem, das Paketverwalter lösen.
Ein konkretes Beispiel: Bei einer Reihe bereits installierter Java-Anwendungen hängen alle von einer Java-kompatiblen Laufzeit ab, die derzeit openjdk-7-jre ist . Sie fragen dann den Paket - Manager für die Installation eines neuen Java - Tool zu lösen , die einen erklärt Konflikt mit openjdk-7-jre sondern arbeiten mit Oracle-7-jre (beiden Pakete allgemein bieten eine Java-7-Laufzeit ). Der Solver eine vorzuschlagen Entfernung von openjdk-7-jre und eine Installation von dem Oracle-java-7-jreals Lösung für Ihren Wunschzustand, das neue Paket installiert zu haben, ohne vorhandene Pakete zu beschädigen.
In diesem speziellen Fall ist xterm ein Paket, das eine virtuelle Abhängigkeit namens x-terminal- emulator bereitstellt ( xterm , lxterminal und aterm stellen alle einen x-terminal- emulator bereit). Daher ist es wahrscheinlich, dass lxterminal (als Teil von) entfernt wird Beim Entfernen von lxde) hat der Solver ein vorhandenes installiertes Paket gefunden ( Transcode als mögliches Beispiel), für das eine Art X-Terminal-Emulator erforderlich ist. Daher hat sich der Solver für die Installation von xterm entschieden (für das libutempter0 und xbitmaps erforderlich sind )(Erklären der anderen zu installierenden Pakete), um die ansonsten unterbrochene Abhängigkeit zu erfüllen. Ohne die Paketdatenbank zu sehen, würde ich annehmen, dass dies das wahrscheinlichste Szenario ist.
Verwenden Sie den Befehl apt-cache rdepends (mit der Option --installed können Sie nur installierte Pakete angeben ), um die derzeit von xterm (oder einer Alternative) abhängigen Pakete zu ermitteln:
$ apt-cache --installed rdepends xterm
xterm
Reverse Depends:
|xorg
clusterssh
|xinit
|tk8.5
|tk8.4
|transcode
Abhängigkeiten, die mit dem Wechselzeichen '|' beginnen Bedeutet, dass das Paket von xterm oder etwas anderem abhängt ( in diesem Fall handelt es sich um einen x-terminal-Emulator ). Das Paket clusterssh ist explizit von xterm abhängig und lässt keine Alternative zu. Dies ist die kurze Liste der Pakete, die dazu führen, dass xterm benötigt wird.
Was ist mit Deborphan?
Die Funktionalität des Verfolgens von Waisen wurde 2010 über die 'Autoremove'-Funktionalität (Debian-Bug 582791 ) in apt-get integriert, wodurch Deborphan größtenteils überflüssig und im Wesentlichen veraltet wurde. Im Gegensatz zu Deborphan und ähnlichen Lösungen verfolgt apt-get direkt , welche Pakete explizit installiert wurden und welche Pakete als Nebeneffekt oder Abhängigkeit eines explizit installierten Pakets installiert wurden. Zum Beispiel, wenn ein Administrator foo installiert, libfoo wird als installierte Nebeneffekt und apt-get autoremove Willen , in der Tat, libfoo entfernen , wenn autoremove (oder --auto-remove) angegeben wird , wenn foo entfernen.
Der Ansatz von Deborphan ist eine Ansammlung von Vermutungen. Beispiel: Die Annahme , dass eine installierte Bibliothek, für die es keine abhängige Bibliothek gibt, verwaist sein muss: Wenn libfoo installiert ist, aber weder foo noch xfoo , entscheidet deborphan möglicherweise, dass es sich um eine verwaiste Bibliothek handelt. Ein Fehlermodus besteht darin, dass Bibliotheken speziell für die von ihnen bereitgestellten Tools installiert werden (libxml2 für xmllint, bevor es in libxml2-utils neu gepackt wurde) oder einfach für Entwicklungszwecke verfügbar sind. Solche Pakete sind keine Waisen. Darüber hinaus konzentriert sich deborphan auf Bibliotheken, sodass eine Reihe von nicht bibliotheksbezogenen Waisen übersehen werden, die nachverfolgen können (veraltete Pakete im Vergleich zu verwaisten Paketen) .
munin
aus irgendeinem Grund auch entfernt, aber ich konnte es später leicht genug zurücksetzen.