Linux-Mandrake:
Guide de l'utilisateur
et Manuel de référence

MandrakeSoft

 
 
Janvier 2000
http://www.linux-mandrake.com


Suivant : Installation d'un logiciel libre
Précédent : Systèmes de fichiers et points de montage
Retour

(Retour à la table des matières)

Chapitre 11 : Compilation et mise en place de nouveaux noyaux


Avec la notion de montage de systèmes de fichiers et la compilation des sources, c'est sans doute le sujet qui fâche le plus les débutants. La compilation d'un nouveau noyau n'est en général pas nécessaire, puisque les noyaux installés par Linux-Mandrake contiennent le support pour un nombre conséquent de périphériques, mais...

Il peut arriver, pourquoi pas, que vous ayez envie de le faire, rien que pour voir « ce que ça fait ». À part faire travailler votre PC et votre cafetière un peu plus que d'habitude, pas grand-chose. Toutefois, l'objectif de ce chapitre est de faire en sorte que votre cafetière reste utilisable après la compilation.

Il existe aussi des raisons valables. Par exemple, vous avez lu que le noyau que vous utilisez a un bogue au niveau de la sécurité, bogue qui est corrigé dans une version plus récente; ou encore, un nouveau noyau intègre le support pour un périphérique dont vous avez bien besoin. Vous avez le choix d'attendre des mises à jour ou bien de compiler un nouveau noyau vous-même, et optez pour la deuxième solution.

Dans tous les cas, achetez du café.

Où trouver les sources du noyau

Le site primaire d'hébergement des sources du noyau est le site FTP ftp.kernel.org, mais il possède un nombre important de miroirs, et tous ont pour nom ftp.xx.kernel.org, où xx représent le code ISO du pays. Pour la France, ce code est fr, et par conséquent le miroir préférentiel sera la machine ftp.fr.kernel.org. À partir de l'annonce officielle de la sortie du noyau, vous pouvez compter deux bonnes heures avant que tous les miroirs soient alimentés.

Sur tous ces serveurs FTP, les sources sont dans le répertoire /pub/linux/kernel. Ensuite, allez dans le répertoire dont la série vous intéresse: ce sera certainement v2.2. Rien ne vous empêche d'essayer des noyaux 2.3, mais gardez à l'esprit que ce sont des noyaux expérimentaux. Le fichier contenant les sources du noyau est linux-<version.du.noyau>.tar.gz, par exemple linux-2.2.11.tar.gz.

Il existe également des patches (corrections) à appliquer aux sources du noyau pour le mettre à jour de façon incrémentale: ainsi, si vous avez déjà les sources du noyau 2.2.11 et voulez mettre à jour vers le noyau 2.2.13, vous pouvez vous dispenser de télécharger les sources en entier, et télécharger simplement les patches patch-2.2.12.gz et patch-2.2.13.gz. C'est en règle générale une bonne idée, les sources occupant aujourd'hui plus de 12 Mo.

Décompacter les sources du noyau, corriger ce dernier (si nécessaire)

Les sources du noyau sont à placer dans /usr/src. Il vous faut donc vous placer dans ce répertoire puis y décompresser les sources:

$ cd /usr/src
$ mv linux linux.old
$ tar xzf /path/to/linux-2.2.11.tar.gz

La commande mv linux linux.old est nécessaire: en effet, vous disposez peut-être déjà des sources d'une autre version du noyau. Cette commande fera en sorte que vous ne les écrasiez pas. Dès l'archive décompressée, vous disposez d'un répertoire linux avec les sources du nouveau noyau.

Maintenant, les patches. Nous allons supposer que vous voulez effectivement « patcher » (« corriger ») du 2.2.11 vers le 2.2.13 et avez téléchargé les patches nécessaires pour ce faire: rendez-vous donc dans le répertoire linux nouvellement créé, puis appliquez les patches:

$ cd linux
$ gzip -dc /path/to/patch-2.2.12.gz | patch -p1 #
$ gzip -dc /path/to/patch-2.2.13.gz | patch -p1
$ cd ..

De façon générale passer d'une version 2.2.x à une version 2.2.y requiert que vous appliquiez tous les patches 2.2.x+1, 2.2.x+2, ..., 2.2.y dans l'ordre. Pour « redescendre » d'une version 2.2.y vers une version 2.2.x, répétez exactement la même procédure mais en appliquant les patches dans l'ordre inverse et avec l'option -R de patch (Reverse, « inverse »). Ainsi, pour repasser du noyau 2.2.13 au noyau 2.2.11, vous feriez:

