| - Prudence ! En cas de mauvaise manip, vous risquez de casser votre système (et obtenir un 'kernel panic' au reboot). Si vous n'avez pas d'autres distributions sous la main, il faudra alors reinstaller. Je vous conseille d'avoir une partition /home séparée pour être à l'abri des catastrophes.
- Il n'est pas facile de décrire ce processus pour toutes les distributions. Si vous voyez des erreurs ou des manques, signalez les svp.
|
Je considère que vous avez lu les articles sur l'installation de softs, sur la console et sur le bootloader. Enfin, sachez vous servir d'un éditeur de texte en mode console. Prévoyez une ou deux heures la première fois.
Il faut également les privilèges administrateur.
IntroductionPourquoi compiler ce noyau ? Pour le traduire les sources du noyau en exécutable et pour l'adapter à votre matériel. Les distributions GNU-Linux lors de l'installation réalisent ce travail mais pêchent un peu sur l'adaptation (pour éviter que le débutant ai des choix compliqué à faire). Vous pourriez alors avoir envie d'optimiser votre système en recompilant un noyau plus proche de votre réalité.
Par ailleurs, le noyau Linux est révisé plus fréquemment que votre distribution GNU-Linux. La mise à jour manuelle du noyau est alors tentante, surtout si le nouveau noyau gère un matériel qui est mal ou pas géré par l'ancien.
Enfin, vous êtes peut-être simplement un(e) passioné(e) qui veut juste s'amuser un peu .
Compiler son noyau (surtout la première fois) nécessite de la patience et de bien connaître son matériel (sortez vos manuels : carte mère notamment). Parler anglais est un atout. Ce n'est pas si compliqué que ça finalement. En tout cas, compiler un noyau est souvent un passe-temps et rarement une nécessité...
Allons-y...
Je ne parlerais dans ce tuto que de la compilation du noyau 2.6.x (pour les noyaux 2.4.x, rendez vous ici).
Pré-requis
Le prérequis obligatoire est l'installation des sources du noyau. Vérifiez également que le compilateur gcc est présent (faite un $ which gcc pour vous en assurer, sinon installez le paquetage). Assurez-vous aussi que le lien symbolique /usr/src/linux pointe vers les bonnes versions du noyau :
$ ls -l /usr/src
Bash compilera les sources (vous pourriez en avoir plusieurs) contenues dans le dossier vers lequel pointe le lien symbolique /usr/src/linux. Patch du noyau
Si vous désirez appliquer un patch compressé avec gzip (exemple nom.gz) au noyau pour ajouter des fonctionnalités, c'est le moment :
# cp /chemin/nom.gz /usr/src/linux
# cd /usr/src/linux
# gunzip nom.gz
# patch -P1 < nom.patch
Je n'ai jamais essayé .
Etape de configuration
C'est la plus longue et la plus complexe. Soyez attentif à ce que vous faites. Il s'agit de générer un fichier de configuration (/usr/src/linux/.config) que le compilateur utilisera.
Sauf pour les gentooistes qui construisent leur système, vous pourriez utiliser comme base le fichier déjà fourni par votre distribution (pour bénéficier des choix déjà faits). Il peut aussi se trouver dans /boot/config-2.6.x. Où qu'il soit, faites en une copie de sauvegarde.
Si vous ne trouvez pas ce fichier, tant pis il vous faudra tout passer en revue. Il faut maintenant personnaliser ce fichier. Allons y :
# cd /usr/src/linux
Se place dans le bon dossier
# make xconfig
Pour un paramètrage dans X, l'environnement graphique (KDE, Gnome etc.).
# make menuconfig
Alternativement pour un paramétrage en dehors de X.
Voici un screenshot suite à un xconfig :
Il s'agit alors de parcourir toutes les options et d'indiquer pour chacune s'il faut les intégrer dans le corps du noyau, en tant que module séparé appelable ou bien les désactiver.
Il vous faut donc bien connaître votre matériel pour prendre ce qui est nécessaire et éviter le superflu. Plus vous intégrez des fonctionnalités au noyau, plus il sera lourd. Ainsi, si vous n'avez pas de Bluetooth, décochez les options Bluetooth. Si vous insérez alors du matériel Bluetooth, il ne sera pas reconnu : il faudra alors recompiler le noyau en activant les options. La modularité est un compromis : le module n'alourdit pas le noyau mais reste appellable. Attention, certaines options ne doivent pas être mises en module (comme le gestionnaire du système de fichier Ext3, ReiserFS etc.) ! Aidez-vous de la section Help pour savoir quel choix faire, même si cette aide est générale et ne corresponds donc pas forcément à votre matériel.
Deux commandes peuvent vous aider :
- lspci (ou lsusb) donne de l'information sur le matériel.
- dmesg vous donne les messages du noyau. Pratique pour savoir comment il réagit suite à l'insertion de matériel.
Prenez donc votre temps, documentez vous. Enfin, enregistrez le fichier en cliquant sur la disquette. Avec 'make menuconfig' il faut choisir 'exit' jusqu'à ce qu'on vous propose de sauver.
Etape de compilation
La suite est plus simple. Faites en console :
# cd /usr/src/linux
# make && make modules_install
Selon la taille du noyau et de la puissance de votre ordi, vous pouvez en avoir pour 5 minutes ou une heure...
Etape d'installation
Installez ensuite le noyau :
# cd /usr/src/linux
# cp arch/votre_architecture/boot/bzImage /boot/nom_du_noyau
Attention, adaptez selon votre architecture de processeur : i386 (32 bits) ou x86_64 (64 bits). Vous avez du aussi paramétrer le CPU à l'étape de configuration du noyau. Le nom du noyau est laissé à votre convenance mais certaines distributions ont leurs exigences (vmlinuz-version par exemple)...
Il faut bien comprendre que si vous écrasez un noyau (probablement celui qui est en cours de fonctionnement d'ailleurs), il ne sera plus disponible après reboot. Si votre compilation rate, la distribution ne sera plus démarrable. Il est donc sage de nommer le nouveau noyau autrement
(passage à revoir)
Enfin, certaines distri demandent à faire :
# cp System.map /boot/System.map-2.6.x
Adaptez le nom (2.6.x). Vérifiez que ce nom n'existe pas dans /boot (faites en alors une copie de sécurité). Faites ensuite ceci (pas nécessaire pour toutes les distributions):
# cd /boot
# rm vmlinuz
# ln -sf /boot/vmlinuz-2.6.x vmlinuz
# rm System.map
# ln -s System.map-2.6.x System.map
Si votre distribution utilise initrd (Mandriva ou Fedora par exemple) pour démarrer, tapez en plus :# mkinitrd -o /boot/initrd-2.6.10 /lib/modules/2.6.x
Adaptez le nom (2.6.x).
Mise à jour du bootloader
En cas d'erreur, il est interressant de pouvoir démarrer sur l'ancien noyau afin de ne pas être bloqué(e) en lancant le nouveau noyau. Il faut donc modifier votre boot loader (lilo ou grub) en conséquence. Si vous vous sentez confiant, passez cette étape, que je vous recommande tout de même.
Je n'expliquerai que pour ceux utilisant Grub. Ouvrez le fichier /boot/grub/menu.lst avec les privilèges administrateurs. Vous devez dupliquer le bloc qui appelle l'ancien noyau et l'adapter. Je vous donne un exemple ci-dessous, mais ne le recopiez pas à l'identique ! Adaptez le....
Avant | title Linux (2.6.15) root (hd1,1) kernel /boot/2.6.15 root=/dev/sda2 initrd (hd0,5)/boot/initrd-2.6.10 |
|
Après | title Linux (2.6.15) root (hd1,1) kernel /boot/2.6.15 root=/dev/sda2 initrd (hd0,5)/boot/initrd-2.6.15
title Linux (2.6.16) root (hd1,1) kernel /boot/2.6.16 root=/dev/sda2 initrd (hd0,5)/boot/initrd-2.6.16 |
Dans cet exemple, cette partition /boot (sda2) contient deux images de noyau : 2.6.15 et 2.6.16. Ne changent donc que le nom du noyau (la version en fait) et le titre sous lequel il apparaitra dans Grub. Sauvez le fichier, faites une prière et redémarrez.
Attention, toutes les distributions n'utilisent pas initrd. Mandriva l'utilise et Gentoo pas, par exemple. Pour ceux qui n'en n'ont pas, enlevez la ligne initrd.
Réparer les bêtises
J'espère que vous fait une copie de sécurité de tous les fichiers pour que Grub puisse démarrer l'ancien noyau. Recommencez alors la compilation... Vous pouvez aussi monter la partition racine problématique dans une autre distribution Linux (voire un CD-live) et recommencer le boulot.
Avec un Cd-live ou une autre distri, tout s'arrangera : la réinstallation n'est pas nécessaire si vous savez quoi faire. Si vous ne savez pas, il est sûrement plus rapide de réinstaller la distribution que d'attendre 3 jours sur un forum. Le crucial /home ne devrait pas être ré-initialisé (surtout si /home est situé sur une partition dedié).
Liens externes
Voici quelques tutoriels en français très bien fait :
- lea-linux
- HOWTO du noyau Linux
- Tuto Mepis
- Tuto Gentoo (adaptable).
- Tuto de Trustonme.net
- tutoriel sur un site perso