Come rimuovere le dipendenze consigliate e suggerite dai pacchetti disinstallati?


16

So come rimuovere le dipendenze di un pacchetto disinstallato? e ci ho provato

apt-get autoremove

ma ciò non rimuove le dipendenze consigliate / suggerite da altri pacchetti.

Cioè, se installo un pacchetto X che consiglia Y, ma non installo Y, quindi installo il pacchetto Z che dipende da Y. e successivamente lo faccio

apt-get remove --auto-remove Z

allora Y non viene rimosso automaticamente anche se nulla dipende da esso. (X "raccolto" Y, anche se non dipende da esso).


1
Potresti invece dire qual è il pacchetto che fa questo?
Braiam,

Ci sono molti esempi, quindi ho cercato di estrarre l'essenza del problema nella descrizione sopra. Hai ragione che avrei dovuto includere anche un esempio concreto: considera l'installazione di texlive-full. Installa molti pacchetti di font, che sono suggeriti (ma non richiesti) da molti pacchetti preesistenti (non ricordo esattamente quale, ma penso che libreoffice o matplotlib o ottave preesistenti li abbiano suggeriti). Quindi il problema è che "apt-get install texlive-full" seguito da "apt-get remove --purge --auto-remove texlive-full" non lascia il sistema nello stesso stato originale.
user2809402

Risposte:


14

Se vuoi rimuovere i pacchetti raccomandati dal tuo sistema, anche se ci sono ancora dei pacchetti installati che li raccomandano (o suggeriscono), inserisci quanto segue nel file /etc/apt/apt.conf.d/99_norecommends(crealo):

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

La documentazione per queste opzioni è qui .

Quindi, la prossima esecuzione apt dovrebbe rimuoverli tutti. In caso contrario, avvia aptitudee digita ge di gnuovo.

Questa configurazione disabilita anche l'installazione automatica dei pacchetti consigliati durante l'utilizzo apt-get. Per aptitudequesto può essere fatto dalla GUI della console, menu Opzioni> Preferenze> "Installa i pacchetti consigliati automaticamente" (deselezionalo).


Non consiglierei di non installare raccomandazioni in quanto sono utili per la maggior parte del tempo .
Braiam

1
@Braiam Questo non è ciò che l'OP ha chiesto però. Il tuo commento è per lui, non per me.
Totor

Sto solo dicendo che è forse eccessivo.
Braiam

@Braiam Questo è il tuo POV. Vivo abbastanza bene con i InstallRecommendsdisabili. Per la cronaca, è stato disabilitato di default fino al rilascio di Debian Squeeze, ovvero da febbraio 2011 (non si conosce Ubuntu). Inoltre, potrebbe non essere necessaria la stessa configurazione su un server o un'impostazione desktop.
Totor

2
InstallRecommends: Perché installare 5 MB di roba che vuoi, quando puoi anche installare 1 GB di roba che non vuoi?
Mark K Cowan,

7

Sostituzione delle opzioni APT

A differenza delle dipendenze, i pacchetti "consigliati" o "suggeriti" installati automaticamente possono essere ignorati apt-get autoremove.

Come descritto altrove, questo comportamento di APT può essere modificato nella configurazione.

Allo stesso modo, la configurazione del apt-getcomando può essere temporaneamente modificata tramite l' -oopzione della riga di comando.

Ecco come forzare autoremove a rimuovere i pacchetti "consigliati" e "suggeriti" rimasti, oltre alle dipendenze inutilizzate.

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

Attenzione!

Alcune funzionalità potrebbero andare perse. Preparati a indagare e reinstallare le cose. Potrebbe essere più semplice lasciare da soli questi pacchetti.

Altre opzioni

Per disinstallare i pacchetti 'consigliati' e 'suggeriti' esclusivamente per un determinato pacchetto, dai un'occhiata al registro della cronologia di apt.


