So entfernen Sie empfohlene und vorgeschlagene Abhängigkeiten von deinstallierten Paketen?

16

Ich weiß, wie man die Abhängigkeiten eines deinstallierten Pakets entfernt. und ich versuchte es

apt-get autoremove

Dadurch werden jedoch keine Abhängigkeiten entfernt, die von anderen Paketen empfohlen / vorgeschlagen werden.

Das heißt, wenn ich ein Paket X installiere, das Y empfiehlt, aber Y nicht installiere, und dann Paket Z installiere, das von Y abhängt

apt-get remove --auto-remove Z

dann wird Y nicht automatisch entfernt, obwohl nichts davon abhängt. (X "nahm" Y auf, obwohl es nicht davon abhängt).

user2809402
quelle
1
Könnten Sie stattdessen sagen, welches Paket dies tut?
Braiam
Da es viele Beispiele gibt, habe ich versucht, das Wesentliche des Problems in der obigen Beschreibung herauszufinden. Sie haben Recht, dass ich auch ein konkretes Beispiel hätte einfügen sollen: Betrachten Sie die Installation von texlive-full. Es installiert eine Menge von Font-Paketen, die von vielen bereits existierenden Paketen vorgeschlagen (aber nicht benötigt) werden (ich kann mich nicht genau erinnern, welche, aber ich denke, bereits existierende libreoffice oder matplotlib oder octave haben diese vorgeschlagen). Das Problem ist also, dass "apt-get install texlive-full" gefolgt von "apt-get remove --purge --auto-remove texlive-full" das System nicht im selben ursprünglichen Zustand belässt.
user2809402

Antworten:

14

Wenn Sie empfohlene Pakete von Ihrem System entfernen möchten, obwohl noch einige installierte Pakete diese empfehlen (oder vorschlagen), fügen Sie Folgendes in die Datei ein /etc/apt/apt.conf.d/99_norecommends(erstellen Sie sie):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

Die Dokumentation für diese Optionen finden Sie hier .

Dann sollte der nächste apt-Lauf alle entfernen. Wenn dies nicht der Fall ist, starten Sie aptitudeund geben Sie gund gerneut ein.

Diese Konfiguration deaktiviert auch die automatische Installation der empfohlenen Pakete bei Verwendung apt-get. Für aptitudesie von der Konsole GUI durchgeführt werden können, Menü Extras> Einstellungen> „Installieren von Paketen automatisch empfohlen“ (Markierung aufheben it).

Totor
quelle
Ich würde nicht empfehlen, keine Empfehlungen zu installieren, da diese die meiste Zeit nützlich sind .
Braiam
1
@Braiam Dies ist jedoch nicht das, was das OP gefragt hat. Dein Kommentar ist für ihn, nicht für mich.
Totor
Ich sage nur, dass das vielleicht übertrieben ist.
Braiam
@Braiam Das ist dein POV. Ich lebe ziemlich gut mit InstallRecommendsBehinderten. Für den Datensatz war es standardmäßig deaktiviert, bis Debian Squeeze veröffentlicht wurde, also seit Februar 2011 (keine Ahnung von Ubuntu). Darüber hinaus benötigen Sie möglicherweise nicht dieselbe Konfiguration auf einem Server oder einem Desktop-Setup.
Totor
2
InstallRecommends: Warum sollten Sie 5 MB der gewünschten Dateien installieren, wenn Sie auch 1 GB der nicht gewünschten Dateien installieren könnten?
Mark K Cowan
7

Überschreiben von APT-Optionen

Im Gegensatz zu Abhängigkeiten können automatisch installierte "empfohlene" oder "vorgeschlagene" Pakete von ignoriert werden apt-get autoremove.

Wie an anderer Stelle beschrieben, kann dieses Verhalten von APT in der Konfiguration geändert werden.

Ebenso kann die Konfiguration des apt-getBefehls vorübergehend über die -oBefehlszeilenoption geändert werden .

Auf diese Weise würden Sie die automatische Entfernung erzwingen, um verbleibende "empfohlene" und "vorgeschlagene" Pakete zusätzlich zu nicht verwendeten Abhängigkeiten zu entfernen.

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0

Vorsicht!

Einige Funktionen können verloren gehen. Seien Sie darauf vorbereitet, Dinge zu untersuchen und neu zu installieren. Es kann einfacher sein, diese Pakete in Ruhe zu lassen.

Andere Optionen

Um die 'empfohlenen' und 'vorgeschlagenen' Pakete nur für ein bestimmtes Paket zu deinstallieren, schauen Sie sich das apt-Verlaufsprotokoll an.