$ gzip -dc /path/to/patch-2.2.13.gz | patch -p1 -R
$ gzip -dc /path/to/patch-2.2.12.gz | patch -p1 -R

Ensuite, pour faire propre (et aussi pour s'y retrouver), on peut renommer linux pour refléter la version du noyau et créer un lien symbolique:

$ mv linux linux-2.2.11
$ ln -s linux-2.2.11 linux

Il est maintenant temps de passer à la configuration. Pour cela il vous faut être dans le répertoire des sources:

$ cd linux

Configuration du noyau

Pour configurer le noyau vous avez le choix entre:

Malheureusement la configuration du noyau n'est pas encore internationalisée, tout est en anglais. Nous allons parcourir la configuration section par section, mais vous pouvez sauter des sections pour passer à celle qui vous intéresse si vous utilisez menuconfig ou xconfig. Le choix pour les options est 'y' pour Yes (fonctionnalité compilée en dur dans le noyau), 'm' pour Module (fonctionnalité compilée en module), ou 'n' pour No (ne pas inclure dans le noyau).

Pour xconfig, vous aurez deviné à quoi servent les boutons Main Menu, Next et Prev. Pour menuconfig, servez-vous de la touche Entrée pour sélectionner une section, et changez les options avec 'y', 'm' ou 'n' pour en changer l'état ou bien pressez la touche Entrée et faites votre choix pour les options à choix multiples. Exit sortira d'une section et sortira de la configuration si vous êtes dans le menu principal. Et évidemment, il y a Help.

Voici donc une liste relativement brutale des options et des choix recommandés pour ces options, émaillée d'explications quand cela est nécessaire. Les options qui ne sont pas abordées ici sont laissées à votre discrétion. Les laisser « telles que vous les avez trouvées » est en général une bonne chose.

Et voilà! La configuration est enfin terminée. Quittez en sauvegardant votre configuration.

Le fichier de configuration a le nom /usr/src/linux/.config. C'est en général une très bonne idée d'en faire une copie de sauvegarde! De préférence, mettez cette copie dans le répertoire personnel de root. La configuration changeant très peu entre les révisions du noyau (c'est-à-dire entre deux noyaux 2.2.x ou 2.3.x ou...), vous pourrez vous en resservir pour configurer vos futurs noyaux.

Maintenant, place à la compilation.

Compilation et installation des modules

Tout d'abord une petite chose: si vous compilez un noyau de version identique à une version déjà présente sur votre système, les modules de ce dernier doivent être effacés avant. Par exemple, si vous recompilez un noyau 2.2.10, il vous faudra effacer le répertoire /lib/modules/2.2.10.

La compilation du noyau et des modules, ainsi que l'installation des modules se font en une seule ligne:

$ make dep && make bzImage && make modules &&
  make modules_install

Si vous vous demandez à quoi sert ce fameux &&, voici l'explication: a && b exécute d'abord a, et exécute b si et seulement si a s'est terminé avec succès. Par extension vous imaginez donc ce que fait la ligne de commande ci-dessus: si l'une des commandes échoue, celles qui suivent ne seront pas exécutées. Une autre conséquence en cas d'échec est qu'il y a un bogue dans le noyau! Si c'est le cas, signalez-le nous...

Autre chose encore: non, compiler un nouveau noyau n'invalidera pas l'ancien! Si la compilation échoue ici, cela ne veut pas dire que votre système ne pourra plus démarrer. Pour empêcher votre système de démarrer, il faut vraiment que vous fassiez une grosse bêtise --- ce qui, autant vous rassurer, ne vous arrivera pas si vous respectez scrupuleusement les consignes de ce chapitre :)

Installation du nouveau noyau, mise à jour de LILO

Votre noyau étant maintenant compilé avec succès, il reste à l'installer. Toujours pour rester « propre » et identifier vos noyaux de façon non ambiguë, il est préférable de respecter une certaine discipline de nommage. On va supposer que vous installez un noyau 2.2.13. À ce moment-là, tapez les commandes suivantes:

$ cp arch/i386/boot/bzImage /boot/vmlinuz-2.2.13
$ cp System.map /boot/System.map-2.2.13

Après cela, il vous reste à mettre à jour /etc/lilo.conf. Évidemment, gardez la possibilité de démarrer votre noyau actuel! Voici à quoi ressemble un lilo.conf typique, après installation de votre distribution Linux-Mandrake et avant modification:

boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only
other=/dev/hda2
        label=dos
        table=/dev/hda
Attention: Cet exemple suppose que vous utilisez LILO en tant que chargeur principal! Si vous utilisez System Commander, la directive boot= sera différente, et vous n'aurez probablement pas de section other.

Un fichier lilo.conf est composé d'une section principale, suivie 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
install=/boot/boot.b
prompt
timeout=50

La directive boot= dit à LILO où il doit installer son secteur de boot; en l'occurrence, il s'agit du MBR (Master Boot Record, « enregistrement principal de démarrage ») 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 l'invite au démarrage et d'entamer la procédure après 5 secondes (timeout=50). Si vous retirez la directive timeout=, LILO attendra jusqu'à ce que vous ayez tapé quelque chose.

Puis vient une section linux:

image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only

Une section linux commence par la directive image=, suivie par le chemin complet vers un noyau Linux valide. À l'instar de toute section, elle contient une directive label= pour l'identifier de façon unique. La directive root= dit à LILO quelle est la partition hébergeant le système de fichiers racine pour ce système Linux, elle pourra être différente chez vous. 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.

Puis vient la section Windows:

image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only

En fait, une section débutant par other= sert à LILO pour démarrer tout système d'exploitation autre que Linux: l'argument de cette directive est l'emplacement du secteur de boot de ce système, et en l'occurrence il s'agit d'un système Windows. Pour trouver le secteur de boot, situé au début de la partition hébergeant cet autre système, Linux a également besoin de savoir où se trouve la table des partitions qui lui permettra de localiser la partition en question, ce que fait la directive table=. La directive label=, comme pour une section linux, sert à identifier le système.

Avant de rajouter notre section linux, nous allons faire d'une pierre deux coups :) Composons un message qui s'affichera au démarrage avant l'apparition du prompt LILO, et qui explique comment utiliser celui-ci:

$ cat >/boot/message <<EOF
> Bienvenue, ici LILO (LInux LOader).
> Tapez sur la touche TAB pour avoir une liste des images de boot .
> Vous disposez de:
> * exp : démarrage de Linux-Mandrake avec votre nouveau noyau
> * linux : noyau d'origine de Linux-Mandrake
> * dos : Windows
> Appuyer sur ENTREE sans entrer le nom d'une image démarrera
> la première image sur la liste, à savoir exp .
> EOF
$

Et voilà! Pour que ce message s'affiche au boot, il suffit de rajouter la directive:

message=/boot/message

dans la section principale de lilo.conf. Maintenant, il faut rajouter la section Linux pour pouvoir démarrer sur le nouveau noyau. Dans cet exemple, elle sera mise en tête, mais rien ne vous empêche de la mettre à un autre endroit:

image=/boot/vmlinuz-2.2.13
        label=exp
        root=/dev/hda1
        read-only

Si vous avez compilé votre noyau avec le framebuffer, vous voudrez sans doute l'exploiter: dans ce cas, il faut rajouter une directive à la section qui lui indique en quelle résolution 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[26], le numéro du mode est 0x315, il faut donc rajouter la directive:

vga=0x315

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

#
# Section principale
#
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
# Notre message d'invite
message=/boot/message
# Présenter le prompt...
prompt
# ... attendre 5 secondes
timeout=50
#
# Notre nouveau noyau: image par défaut
#
image=/boot/vmlinuz-2.2.13
        label=exp
        root=/dev/hda1
        read-only
# Si on utilise le framebuffer VESA:
        vga=0x315
#
# Le noyau d'origine
#
image=/boot/vmlinuz-2.2.9-19mdk
        label=linux
        root=/dev/hda1
        read-only
#
# Section Windows
#
other=/dev/hda2
        label=dos
        table=/dev/hda

N'oubliez pas d'adapter le fichier à votre configuration! Le système de fichiers racine de Linux est ici /dev/hda1 mais il peut très bien être ailleurs chez vous, et la même chose est valable pour Windows. Maintenant que le fichier est modifié de façon appropriée, il faut dire à LILO de changer le secteur de boot:

$ lilo
Added exp *
Added linux
Added dos
$

Vous pouvez ainsi compiler autant de noyaux que vous le souhaitez, en rajoutant autant de sections Linux que nécessaire. Il ne vous reste plus qu'à redémarrer pour tester votre nouveau noyau.

Partie III : Annexes, glossaire et index



Suivant : Installation d'un logiciel libre
Précédent : Systèmes de fichiers et points de montage
Retour

Copyright © 2000 MandrakeSoft