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 ?
Réponses
Trop de publicités?Pour répondre à la question "pourquoi", reportez-vous au dossier /etc/apt/apt.conf.d/01autoremove-kernels
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à :
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.
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.