Pourquoi apt-get autoremove ne supprime-t-il pas mes anciens noyaux?

47

Ma partition de démarrage se trouve sur un disque SSD, donc il n’ya pas assez d’environ 8 versions de noyau installées, et une mise à jour du noyau finira par échouer car ma partition de démarrage est remplie d’anciennes versions. Il existe de nombreuses questions sur la façon de supprimer les anciennes versions (même pour automatiser le processus), mais ma question est simplement la suivante: Pourquoi apt-get autoremove ne les détecte-t-il pas automatiquement? peut le faire le faire ? Je veux dire, apt-get est ce qui les a installés de toute façon, alors il les connaît, alors pourquoi choisit-il de laisser toutes les anciennes versions autour?

    
posée BlueBomber 20.12.2014 - 00:51
la source

4 réponses

30

Pour savoir pourquoi, reportez-vous au fichier /etc/apt/apt.conf.d/01autoremove-kernels

Comme vous pouvez le voir, il est demandé à apt de ne jamais supprimer les noyaux, comme indiqué par un autre fichier (script), /etc/kernel/postinst.d/apt-auto-removal . Et la voici:

Si votre script-fu est assez bon, vous pouvez le modifier pour ne sauvegarder que quelques noyaux, bien que je ne puisse pas vous aider car mon script fu n'est pas très bon

Mise à jour:

Dans le /etc/kernel/postinst.d/apt-auto-removal , il y a cette partie:

if [ "$latest_version" != "$installed_version" ] \
   || [ "$latest_version" != "$running_version" ] \
   || [ "$installed_version" != "$running_version" ]
then
        # We have at least two kernels that we have reason to think the
        # user wants, so don't save the second-newest version.
        previous_version=
fi

Donc, si vous comparez le résultat de 01autoremove-kernels file et uname -r , vous réaliserez que le noyau actuellement en cours et le plus récent avant lui, ne sont jamais supprimés par ce script. Il se trouve un autre fichier /etc/apt/apt.conf.d/01autoremove , où il y a des lignes:

    APT
    {
      NeverAutoRemove
      {
            "^firmware-linux.*";
            "^linux-firmware$";
      };
  VersionedKernelPackages
  {
        # linux kernels
        "linux-image";
        "linux-headers";
        "linux-image-extra";
        "linux-signed-image";
        # kfreebsd kernels
        "kfreebsd-image";
        "kfreebsd-headers";
        # hurd kernels
        "gnumach-image";
        # (out-of-tree) modules
        ".*-modules";
        ".*-kernel";
        "linux-backports-modules-.*";
        # tools
        "linux-tools";
  };

Vous pouvez donc les commenter, et cela vous permettra de supprimer automatiquement les noyaux avec apt-autoremove , mais souvenez-vous: faites-le à vos risques et périls

    
réponse donnée Sergiy Kolodyazhnyy 20.12.2014 - 01:23
la source
7

Pour moi, cela m'a aidé à installer le dernier (X) ubuntu (15.10). Dans les versions précédentes, les packages du noyau peuvent être marqués comme installés manuellement, au moins s'ils sont installés à l'aide de Software Updater, de sorte que sudo apt-get autoremove --purge ne puisse pas les supprimer. Il y a des rapports de bogue concernant le problème: Bogue n ° 1175637 , Bogue n ° 1439769

Dans les versions précédentes, vous pouviez essayer de marquer les packages du noyau automatiquement installés par sudo apt-mark auto $(apt-mark showmanual | grep -E "^linux-([[:alpha:]]+-)+[[:digit:].]+-[^-]+(|-.+)$") et exécuter sudo apt-get autoremove --purge par la suite pour voir si cela faisait la différence. La commande ne doit toujours pas supprimer les paquets de noyaux affichés dans /etc/apt/apt.conf.d/01autoremove-kernels, mais il est plus sûr d'exécuter apt-get autoremove avec l'option --dry-run en premier.

    
réponse donnée jarno 23.12.2015 - 20:56
la source
-1

Mise à jour: le lien indiqué ne semble plus fonctionner.

Voici un lien vers un script de purge du noyau avec sécurité intégrée écrit par Dustin Kirkland il y a quelques années. Il devrait encore fonctionner le 12.04.

[lien non actif supprimé]

J'allais le tester sur ma machine 14.04, mais il semble que je ne connaisse plus le problème (finalement corrigé via le canal de mise à jour habituel?). Donc, si quelqu'un avec beaucoup d'anciens noyaux sur sa machine veut le tester, faites-le et partagez vos découvertes.

    
réponse donnée iGadget 06.05.2015 - 12:29
la source
-4
KERNELS1=$(uname -r|cut -d - -f1-2); KERNELS2=$(for i in $(ls -l /vmlinuz*|awk '{print $(NF-0)}'); do echo $i |xargs basename|cut -d - -f2-3; done); dpkg -l|egrep 'linux-headers-[0-9]\.[0-9]\.[0-9]-[0-9]|linux-image-[0-9]\.[0-9]\.[0-9]-[0-9]'|egrep -v ''"${KERNELS1}"'|'"${KERNELS2}"''|awk '{print }'|xargs apt-get purge -y

Je l’utilise sur Ubuntu 12.04!

Cela conservera le noyau en cours d’exécution ainsi que le noyau installé le plus récent (vmlinuz) et celui qui le précède (vmlinuz.old). Tous les autres noyaux et en-têtes seront supprimés.

    
réponse donnée Sam 10.09.2015 - 05:59
la source

Lire d'autres questions sur les étiquettes