8. La recompilation

8.1. Pour vous décourager...

Si vous avez suivi jusqu'ici, et que vous avez toujours une bonne raison de compiler le noyau, alors allons-y. Notez que les raisons pour voir comment on fait ou pour decouvrir tout ce qu'on peut faire avec le noyau sont pour moi de bonnes raisons! Par contre, si vous n'avez pas ou plus de bonne raison de le recompiler, ne croyez pas que ce soit obligatoire, que cela marchera mieux après, ou que vous ferez ainsi votre baptême de hacker. Si vous n'avez pas de bonne raison de recompiler votre noyau, donc, ne le recompilez pas!

Vous avez donc choisi de recompiler votre noyau. Je vais vous avertir sur les risques que vous encourrez: il est inutile de les cacher. Le premier risque est que vous ne recompiliez pas un noyau 100% adapté à votre configuration matérielle et à vous désirs logiciels. Si vous en recompilez trop, tout se passera bien: qui peut le plus peut le moins. Mais si vous oubliez une fonctionnalité indispensable au bon fonctionnement de Linux (au hasard: le pilote du disque dur), alors au mieux, le périphérique ne sera pas utilisable (seulement génant si c'est le port parallèle: votre imprimante ne marchera pas), et au pire, vous ne pourrez pas rebooter.

Si vous compilez le noyau avec les bonnes fonctionalités, mais que vous faites une fausse manipulation après, ou que vous oubliez une étape, la sanction sera la même: fortes probabilités de ne pas pouvoir rebooter.

8.2. Précautions à prendre

Deux précautions sont à prendre avant de faire quoi que ce soit. La première est de créer une disquette de secours (rescue disk). Reportez-vous au manuel de votre distribution pour savoir comment la générer, et reportez-vous à ce même manuel si vous avez la malchance d'être dans l'obligation de l'utiliser.

Et bien évidemment, on ne vous le répètera jamais assez: faites des sauvegardes! Si vous pouvez graver et que vous savez le faire, faites-le. Sinon, mettre vos données qui sont sur les partitions de GNU/Linux sur une partition de Windows n'est pas une trop mauvaise idée. Le plus sur est cependant d'avoir une partition Linux distincte des partitions système (/, /boot...) pour y mettre ces données et uniquement ces données. Si vous n'avez pas une telle partition, et que vous réinstallez GNU/Linux pour une raison ou pour une autre, pensez à cette partition!

Si je ne vous ai toujours pas découragé de recompiler votre noyau, sachez que dans le pire des cas, si la disquette de secours ne suffit pas pour rétablir la situation, vous devrez réinstaller GNU/Linux. Ni l'éditeur ni moi-même ne saurions être tenus responsables de la perte partielle ou totale de votre système d'exploitation ou de vos données. Mais comme l'on dit, on ne fait pas d'omelette sans casser des oeufs! Ou encore, c'est en faisant des erreurs que l'on apprend!

8.3. Récupérez les sources

Récupérez les sources du noyau, la version qui vous intéresse, probablement la version 2.4.19 qui est la plus récente au moment où j'écris cet article. Elle se trouve sur http://www.kernel.org/ et sur ses nombreux miroirs. Vous devriez obtenir un fichier linux-2.4.19.tar.gz ou linux-2.4.19.tar.bz2. Une petite remarque au sujet des numéros de version. Vous verrez peut-être un noyau numéroté 2.5.x. Oui, il est plus récent. Mais je vous déconseille fortement de prendre un tel noyau à moins de vouloir partir à l'aventure. En effet, le second chiffre dans la numérotation du noyau est un numéro pair (ici, 4) pour un noyau stable, et un numéro impair (ici, 5) pour un noyau en plein développement. Qui dit développement, dit probablement instable, et c'est pour cela que je vous le déconseille.

En tant que root, vérifiez que vous n'avez pas déjà un répertoire ou un lien /usr/src/linux. Si oui, sauvegardez-le (ou si c'est un lien, supprimez-le) car on va devoir écraser ce répertoire (ou lien). En tant que root toujours, décompressez cet archive dans /usr/src: cd /usr/src suivi de tar xvzf linux-2.4.19.tar.gz ou tar xvjf linux-2.4.19.tar.bz2. Cela vous crée normalement un répertoire linux. L'habitude veut que l'on renomme ce repertoire en indiquant le numéro de version du noyau: mv linux linux-2.4.19, et que l'on fasse un lien symbolique dessus: ln -s linux-2.4.19 linux.

8.4. Configuration du noyau

