Come escludere un pacchetto da apt-get autoremove?


20

Sono in una situazione in cui l'elenco dei pacchetti orfani da rimuovere apt-get autoremoveinclude un pacchetto che voglio conservare. Apparentemente ho rimosso accidentalmente un pacco che dipendeva da esso. Come posso ora contrassegnare il pacchetto come esplicitamente desiderato, in modo da apt-get autoremovenon rimuoverlo?


E la domanda correlata: perché è orfano?
bluenote10

Risposte:


29

Uso apt-mark

$ man apt-mark
...
manual
       manual is used to mark a package as being manually installed, which will 
prevent the package from being automatically removed if no other packages 
depend on it.

Così

sudo apt-mark manual <package-name>

Ora autoremovenon lo rimuoverà.

Per annullare

sudo apt-mark auto <package-name>

Ora autoremoverimuoverà il pacchetto se non è una dipendenza da qualsiasi altro pacchetto.


Un altro trucco utile è che puoi contrassegnare molti pacchetti contemporaneamente in questo modo: sudo apt-mark manual <package1> <package2> <package3> etc
Msencenb

10

Alcuni altri tentativi di Google hanno portato a una soluzione :

È possibile installare semplicemente esplicitamente:

sudo apt-get install <package>

o contrassegnando come installato manualmente tramite

sudo apt-mark manual <package>

apt non verrà reinstallato, l'output sarà simile a:

$ sudo apt-get install tmux
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tmux is already the newest version.
tmux set to manually installed.

0

Questa risposta ha già risposto bene, ma ho trovato una situazione in cui non volevo "contrassegnare" molti dei pacchetti (e poi deselezionarli dopo autoremove).

Quando l'elenco dei pacchetti che si desidera modificare automaticamente è facilmente definibile, è possibile eseguirne il pipe / sed/ xargsout.

Non ho un esempio complesso di molti pacchetti, ma se ho il seguente scenario:

root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
  linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
  linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.

e voglio rimuovere solo i linux*pacchetti, posso fare questo:

root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic

Quindi da qui, è facile passare questi xargscome argomenti della riga di comando al semplice apt-get remove -y:

apt-get autoremove -s \
  | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
  | xargs apt-get remove -y

Normalmente quando lo uso xargs, mi proteggerei dagli spazi negli argomenti (ad esempio, find ... -print0 | xargs -0 ...), ma poiché i nomi dei pacchetti non contengono spazi, mi sento a mio agio nell'usare argomenti delimitati da newline.

(Penserei che in altre situazioni, sarebbe più appropriato "contrassegnare" una sospensione, scartare i pacchetti. Ciò può essere fatto anche con regex e xargs, ma è probabilmente un eccesso di ingegneria della situazione.)

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.