7. Installation du nouveau noyau

[Note]Note

Cette section concerne l'architecture x86. Si vous en possédez une différente, l'emplacement des fichiers et les fichiers à installer pourraient être différents.

Le noyau se situe dans arch/i386/boot/bzImage. Le répertoire standard dans lequel les noyaux sont installés est /boot. Vous devez aussi copier le fichier System.map afin d'assurer le bon fonctionnement de certains programmes (tels que top par exemple). Assurez-vous de bien nommer ces fichiers du nom de la version du noyau. Supposons que votre version du noyau soit 2.6.10-foo. L'ordre des commandes que vous devrez taper est :

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.8-foo
$ cp System.map /boot/System.map-2.6.10-foo

Maintenant, il est nécessaire de dire au chargeur de démarrage où le nouveau noyau se trouve. Vous avez deux possibilités : GRUB ou LILO. Notez que Mandrakelinux est configuré pour utiliser LILO par défaut.

7.1. Mise à jour de LILO

La manière la plus simple de mettre à jour LILO est d'utiliser drakboot (voir le chapitre Changer vos paramètres de démarrage du Guide de démarrage). Ou encore, vous pouvez modifier manuellement le fichier de configuration comme expliqué ci-dessous.

Pour LILO, il vous faudra mettre à jour /etc/lilo.conf. Voici à quoi ressemble un fichier lilo.conf typique :

boot=/dev/hda
map=/boot/map
default="linux"
keytable=/boot/es-latin1.klt
prompt
nowarn
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="devfs=mount resume=/dev/hda5"
        read-only
other=/dev/fd0
        label="floppy"
        unsafe

Un fichier lilo.conf est composé d'une section principale, puis d'une section pour le lancement de chaque système d'exploitation. Dans l'exemple du fichier ci-dessus, la section principale est composée des directives suivantes :

boot=/dev/hda
map=/boot/map
default="linux"
keytable=/boot/es-latin1.klt
prompt
nowarn
timeout=50
message=/boot/message
menu-scheme=wb:bw:wb:bw

La directive boot= dit à LILO où il doit installer son secteur d'amorçage boot ; en l'occurrence, il s'agit du MBR (Master Boot Record, soit l'enregistrement d'amorçage maître) du premier disque dur IDE. Si vous voulez faire une disquette LILO, il vous suffira de remplacer /dev/hda par /dev/fd0. La directive prompt demande à LILO de présenter le menu au démarrage. Un compte à rebours est mis en place, il est de cinq secondes (timeout=50), puis LILO exécute l'image par défaut. Si vous retirez la directive timeout=, LILO attendra jusqu'à ce que vous ayez tapé quelque chose.

Puis vient une section linux :

image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        initrd=/boot/initrd.img
        append="devfs=mount resume=/dev/hda5"
        read-only

Une section pour démarrer un noyau GNU/Linux commence par la directive image=, suivi par le chemin complet vers un noyau GNU/Linux valide. À l'instar de toute section, elle contient une directive label= pour l'identifier de façon unique, linux dans cet exemple. La directive root= dit à LILO quelle partition héberge le système de fichiers racine pour ce système GNU/Linux. Il est possible que notre exemple diffère de votre configuration... La directive read-only commande à LILO de monter ce système de fichiers racine en lecture seule au démarrage : s'il n'y a pas cette directive, vous aurez un message d'avertissement. La ligne append comporte des options à passer au noyau.

Puis vient la section disquette :

other=/dev/fd0 label="floppy" unsafe 

En fait, une section débutant par other= est utilisée par LILO pour démarrer tout système d'exploitation autre que GNU/Linux : l'argument de cette directive est l'emplacement du secteur d'amorçage de ce système, et en l'occurrence, il s'agit d'une disquette de démarrage.

Il faut désormais rajouter la section qui nous permettra de démarrer sur le nouveau noyau. Dans cet exemple, elle sera mise au début, mais rien ne vous empêche de la mettre à un autre endroit, sauf au milieu d'une autre section :

image=/boot/vmlinuz-2.6.10-foo
        label="foo"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"

Évidemment, adaptez cela à votre configuration !

