web-dev-qa-db-fra.com

Comment 'apt' décide-t-il combien de vieux noyaux à conserver?

Je gère quelques serveurs pour les services principaux (NTP, DNS, etc.) et il m'est simplement venu à l'esprit qu'un des serveurs semblait conserver les 3 derniers noyaux, au lieu de 2 sur les autres:

[email protected]:~$ Sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
[email protected]:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-51-generic       3.13.0-51.84                     AMD64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     AMD64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             AMD64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-51-generic 3.13.0-51.84                     AMD64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     AMD64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             AMD64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     AMD64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     AMD64        Generic Linux kernel image

...

[email protected]:~$ Sudo apt-get autoremove --purge
Reading package lists... Done
Building dependency tree       
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
[email protected]:~$ dpkg -l |grep linux-image
ii  linux-image-3.13.0-52-generic       3.13.0-52.85                     AMD64        Linux kernel image for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-3.16.0-37-generic       3.16.0-37.49~14.04.1             AMD64        Linux kernel image for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-extra-3.13.0-52-generic 3.13.0-52.85                     AMD64        Linux kernel extra modules for version 3.13.0 on 64 bit x86 SMP
ii  linux-image-extra-3.16.0-37-generic 3.16.0-37.49~14.04.1             AMD64        Linux kernel extra modules for version 3.16.0 on 64 bit x86 SMP
ii  linux-image-generic                 3.13.0.52.59                     AMD64        Generic Linux kernel image
ii  linux-image-generic-lts-utopic      3.16.0.37.29                     AMD64        Generic Linux kernel image

Tous les serveurs sont maintenus à l'identique, je ne sais pas ce que j'aurais pu faire, ça doit être un paramètre quelque part mais je ne le trouve pas!

S'il vous plaît nourrir ma curiosité! Je vous remercie

21
ionreflex

Il existe un fichier généré automatiquement qui indique à apt-get les noyaux à supprimer automatiquement et ceux à conserver.
Le fichier qui indique à apt-get leur noyau est /etc/apt/apt.conf.d/01autoremove-kernels qui est généré à partir de /etc/kernel/postinst.d/apt-auto-removal.

Habituellement, lorsque vous recevez des mises à jour du noyau, lorsque la version du noyau change, par exemple de 3.13 à 3.16, /etc/apt/apt.conf.d/01autoremove-kernels est alors mis à jour pour conserver les noyaux 3.16* et ensuite défini pour supprimer tous les noyaux 3.13 sauf indication contraire du script de génération. ne pas être enlevé.

A partir du script apt-auto-removal:

# Auteur: Steve Langasek 
 # 
 # Marquer comme non autorisables les packages de noyau qui sont: 
 # - la version actuellement démarrée 
 # - le noyau version que nous avons appelée pour 
 # - la dernière version du noyau (déterminée à l'aide de règles copiées à partir du paquet grub 
 # permettant de choisir le noyau à démarrer) 
 # - le second version la plus récente du noyau, si la version du noyau démarrée est 
 # déjà la dernière version et que ce script est appelé pour cette même version, 
 # afin de garantir qu'une solution de secours reste disponible dans l'éventualité où la nouvelle 
 # le noyau de cette ABI ne parvient pas à démarrer 
 # Dans le cas le plus courant, cela aboutit à exactement deux noyaux enregistrés, mais il peut en résulter 
 # que trois noyaux soient enregistrés. Il est préférable de privilégier 
 # Enregistrer trop de noyaux que trop peu. 
 # 
 # Nous générons cette liste et l'enregistrons dans/etc/apt/apt. conf.d au lieu de marquer 
 # packages dans la base de données car il s’exécute à partir d’un script postinst, et apt 
 # remplacera la base de données lorsqu’il sera fermé. 

Toutefois, cela ne les marque parfois pas pour le retrait automatique, car une partie du codage a été modifiée au fil des versions pour empêcher cela.

Si vous souhaitez marquer les noyaux précédents pour autoremove, à l'exception des noyaux requis basés sur les scripts, exécutez la commande suivante à partir d'une fenêtre de terminal:

Sudo apt-mark auto ^linux-image-

