BxLUG groupe des utilisateurs de GNU/Linux de Bruxelles

Espace membres

Dupedi - Kernels Management

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 - Using GRUB as 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 /boot
Un 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

Bienvenue dans le monde du libre