web-dev-qa-db-fra.com

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

Ma partition de démarrage se trouve sur un disque SSD. Par conséquent, il ne peut pas contenir plus de 8 versions du noyau installées. Une mise à jour du noyau ne pourra éventuellement pas être installée car la partition de démarrage est remplie d'anciennes versions. Il existe de nombreuses questions sur la manière de supprimer les anciennes versions (même comment automatiser le processus), mais ma question est simplement la suivante: Pourquoi apt-get autoremove ne les détecte-t-il pas et ne les supprime-t-il pas automatiquement, et y a-t-il un moyen que je puisse le faire faire? Je veux dire, apt-get est ce qu’ils ont installé de toute façon, alors il le sait, alors pourquoi choisit-il de laisser toutes les anciennes versions?

53
BlueBomber

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

enter image description here

Comme vous pouvez le constater, il est dit à apt de ne jamais supprimer automatiquement les noyaux, comme le dit un autre fichier (script), /etc/kernel/postinst.d/apt-auto-removal. Et le voici:

enter image description here

Si vous installez manuellement 2 noyaux choisis, à savoir le premier et le actuel, alors apt-autoremove ne supprimera que les anciennes versions que vous n'avez pas installées manuellement. Vous aurez donc toujours ces 2 options, quelle que soit 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 du fichier 01autoremove-kernels et du uname -r, vous vous rendrez compte que le noyau en cours d'exécution et le plus récent qui le précède sont conservés pour ne jamais être 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";
  };

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

36
Sergiy Kolodyazhnyy

Pour moi, cela a aidé à installer le dernier (X) ubuntu (15.10). Dans les versions précédentes, les packages de noyau pouvaient être marqués comme installés manuellement, au moins s'ils avaient été 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: Bug # 1175637 , Bug # 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 d'exécuter Sudo apt-get autoremove --purge par la suite pour voir si cela faisait une 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 préférable d'exécuter apt-get autoremove avec l'option --dry-run en premier.

8
jarno