Comment exclure un paquet de apt-get autoremove?

20

Je suis dans une situation où la liste des packages orphelins à supprimer apt-get autoremoveinclut un package que je souhaite conserver. Apparemment, j'ai accidentellement retiré un paquet qui en dépendait. Comment puis-je maintenant marquer le package comme explicitement souhaité, afin que apt-get autoremovecela ne le supprime pas?

bluenote10
la source

Réponses:

29

Utilisation 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.

Alors

sudo apt-mark manual <package-name>

Maintenant, autoremoveje ne le supprimerai pas.

Défaire

sudo apt-mark auto <package-name>

Maintenant autoremove, supprimera le package s'il ne s'agit pas d'une dépendance d'un autre package.

Zanna
la source
Une autre astuce est que vous pouvez marquer plusieurs packages à la fois comme ceci: sudo apt-mark manual <package1> <package2> <package3> etc
Msencenb
10

Quelques tentatives supplémentaires de Google ont permis de trouver une solution :

Il est soit possible d'installer simplement explicitement:

sudo apt-get install <package>

ou marquage comme installé manuellement via

sudo apt-mark manual <package>

apt ne sera pas réinstallé, la sortie ressemblera à:

$ 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.
bluenote10
la source
0

C'est déjà bien répondu, mais j'ai trouvé une situation où je ne voulais pas "marquer" beaucoup de paquets (puis les décocher après autoremove).

Lorsque la liste des packages que vous souhaitez supprimer automatiquement est facilement définie, vous pouvez les diriger / sed/ xargsout.

Je n'ai pas d'exemple complexe de nombreux packages, mais si j'ai le scénario suivant:

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.

et je veux supprimer uniquement les linux*packages, je peux le faire:

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

Donc, à partir d'ici, il est facile de les passer en xargstant qu'arguments de ligne de commande au simple apt-get remove -y:

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

Normalement, lors de l'utilisation xargs, je me prémunirais contre les espaces dans les arguments (par exemple, find ... -print0 | xargs -0 ...), mais comme les noms de packages ne contiennent pas d'espaces, je suis à l'aise d'utiliser des arguments délimités par des sauts de ligne.

(Je pense que d' autres situations, il serait plus approprié de « marque » une prise, le unhold les paquets. Cela peut aussi se faire avec des expressions rationnelles et xargs, mais est probablement plus l' ingénierie de la situation.)

r2evans
la source