Allez ensuite dans ce répertoire: cd linux. Puis lancez au choix make menuconfig ou make xconfig. Captures d'ecran de make xconfig et de make menuconfig bienvenues ici En cas d'erreur ici, sachez que le premier a besoin du paquetage ncurses-devel et que le second a besoin de tcl/tk (les noms changent suivant les distributions). Ici est la partie la plus intéressante mais aussi, au début, la plus longue, de la compilaiton du noyau. Vous devez activer ou desactiver les fonctionnalités en fonction de votre machine et en fonction de ce que vous voulez la voir faire. C'est la partie la plus intéressante car avec l'aide en ligne, vous allez découvrir plein de possibilités qu'offre le noyau Linux. C'est aussi la partie la plus longue car si vous passez cinq minutes par option sur l'aide en ligne, vous n'aurez pas fini en 24h. Il faut donc y aller petit à petit, et heureusement, vous n'aurez surement pas besoin de voir l'aide de toutes les fonctionnalités.

Lorsque vous décidez d'activer une fonctionnalité, il se présente souvent deux cas: soit [y] soit [m]. Le [y] est évident: vous activez la fonctionnalité dans le noyau. Le [m] signifie que vous activez la fonctionnalité en tant que module. Cela signifie que vous allez compiler un module, c'est-à-dire un fichier binaire indépendant du noyau, et qui ne se chargera que lorsque le noyau en aura besoin. Ainsi, si vous mettez vfat en module, le noyau ne chargera ce module que si vous voulez lire une partition Windows 98 car elles sont en vfat.

Il se trouve une fonctionnalité, initrd qui consiste en la création d'un ram-disque au démarrage du noyau. A moins de bien savoir ce que c'est, désactivez cette fonctionnalité. Sinon, vous aurez quelques manipulations supplémentaires à effectuer, non décrites dans cet article.

A la fin, quittez en sauvant la configuration, comme on vous le propose par défaut.

8.5. La compilation

Normalement, la compilation se fait ainsi: make dep &&make clean &&make bzImage &&make modules &&make modules_install Il peut arriver qu'il y ait un problème de compilation, mais c'est assez rare. A l'issue de cette commande, le noyau est compilé et partiellement installé.

Si vous avez déjà compilé votre noyau, que vous reprenez la configuration précédente, et que les seules modifications que vous apportez sont l'ajout de modules, alors tout est plus simple. En effet, la ligne de commande devient make modules &&make modules_install. Et c'est fini, vous n'avez même pas besoin de rebooter, ni de faire ce qui suit. Pour cela, préférez les modules quand vous le pouvez!

8.6. L'installation

En fait, avec l'étape précédente, les modules dynamiques ont été installés, mais il reste à installer le noyau lui-même. Le noyau, c'est, si vous êtes sur un PC, le fichier arch/i386/boot/bzImage, et vous allez le renommer et le recopier avec celui qui tourne actuellement. Si vous avez un fichier /vmlinuz, alors copiez bzImage en /vmlinuz-2.4.19. Si vous avez un fichier /boot/vmlinuz, bzImage doit devenir /boot/bzImage. Et ainsi de suite. N'écrasez JAMAIS votre ancien noyau: il peut vous servir si vous avez fait une erreur avec le nouveau noyau. Faites aussi un lien vmlinuz pointant sur votre tout nouveau noyau (assurez-vous que le fichier n'existe pas avant de faire le lien): ln -s vmlinuz-2.4.19 vmlinuz Ce lien nous servira pour la suite avec lilo.

Vous devez avoir aussi, pas loin de l'ancien noyau, un fichier System.map. Si c'est un lien, supprimez-le, et si c'est un fichier, renommez-le. Et à la place de ce fichier System.map, mettez celui que vous trouverez ici: /usr/src/linux/System.map.

8.7. lilo/grub et votre prochain reboot

Utilisez-vous lilo ou grub? Si vous le savez, passez ` la suite. Sinon, statistiquement, il y a beaucoup plus de chances que ce soit lilo: la plupart des distributions utilisent lilo pour son écran de choix de Windows/Linux graphique, alors que grub ne fait encore que du mode texte.

Si vous utilisez lilo, dans le fichier /etc/lilo.conf, ajoutez au bon endroit (il y en a plusieurs), par exemple à la fin, après vous être assuré qu'elles n'étaient pas déjà présentes, les lignes suivantes:

image=/boot/vmlinuz (mettez le chemin de VOTRE noyau ici)
 label=linux
 read-only
 root=/dev/hda2 (regardez les autres lignes et remplacez hda2 par ce qui est sur les autres lignes)

Sauvegardez, puis exécutez lilo. Au prochain reboot, vous pourrez ainsi booter sur votre nouveau noyau en choisissant linux.

Si vous utilisez grub, éditez le fichier de configuration de grub, grub.lst dans /boot, et adaptez-le à votre configuration. Puis exécutez grub root (hd0,1) setup (hd0). Remplacez hd0 par hd1 si vous utilisez non pas hda mais hdb pour GNU/Linux, ou hd2 si c'est hdc, et ainsi de suite. Et si GNU/Linux est sur la troisième partition du premier disque, hda3, c'est (hd0,2) qu'il faut utiliser; pour hda1, c'est (hd0,0) et ainsi de suite.

création est mise à disposition sous un contrat Creative Commons