Copyright © 2003 Yves Mettier
L'article original se trouve sur http://ymettier.free.fr/articles_lmag/.
Article publié dans le numéro 15 (janvier/février 2003) de Linux Pratique
Table des matières
Vous savez plus ou moins ce qu'est le noyau Linux, et vous avez déjà entendu parler que tout vrai linuxien doit avoir recompilé son noyau. Alors je vais essayer de clarifier un peu tout cela.
Le noyau linux, comme tout noyau qui se respecte, est un logiciel à part entière mais un peu particulier. En effet, sans lui, rien ne marche. Le noyau est en fait le logiciel qui met le matériel à disposition des autres logiciels. Ainsi, c'est grâce au noyau que votre logiciel de lecture de CD ou de mp3 est capable d'envoyer de la musique sur la carte son. C'est aussi le noyau qui vous permet d'exécuter plusieurs programmes en même temps, comme votre navigateur internet et votre éditeur de texte favori!
Le noyau est responsable de plusieurs tâches. Il doit:
gérer les fichiers
gérer les processus (les programmes)
gérer les ressources (la mémoire, l'imprimante, la carte son...)
Les autres tâches sont gérées par d'autres programmes, comme par exemple XFree86 pour l'affichage de beaux graphiques ou tout simplement de vos fenêtres.
Cette question est une question essentielle. En effet, si vous n'apportez pas de réponse à cette question, je vous déconseille vivement de recompiler votre noyau. Mais via cet article, je vais vous présenter plusieurs réponses possibles avant de voir comment on fait.
Le noyau Linux gère donc votre imprimante, votre carte son, votre carte vidéo, votre carte réseau, votre modem, votre disque dur, votre lecteur CD, votre graveur, votre... Arrêtons-nous la pour la liste. Pour effectuer cela, Linux utilise, comme d'autres systèmes d'exploitation, des pilotes. Contrairement à son meilleur concurrent Windows, Linux, pour le matériel supporté, dispose de la quasi totalité des pilotes sans que l'on ait besoin de chercher des pilotes ailleurs. Par conséquent, lorsque vous installez GNU/Linux pour la première fois (et même après), si votre matériel est supporté, les pilotes sont installés et il n'y a pas besoin de recompiler quoi que ce soit.
Ainsi donc, si vous disposez d'un matériel dont le pilote n'est pas inclus dans Linux mais est externe, suivez les recommandations du constructeur qui peut vous demander de recompiler le noyau. Il peut aussi arriver que dans la distributions que vous avez choisie, les pilotes de votre matériel ne soient pas installés. Là aussi, une recompilation de noyau s'impose. Attention tout de même, si vous avez un problè avec votre carte son, votre modem ou votre imprimante, il se peut que votre Linux soit parfaitement opérationnel, mais que ce soit le logiciel qui soit mal configuré. Ne vous précipitez pas non plus vers la recompilation du noyau comme solution ultime.
Une petite remarque concernant les pilotes de la carte graphique. Linux se contentant, sauf exception (le framebuffer) d'afficher du texte, il n'a nullement besoin d'un pilote évolué pour afficher des lignes de texte. Et comme je l'ai mis plus haut, c'est dans 99% des cas XFree86 qui gère l'affichage. Par conséquent, recompiler le noyau ne changera rien du tout si vous n'arrivez pas à configurer l'affichage.
Votre distribution a été installée avec succès, et vous pouvez bien évidemment lire vos fichiers, ainsi que ceux de Windows si vous avez gardé Windows. Mais peut-être voulez-vous aussi partager des fichiers via le vieux et performant système NFS, ou alors pouvoir voir des fichiers sur une partition NTFS ou même celle de FreeBSD (FreeBSD est un autre concurrent de Linux) par la suite? Si votre distribution n'a pas installé cela, vous pouvez aussi recompiler votre noyau pour ajouter la fonctionnalité.
Le noyau ne se contente pas de fournir une interface entre les périphériques ou les fichiers et les applications, mais propose aussi quelques fonctionnalités que je qualifie de gadget par pure provocation. Ainsi, avec un logiciel adéquate, et à condition d'activer la fonctionnalité correspondante dans le noyau, vous pouvez surveiller quelques paramètres physiques de l'ordinateur tel que la température! Il existe aussi un serveur web simplifié mais ultra rapide dans le noyau. Si vous avez besoin ou même envie de jouer avec tout ceci, et si cela n'était pas compilé lorsque vous avez installé votre distribution, alors la recompilation est une étape obligatoire!
Linux, tout comme les logiciels libres, a une réputation de système sur. Cette sécurité a tout de même un coût: il faut tenir à jour son système. En effet, un bogue, comme un trou de sécurité affaiblit le système et il est conseillé de tenir à jour son noyau (comme tous les logiciels d'ailleurs) pour ne pas laisser la porte ouverte aux pirates avides de bugs et/ou trous de sécurité connus et non bouchés. Les distributions mettent à disposition une mise à jour du noyau et vous pouvez tout à fait utiliser le logiciel de mise à jour de votre distribution. Vous pouvez aussi ne pas faire confiance a votre distribution pour un composant aussi sensible que le noyau et faire la mise à jour vous-même, ce qui passe par une recompilation du noyau. Dans ce second cas, ayez en tête une chose. Lisez le Changelog, fichier des modifications apportées au noyau depuis la version que vous utilisez. Ainsi vous vérifiez ce qui a changé, et vous avez moins de mauvaises surprises en cas de problème: la modification qui vous gènerait est forcément dans ce fichier.
Certaines fonctionnalités ou pilotes du noyau ne sont pas intégrées au noyau pour diverses raisons, entre autres parce qu'elles sont trop récentes et pas assez testées, ou alors parce que la fonctionnalité n'est pas libre, et de nombreuses autres raisons. Pour pouvoir profiter de ces fonctionnalitées ou pilotes, vous devez réaliser une opération que l'on appelle patcher le noyau, c'est-à-dire fusionner le code source de la fonctionnalité ou du pilote avec le code source du noyau. Cette opération rajoutant un élément qui n'est pas présent par défaut, on se retrouve dans un cas précédent: il faut recompiler le noyau pour pouvoir profiter de la fonctionnalité ou du pilote.
Compiler son noyau, ne le cachons pas, procure aussi un certain plaisir à certains (il y a tant de curiosités dans le monde des geeks!). Ceux-la sont souvent ceux qui poussent le plus les autres à recompiler leur noyau même si c'est inutile, invoquant des raisons de peu d'importance. Demandez-leur pourquoi ils recompilent leur noyau: soit ils ne sauront pas vous répondre, soit ils invoqueront d'obscure raisons de sécurité qu'ils n'ont pas vraiment comprises eux-mêmes. Ceux-là recompilent leur noyau par plaisir et cherchent à vous faire partager leur plaisir, ce qui est un peu normal.
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.
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!
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.
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.
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!
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.
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.
Cet article avait pour but autant de vous présenter le noyau que de vous expliquer comment le compiler. L'aide que vous pouvez trouver pendant la configuration du noyau justifie a elle-seule la recompilation du noyau, même si vous n'avez pas besoin d'aller jusqu'au bout: elle est très intéressante pour ceux qui s'intéressent au système et au noyau Linux!
Les sources du noyau: http://www.kernel.org
La page de Léa-Linux pour un excellent complément d'information: http://lea-linux.org/kernel/kernel.php3
Plein de documentation dans /usr/src/linux/Documentation/
© 2003 Yves Mettier