Comment supprimer les dépendances recommandées et suggérées des packages désinstallés?

16

Je sais comment supprimer les dépendances d'un package désinstallé? et j'ai essayé

apt-get autoremove

mais cela ne supprime pas les dépendances recommandées / suggérées par d'autres packages.

Autrement dit, si j'installe un package X qui recommande Y, mais je n'installe pas Y, puis j'installe le package Z qui dépend de Y. et plus tard je fais

apt-get remove --auto-remove Z

alors Y n'est pas automatiquement supprimé même si rien n'en dépend. (X "ramassé" Y, même si cela n'en dépend pas).

user2809402
la source
1
Pourriez-vous plutôt dire quel est le package qui fait cela?
Braiam
Il existe de nombreux exemples, j'ai donc essayé d'extraire l'essence du problème dans la description ci-dessus. Vous avez raison, j'aurais dû également inclure un exemple concret: envisagez l'installation de texlive-full. Il installe beaucoup de packages de polices, qui sont suggérés (mais pas requis) par de nombreux packages préexistants (je ne me souviens pas exactement lesquels, mais je pense que libreoffice ou matplotlib ou octave préexistants les ont suggérés). Le problème est donc que "apt-get install texlive-full" suivi de "apt-get remove --purge --auto-remove texlive-full" ne laisse pas le système dans le même état d'origine.
user2809402

Réponses:

14

Si vous souhaitez supprimer les packages recommandés de votre système, même s'il existe encore des packages installés qui les recommandent (ou les suggèrent), mettez ce qui suit dans le fichier /etc/apt/apt.conf.d/99_norecommends(créez-le):

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

La documentation de ces options est ici .

Ensuite, la prochaine exécution d'apt devrait les supprimer tous. Si ce n'est pas le cas, lancez aptitudeet tapez get gencore.

Cette configuration désactive également l'installation automatique des packages recommandés lors de l'utilisation apt-get. Pour aptitudecela, vous pouvez le faire à partir de l'interface graphique de la console, menu Options> Préférences> "Installer automatiquement les packages recommandés" (décochez-le).

Totor
la source
Je ne recommanderais pas de ne pas installer de recommandations car elles sont la plupart du temps utiles .
Braiam
1
@Braiam Ce n'est cependant pas ce que le PO a demandé. Votre commentaire est pour lui, pas pour moi.
Totor
Je dis juste que c'est peut-être exagéré.
Braiam
@Braiam C'est votre POV. Je vis plutôt bien avec un InstallRecommendshandicap. Pour mémoire, il a été désactivé par défaut jusqu'à la sortie de Debian Squeeze, c'est-à-dire depuis février 2011 (je ne sais pas pour Ubuntu). De plus, il se peut que vous n'ayez pas besoin de la même configuration sur un serveur ou une configuration de bureau.
Totor
2
InstallRecommends: Parce que pourquoi installer 5 Mo de trucs que vous voulez, alors que vous pouvez également installer 1 Go de trucs que vous ne voulez pas?
Mark K Cowan
7

Remplacement des options APT

Contrairement aux dépendances, les packages "recommandés" ou "suggérés" installés automatiquement peuvent être ignorés par apt-get autoremove.

Comme décrit ailleurs, ce comportement d'APT peut être modifié dans la configuration.

De même, la configuration de la apt-getcommande peut être temporairement modifiée via l' -ooption de ligne de commande.

Voici comment vous forceriez le retrait automatique pour supprimer les paquets restants "recommandés" et "suggérés", en plus des dépendances inutilisées.

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

Mise en garde!

Certaines fonctionnalités peuvent être perdues. Soyez prêt à enquêter et à réinstaller les choses. Il peut être plus facile de laisser ces packages seuls.

Autres options

Pour désinstaller les packages «recommandés» et «suggérés» uniquement pour un package particulier, consultez le journal d'historique d'apt.

Rolf
la source
1
pour simplement analyser de tels paquets, effectuez un essai à sec avec apt-getl' -soption et le tuyau vers grep ^Remv- c'est donc la commande:apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
myrdd
1

En fait, la commande est:

sudo apt-get autoremove <Z>

Mais cela a un truc! Si l'une des dépendances a d'autres packages installés précédemment qui les recommandent / suggèrent, apt ne les supprimera pas.

Vous n'avez pas spécifié de quel paquet il s'agissait mais par exemple, si j'installe le plugin IcedTea, il installerait Java / OpenJRE par dépendances. Si je les désinstalle en utilisant, sudo apt-get autoremove icedtea-7-pluginvous remarquerez que cela ne supprimera pas Java / OpenJRE, puisque LibreOffice suggère également les packages.

Donc, pour les supprimer, vous devez être trop précis sur le package que vous souhaitez désinstaller, ce qui autoremoven'est pas normal :

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

De cette façon, vous pouvez être sûr que votre colis sera supprimé.

Vous pouvez également utiliser deborphan pour supprimer certaines dépendances.

Braiam
la source
1
À propos, ma compréhension de la page de manuel apt est que la suppression automatique ne s'attend pas à un nom de package et nettoiera simplement toutes les dépendances de package inutiles dans le système. Vous devrez donc faire 2 étapes: "apt-get remove Z" suivi de "apt-get autoremove". Ces 2 étapes peuvent être effectuées en même temps avec "apt-get remove --auto-remove Z", comme mentionné dans ma question d'origine. Mais comme je l'ai dit, le problème est qu'il y a des paquets restants qui ne sont pas supprimés s'ils ont été suggérés par autre chose.
user2809402
1
Oui, vous avez parfaitement décrit mon problème. Je vous remercie. Mais, malheureusement, vous ne l'avez pas résolu, car je ne veux pas aller dans /var/log/apt/history.log et rechercher tous les packages Y qui ont été installés il y a quelques mois avec Z (dans votre exemple, Y = java / jre, Z = icedtea plugin), puis ajoutez-les tous manuellement à la ligne de commande apt. Je veux seulement spécifier Z, et le reste des dépendances à ramasser automatiquement, même si elles sont suggérées par un autre package existant X (X = libreoffice dans votre exemple).
user2809402
1
Malheureusement, c'est ainsi que fonctionne le système apt, il préfère garder les packages installés plutôt que de les supprimer, même s'ils ne sont plus nécessaires. La seule façon de les supprimer est manuellement ou avec deborphanmais deborphan peut encore manquer certains packages. Vous pouvez utiliser les Debug::options et également consulter mes autres réponses à ce sujet . Vous pouvez également utiliser le --no-install-recommends, mais apt-get n'installe pas les packages suggérés par défaut.
Braiam
@ user2809402, vous devriez également consulter askubuntu.com/q/244470/169736
Braiam
Braiam- Merci pour le pointeur deborphan. Je vais vérifier cela.
user2809402
-1

Bon, si vous voulez supprimer un paquet <Z>avec des dépendances, tapez simplement:

sudo apt-get autoremove --purge <Z>
user1019723
la source
3
Merci, mais malheureusement, l'ajout de "--purge" supprime simplement les configurations des packages supprimés avec "autoremove". Mais pour autant que je peux voir, cela ne change pas la décision au sujet de laquelle les paquets à enlever. Autrement dit, les dépendances de Z suggérées par un package X préexistant ne sont toujours pas supprimées, que je spécifie ou non "--purge".
user2809402
1
Fonctionne également à l' autoremoveéchelle du système. Ainsi, chaque fois que vous appelez autoremove, cela supprimera tous les packages inutilisés de votre système. L'installation d'un package autoremovingne ramènera généralement pas le système au même état et laissera à la place un tas de packages «restants».
Rolf