Rolf
quelle
1
Um solche Pakete einfach zu analysieren , führen Sie einen apt-get-sgrep ^Remvapt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
Probelauf
1

Tatsächlich lautet der Befehl:

sudo apt-get autoremove <Z>

Das hat aber einen Trick! Wenn in einer der Abhängigkeiten bereits andere Pakete installiert sind, die diese empfehlen / vorschlagen, werden sie von apt nicht entfernt.

Sie haben nicht angegeben, welches Paket es ist, aber wenn ich zum Beispiel das IcedTea-Plugin installieren würde, würde es Java / OpenJRE durch Abhängigkeiten installieren. Wenn ich sie mit deinstalliere, werden sudo apt-get autoremove icedtea-7-pluginSie feststellen, dass Java / OpenJRE nicht entfernt wird, da LibreOffice auch die Pakete vorschlägt.

Um sie zu entfernen, müssen Sie übermäßig genau wissen, welches Paket Sie deinstallieren möchten, was normalerweise autoremovenicht der Fall ist :

sudo apt-get autoremove <Z> <dependency of Z>

Auf diese Weise können Sie sicher sein, dass Ihr Paket entfernt wird.

Sie können auch deborphan verwenden, um einige Abhängigkeiten zu entfernen.

Braiam
quelle
1
Mein Verständnis aus der apt-Manpage ist übrigens, dass autoremove keinen Paketnamen erwartet und einfach alle nicht benötigten Paketabhängigkeiten im System bereinigt. Sie müssten also zwei Schritte ausführen: "apt-get remove Z", gefolgt von "apt-get autoremove". Diese 2 Schritte können auf einmal mit "apt-get remove --auto-remove Z" durchgeführt werden, wie in meiner ursprünglichen Frage erwähnt. Aber wie gesagt, das Problem ist, dass es einige übrig gebliebene Pakete gibt, die nicht entfernt werden, wenn sie von etwas anderem vorgeschlagen wurden.
user2809402
1
Ja, Sie haben mein Problem perfekt beschrieben. Vielen Dank. Aber Sie haben es leider nicht gelöst, weil ich nicht nach /var/log/apt/history.log gehen möchte und nach allen Paketen Y Ausschau halten möchte, die vor ein paar Monaten mit Z installiert wurden (in Ihrem Beispiel: Y = java / jre, Z = icedtea plugin) und fügen Sie alle manuell zur apt-Befehlszeile hinzu. Ich möchte nur Z angeben und den Rest der Abhängigkeiten automatisch abrufen , auch wenn sie von einem anderen vorhandenen Paket X vorgeschlagen werden (X = libreoffice in Ihrem Beispiel).
user2809402
1
Leider funktioniert das apt-System so. Pakete werden lieber installiert als entfernt, auch wenn sie nicht mehr benötigt werden. Die einzige Möglichkeit, sie zu entfernen, ist manuell oder mit, deborphanaber bei Deborphan fehlen möglicherweise noch einige Pakete. Sie können die Debug::Optionen verwenden und auch meine andere Antwort dazu überprüfen . Sie können auch die --no-install-recommendsOption verwenden , aber apt-get installiert standardmäßig keine vorgeschlagenen Pakete.
Braiam
@ user2809402 Sie sollten auch askubuntu.com/q/244470/169736
Braiam
Braiam: Danke für den Deborphan-Zeiger. Ich werde es mir ansehen.
user2809402
-1

Richtig, wenn Sie ein Paket <Z>mit Abhängigkeiten entfernen möchten, geben Sie einfach Folgendes ein:

sudo apt-get autoremove --purge <Z>
user1019723
quelle
3
Vielen Dank, aber leider entfernt das Hinzufügen von "--purge" einfach die Konfigurationen von Paketen, die mit "autoremove" entfernt wurden. Meiner Ansicht nach ändert dies jedoch nichts an der Entscheidung, welche Pakete entfernt werden sollen. Das heißt, Abhängigkeiten von Z, die von einem bereits vorhandenen Paket X vorgeschlagen werden, werden immer noch nicht entfernt, unabhängig davon, ob ich "--purge" angegeben habe oder nicht.
User2809402
1
Funktioniert auch autoremovesystemweit. Wenn Sie also anrufen autoremove, werden alle nicht verwendeten Pakete auf Ihrem System entfernt. Wenn Sie ein Paket autoremovinginstallieren , wird das System in der Regel nicht in den gleichen Status zurückversetzt, sondern es verbleiben einige "übrig gebliebene" Pakete.
Rolf