59 votes

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

Ma partition de démarrage est sur un SSD, donc elle n'a pas de place pour plus de 8 versions de noyau installées, et éventuellement une mise à jour du noyau échouera à s'installer parce que ma partition de démarrage est pleine d'anciennes versions. Il y a beaucoup de questions sur la façon de supprimer les anciennes versions (même comment automatiser le processus), mais ma question est simplement la suivante : Pourquoi est-ce que apt-get autoremove les détecte et les supprime automatiquement, et y a-t-il un moyen de le faire ? ? Je veux dire, apt-get est ce qui les a installés de toute façon, donc il les connaît, alors pourquoi choisit-il de laisser toutes les anciennes versions en place ?

41voto

Sergiy Kolodyazhnyy Points 97292

Pour répondre à la question "pourquoi", reportez-vous au dossier /etc/apt/apt.conf.d/01autoremove-kernels

enter image description here

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

enter image description here

Si vous installez manuellement 2 noyaux choisis, c'est-à-dire le premier et l'actuel, alors apt-autoremove ne supprimera jamais que les anciennes versions que vous n'avez pas installées manuellement, vous aurez donc toujours ces 2 options plus la dernière.

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 la sortie de 01autoremove-kernels et uname -r vous réaliserez que le noyau en cours d'exécution et le plus récent avant lui, sont conservés pour ne jamais être supprimés par ce script. Il s'avère qu'il y a 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 mettre en commentaire, et cela vous permettra de supprimer automatiquement les noyaux avec apt-autoremove mais n'oubliez pas que vous le faites à vos risques et périls.

13voto

Mnementh Points 19831

Pour moi, cela m'a aidé d'installer la dernière (X)ubuntu (15.10). Dans les versions précédentes, les paquets du noyau peuvent être marqués comme étant installés manuellement, du moins, s'ils sont installés en utilisant Software Updater, de sorte que sudo apt-get autoremove --purge ne peut pas les supprimer. Il existe des rapports de bogue concernant ce problème : Bogue n° 1175637 , Bogue #1439769

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

Alternativement, vous pouvez utiliser linux-purge pour purger les vieux noyaux de manière encore plus sélective ou même s'ils ont été installés manuellement.

1voto

Joel Points 11

Essayez d'abord de supprimer les anciens paquets du noyau, mais si les fichiers /boot/initrd.img restent, alors cela a fonctionné pour moi :

Pour supprimer /boot/initrd.img-4.8.0-39-generic

sudo update-initramfs -d -k 4.10.0-37-generic

Supprimez un fichier initrd.img à la fois.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X