Ensuite, lorsque vous exécutez la commande apt-get autoremove, seuls ceux qui sont anciens et dont vous n'avez plus besoin peuvent être supprimés. J'ai mis des exemples ci-dessous:

Ce premier affiche tous les noyaux du système, moins le noyau en cours d'exécution.

 root @ terrance-Linux:/home/share # dpkg -l 'linux- *' | sed '/ ^ ii /! d; /' "(uname -r | sed" s /\(.*\)-\([ 0-9]\+ \)/\ 1/")" '/ d; s/^ [^] * [^] *\([^] * \). */\ 1 /;/[0-9] /! d '
 linux-headers-3.16.0 -34 
 Linux-headers-3.16.0-34-generic 
 Linux-headers-3.16.0-36 
 Linux-headers-3.16.0-36-generic 
 linux-headers-3.16.0-37 
 linux-headers-3.16.0-37-generic 
 linux-headers-4.0.0-040000 
 linux-headers -4.0.0-040000-generic 
 Linux-image-3.16.0-34-generic 
 Linux-image-3.16.0-36-generic 
 Linux-image-3.16 .0-37-generic 
 Linux-image-4.0.0-040000-generic 
 Linux-image-extra-3.16.0-34-generic 
 Linux-image-extra -3.16.0-36-generic 
 Linux-image-extra-3.16.0-37-generic 

Celui-ci affiche le noyau en cours d'exécution.

terrance @ terrance-Linux: ~ $ uname -r 
 4.0.1-040001-generic 
terrance @ terrance-Linux: ~ $ Sudo apt-get autoremove 
 [Sudo] mot de passe pour terrance: 
 Lire les listes de paquets ... Terminé 
 Construire un arbre de dépendance 
 Lecture des informations d'état ... Terminé 
 0 mis à niveau, 0 nouvellement installé, 0 à supprimer et 0 non mis à niveau. 
terrance @ terrance-Linux: ~ $ Sudo apt-mark auto ^ linux-image - 
 linux-image-extra-3.16.0-33-generic ne peut pas être marqué car il n'est pas installé. 
 linux-image-extra-3.13.0-27-generic ne peut pas être marqué car il n'est pas installé. 
 linux-image-3.13.0-44-lowlatency ne peut pas être marqué car il n'est pas installé. 
 linux-image-3.13.0-27-generic ne peut pas être marqué car il n'est pas installé. 
 linux-image-3.16.0-31-lowlatency ne peut pas être marqué car il ne l'est pas installed. 
 linux-image-3.16.0-36-generic est automatiquement installé. 
 linux-image-lowlatency-lts-utopic ne peut pas être marqué car il n'est pas installé. 
 linux-image-extra-3.13.0-36-generic ne peut pas être marqué car il n'est pas installé. 
 linux-image-3.13.0-36-generic ne peut pas être marqué car il n'est pas installé . 
 linux-image-4.0.0-040000-generic est automatiquement installé. 
 linux-image-extra-3.13.0-45-generic ne peut pas être marqué car il n'est pas installé. 
 linux-image-3.16.0-25-generic ne peut pas être marqué comme il n'est pas installé. 

NOTE: Le précédent était trop long à énumérer, donc j'ai un peu tronqué.

terrance @ terrance-Linux: ~ $ Sud apt-get autoremove 
 Lire les listes de paquets ... Terminé 
 Construire un arbre de dépendance 
 Lire des informations d'état ... Terminé 
 Les paquets suivants seront supprimés: 
 Linux-image-3.16.0-34-generic linux-image-3.16.0-36-generic 
 Linux-image-4.0.0-040000-generic linux-image-extra-3.16.0-34-generic 
 linux-image-extra-3.16.0-36-generic 
 0 mis à niveau, 0 récemment installé, 5 à supprimer et 0 non mis à niveau . 
 Après cette opération, 613 Mo d'espace disque seront libérés. 
 Voulez-vous continuer? [Y/n] 

Ainsi, après avoir exécuté ces commandes, vous pouvez voir que je peux maintenant supprimer automatiquement tous les anciens, à l'exception du noyau actuel (4.0.1-040001-generic) et de la suivante (3.16.0-37-generic).

Espérons que cela aide.

30
Terrance