1
semplicemente per analizzare tali pacchetti, eseguire una corsa a secco con apt-getl' -sopzione e la pipe su grep ^Remv- quindi questo è il comando:apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv
myrdd

1

In realtà il comando è:

sudo apt-get autoremove <Z>

Ma questo ha un trucco! Se una delle dipendenze ha altri pacchetti precedentemente installati che li raccomandano / suggeriscono, apt non li rimuoverà.

Non hai specificato quale pacchetto fosse, ma per esempio, se dovessi installare il plugin IcedTea, installerebbe Java / OpenJRE in base alle dipendenze. Se li disinstallo usando sudo apt-get autoremove icedtea-7-pluginnoteresti che non rimuoverà Java / OpenJRE, dal momento che LibreOffice suggerisce anche i pacchetti.

Quindi, per rimuoverli devi essere eccessivamente specifico sul pacchetto che desideri disinstallare che normalmente autoremovenon:

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

In questo modo potresti essere sicuro che il tuo pacchetto venga rimosso.

Puoi anche usare deborphan per rimuovere alcune dipendenze.


1
A proposito, la mia comprensione dalla manpage apt è che autoremove non si aspetta un nome di pacchetto e pulirà semplicemente tutte le dipendenze di pacchetti non necessarie nel sistema. Quindi dovresti fare 2 passaggi: "apt-get remove Z" seguito da "apt-get autoremove". Questi 2 passaggi possono essere eseguiti contemporaneamente con "apt-get remove --auto-remove Z", come menzionato nella mia domanda originale. Ma come ho detto, il problema è che ci sono alcuni pacchetti rimanenti che non vengono rimossi se suggeriti da qualcos'altro.
user2809402

1
Sì, hai descritto perfettamente il mio problema. Grazie. Ma, sfortunatamente, non l'hai risolto, perché non voglio andare su /var/log/apt/history.log e cercare tutti i pacchetti Y che sono stati installati un paio di mesi fa con Z (nel tuo esempio, Y = java / jre, Z = plugin icedtea) e quindi aggiungerli manualmente alla riga di comando apt. Voglio solo specificare Z e il resto delle dipendenze deve essere raccolto automaticamente, anche se sono suggerite da un altro pacchetto esistente X (X = libreoffice nel tuo esempio).
user2809402

1
Sfortunatamente, questo è il modo in cui funziona il sistema apt, preferisce mantenere i pacchetti installati piuttosto che rimuoverli, anche se non sono più necessari. L'unico modo per rimuoverli è manualmente o con deborphanma deborphan potrebbe perdere ancora alcuni pacchetti. Puoi usare le Debug::opzioni e anche controllare la mia altra risposta a riguardo . Puoi anche usare --no-install-recommends, ma apt-get non installa i pacchetti suggeriti per impostazione predefinita.
Braiam,

@ user2809402 dovresti anche consultare askubuntu.com/q/244470/169736
Braiam

Braiam- Grazie per il puntatore deborphan. Controllerò.
user2809402

-1

Bene, se vuoi rimuovere il pacchetto <Z>con dipendenze basta digitare:

sudo apt-get autoremove --purge <Z>

3
Grazie, ma sfortunatamente, l'aggiunta di "--purge" rimuove semplicemente le configurazioni dei pacchetti che vengono rimossi con "autoremove". Ma per quanto posso vedere, non cambia la decisione su quali pacchetti rimuovere. Cioè, le dipendenze di Z che sono suggerite da alcuni pacchetti X preesistenti, non vengono ancora rimosse, indipendentemente dal fatto che io specifichi o meno "--purge".
user2809402,

1
Inoltre, autoremovefunziona a livello di sistema. Quindi ogni volta che chiami autoremove, rimuoverà tutti i pacchetti inutilizzati sul tuo sistema. L'installazione di un pacchetto, di autoremovingsolito non restituirà il sistema allo stesso stato e lascerà invece un mucchio di pacchetti "rimanenti".
Rolf,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.