Dupedi - Gestion des kernels
Comme il existe plusieurs types différents de machines chez Dupedi, et que nous voulions profiter au maximum de la puissance de leurs CPU respectifs, nous avons mis en place l'infrastructure décrite ci-dessous.
Le bootloader utilisé est GRUB (voir Dupedi - Utilisation de GRUB comme bootloader), pour diverses (bonnes) raisons.
Chaque poste client a au moins deux kernels installés, sous forme de packages Debian, comme décrit ici: Dupedi - Installer un kernel 2.4 sous forme de package Debian. Ces kernels sont de la même version, mais compilés pour des processeurs différents (686 et K7 comme on les nomme habituellement).
Le répertoire /boot est une petite partition séparée au début du disque, en ext2fs et montée en lecture seule (ceci expliquant cela).
Pour upgrader [1] le kernel, il faut donc monter la partition /boot en lecture et écriture avant l'opération grâce à la commande suivante:# mount -o remount,rw /bootUn script, exécuté à la fin de la réplication des machines avec Replicator, choisit pour nous le kernel à utiliser par défaut sur cette machine. Ce script est assez limité, parce qu'il connaît le fichier de configuration de GRUB utilisé, et qu'il ne doit donc seulement changer un chiffre pour que la machine boote sur le bon kernel la prochaine fois (0 pour un Intel, 1 pour un AMD). Voici la portion du script en question:
# Configure GRUB to load the best kernel for the current processor type grub_config=/boot/grub/menu.lst #DEBUGGING# cat $grub_config # Note: the following substitutions could be far shorter if we could use # "sed -i". Sadly, Woody's sed is too old to handle the "-i" option. grub_temp_config=`/bin/tempfile` cpu_type=`cat /proc/cpuinfo|grep vendor_id|cut -f2 -d:` if [ "x$cpu_type" == "x AuthenticAMD" ]; then echo "This is an AMD-driven PC" echo "Activating K7 kernel by default" cat $grub_config | sed -e 's/default [01]/default 1/' > $grub_temp_config else if [ "x$cpu_type" == "x GenuineIntel" ]; then echo "This is an Intel-driven PC" echo "Activating i686 kernel by default" else echo "This is an unknown CPU type-driven PC" echo "Activating i686 kernel by default" fi cat $grub_config | sed -e 's/default [01]/default 0/' > $grub_temp_config fi cp $grub_temp_config $grub_config rm -f $grub_temp_config
Comme les commentaires le disent, sur une Sarge ou supérieure (fonction de la version de sed présente évidemment), le code serait plus élégant, plus court et plus clair. Néanmoins, cette version-ci fonctionnerait parfaitement sur une Sarge aussi. Une version légèrement plus intelligente de ce script existe aussi: elle détecte quand le support ACPI devrait être forcé.
[1] pourquoi voudriez-vous le downgrader? Je rappelle que ce sont des packages Debian, donc ils ont normalement déjà été testés