Voici donc à quoi ressemble notre fichier lilo.conf après modification, agrémenté de quelques commentaires en plus (toutes les lignes commençant par #), qui seront ignorées par LILO :

#
# Section principale
#
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
message=/boot/message
#  Démarrage par défaut. Mettons donc notre nouveau noyau :
default="foo"
# Afficher le prompt...
prompt
# ... attendre 5 secondes
timeout=50
#
# Notre nouveau noyau : image par défaut
#
image=/boot/vmlinuz-2.6.10-foo
        label="foo"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"
#
# Le noyau original
#
image=/boot/vmlinuz
        label="linux"
        root=/dev/hda1
        read-only
        append="devfs=mount resume=/dev/hda5"
#
# La section Disquette
#
other=/dev/floppy
        label="floppy"
        unsafe


Cela pourrait bien être ce à quoi ressemble votre fichier lilo.conf. Cependant, n'oubliez pas d'adapter le fichier à votre configuration !

Maintenant que le fichier est modifié correctement, contrairement à GRUB qui gère les modifications automatiquement, il faut dire à LILO de changer le secteur de démarrage :

# lilo
Added foo *
Added linux
Added floppy
$

Vous pouvez ainsi compiler autant de noyaux que vous le souhaitez, en rajoutant autant de sections que nécessaire. Vous n'avez plus qu'à redémarrer pour tester votre nouveau noyau. Notez qu'en cas d'erreur rapportée par LILO lors de l'installation de votre nouveau noyau, il ne modifie pas la configuration de votre secteur d'amorçage. LILO modifiera votre configuration seulement si aucune erreur n'a été trouvée.

7.2. Mise à jour de grub

Évidemment, il faut conserver la possibilité de charger votre ancien noyau ! La manière la plus simple de mettre à jour GRUB est d'utiliser drakboot (voir le chapitre Changer vos paramètres de démarrage du Guide de démarrage). Mais vous pouvez aussi modifier manuellement le fichier de configuration comme expliqué ci-dessous.

Il faut ici modifier le fichier /boot/grub/menu.lst. Voilà ce à quoi ressemble un menu.lst typique, avant toute modification :

timeout 5
color black/cyan yellow/cyan
i18n (hd0,4)/boot/grub/messages
keytable (hd0,4)/boot/fr-latin1.klt
default 0

title linux
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5  

title failsafe
kernel (hd0,4)/boot/vmlinuz root=/dev/hda5  failsafe 

title floppy
root (fd0)
chainloader +1

Ce fichier est constitué de deux parties : l'en-tête avec les options communes de base (les cinq premières lignes), et les sections (ou entrées), chacune correspondant à un noyau GNU/Linux différent ou à un autre OS (système d'exploitation). timeout 5 définit le nombre de secondes que GRUB attendra et dont vous disposez pour choisir un autre noyau ou système d'exploitation que celui défini par défaut. Cette valeur par défaut est spécifiée par default 0 (ce qui signifie que la première section définie est donc celle dite « par défaut »). La directive keytable, si elle est présente, définit l'emplacement de la table de mappe de clavier, ici le clavier est configuré en français. Si cette directive n'est pas précisée, le clavier sera considéré comme un simple QWERTY. hd(x,y) fait référence à la partition numéro y sur le disque numéro x, comme le BIOS les voit.

Vient ensuite la section des entrées. Dans cet exemple. trois images sont définies : linux, failsafe et floppy.

  • La section linux commence par indiquer à GRUB le noyau à charger (kernel hd(0,4)/boot/vmlinuz), puis les options à passer à ce noyau. Dans notre cas, root=/dev/hda5 indiquera au noyau que le système de fichier racine est situé sur /dev/hda5. En fait, /dev/hda5 est l'équivalent de hd(0,4) pour GRUB, mais le noyau peut aussi être situé sur une partition différente de celle du système de fichiers racine ;

  • L'entrée failsafe ressemble beaucoup à la précédente, sauf que nous passons un argument supplémentaire au noyau (failsafe), qui lui demande de passer en mode « single » ou mode « de secours » ;

  • La dernière section, floppy, démarre simplement votre système depuis la disquette du premier lecteur, quel que soit le système d'exploitation qui y réside. Ce peut être Windows®, voire même un noyau GNU/Linux sur disquette ;

[Note]Note

Suivant le niveau de sécurité utilisé sur votre système, il se peut que certaines des entrées décrites n'existent pas dans votre fichier.

Allons maintenant droit au but ! Il nous faut rajouter une nouvelle section GNU/Linux afin de pouvoir démarrer sur notre nouveau noyau. Dans cet exemple, elle sera placée au début des entrées, mais rien ne vous empêche de la mettre ailleurs :

title foo 
kernel (hd0,4)/boot/vmlinuz-2.6.10-foo root=/dev/hda5

Rappelez-vous d'adapter le fichier à votre configuration ! Ici, le système de fichier racine est sur /dev/hda5, mais il est sûrement ailleurs sur votre système.

Et c'est tout. Contrairement à LILO, que nous verrons plus loin, il n'y a rien d'autre à faire. Redémarrez votre ordinateur et la nouvelle entrée que vous venez de définir apparaîtra. Sélectionnez-la dans le menu et votre nouveau noyau démarrera.

Si vous avez compilé votre noyau avec le framebuffer, vous aurez envie de l'exploiter : dans ce cas, rajoutez une directive à la section qui lui indique la résolution avec laquelle vous voulez démarrer. La liste des modes est disponible dans le fichier /usr/src/linux/Documentation/fb/vesafb.txt (pour le framebuffer VESA ! Sinon, reportez-vous au fichier correspondant). Pour du 800x600 en 32 bits[43], le numéro du mode est 0x315, il faut donc rajouter la directive :

vga=0x315

Votre entrée ressemblera désormais à ceci :

title foo
kernel (hd0,4)/boot/vmlinuz-2.6.8-foo root=/dev/hda5 vga=0x315 

Pour plus de renseignements, consultez les pages d'info de GRUB (info grub).



[43] 8 bits signifie 28 couleurs, soit 256 ; 16 bits signifie 216 couleurs, soit 64k, soit 65536 ; en 24 bits comme en 32 bits, la couleur est codée sur 24 bits, soit 224 couleurs possibles, soit exactement 16M, ou un peu plus de 16 millions.