Configurer / compiler le noyau

De UnixManiax
Aller à : navigation, rechercher


REMARQUE : cette méthode ne s'applique qu'aux noyaux 2.6. Pour les noyaux plus anciens, je vous renvoie vers votre moteur de recherche préféré ;o).


La configuration / compilation du noyau est souvant quelquechose qui inquiète les débutants. C'est effectivement assez long si on décide de regarder en détail tous les modules, et la compilation elle-même peut durer longtemps (compter environs 45 minutes pour compiler un noyau 2.6.15.4 (38 Mo compressé) sur un portable Pentium 4 3,2 GHz avec 512 Mo de RAM). Mais là, c'est l'ordinateur qui fait tout le boulot. En réalité, ça n'est pas très compliqué et surtout, c'est sans aucun risque, puisque l'ancien noyau n'a pas besoin d'être supprimé. Il suffit donc de redémarrer sur ce dernier pour que tout refonctionne ! On peut donc se lancer sans apréhension, mais avec un peu de temps devant soit, dans la compilation de son noyau.

La compilation du noyau peut se résumer en 4 étapes :

  • récupération des sources
  • configuration du noyau
  • compilation
  • mise à jour du programme d'amoiçage (LILO ou GRUB)


Récupération des sources

Si vous voulez juste modifier la configuration de votre noyau actuel, passez à l'étape 2.

Si vous voulez compiler un nouveau noyau, il faut télécharger les sources sur l'un de ces sites : www.kernel.org, ftp.kernel.org, www.fr.kernel.org, ftp.fr.kernel.org, (il en existe bien sûr d'autres, mais ce sont les principaux). Par exemple, le noyau 2.6.15.4 se trouve dans le répertoire v2.6 et se nome linux-2.6.15.4.tar.bz2.

Il faut ensuite copier le source dans /usr/src.

# mv linux-2.6.15.4.tar.bz2 /usr/src

Puis le décompresser et désarchiver :

# tar jxvf linux-2.6.15.4.bz2

On obtient alors un nouveau répertoire dont le nom correspond à la version de notre nouveau noyau (donc /usr/src/linux-2.6.15.4 pour notre exemple).

Configuration du noyau

Avant d'aller plus loin, il faut installer les sources du noyau qui s'appellent kernel-headers, linux-kernel-headers ou kernel-source, selon les distributions.

On se déplace maintenant dans notre nouveau répertoire :

# cd linux-2.6.15.4

A cette étape, on va choisir ce qu'on va charger dans son futur noyau. C'est là qu'on va pouvoir ajouter/supprimer des pilotes ou des fonctionnalités à son linux. Par exemple, c'est ici qu'on va charger les pilotes de sa carte réseau ou de sa carte son, ou alors qu'on va decider si notre linux pourra lire et écrire sur des partitions FAT. Plus on va ajouter de choses, plus notre système sera riche, mais plus il sera lourd et long à démarrer.

Une fonction intéressante des noyaux linux depuis la version 2 je crois, est qu'on peut charger un pilote sous forme de module. C'est à dire, qu'il ne sera pas intégré au noyau, mais il pourra être chargé ou déchargé quand le besoin s'en fait sentir. Ca permet d'avoir un noyau plus léger, tout en évitant d'avoir à recompiler à chaque fois qu'on change une carte dans son pc. Mais tout ne peut pas se mettre en module. D'une manière générale, le mieux est de mettre les choses essentielles directement dans le noyau (support ide et scsi par exemple), ce qui peu ou risque de servir en module (support des modems, des cartes reseau, etc), et de ne pas mettre tout ce qui a très peu de chance de vous servir.

Il existe plusieurs possibilités pour éditer le fichier de configuration :

  • make config : mode texte, ou on choisi une à une toutes les options (c'est à dire des centaines !), sans possibilité de retour arrière. Très fastidieux. Déconseillé.
  • make menuconfig : toujours en mode texte, mais avec des menus dans lesquels on peut naviguer. Tout est classé par catégories. C'est nettement mieux, on gagne un temps fou. Pour pouvoir lancer cette commande, il faudra d'abord installer les paquets libncurses5-dev et fakeroot.
  • make xconfig : comme menuconfig, mais en mode graphique, avec la souris. Le top. Ici, il faudra d'abord installer le paquet libqt3-mt-dev.
  • make gconfig : identique à xconfig, mais avec les bibliothèques graphiques de gnome. Il faudra d'abord installer le paquet liglade2-dev.


Compilation-noyau-make-config.png Compilation-noyau-make-menuconfig.png
make config - franchement laborieux ! make menuconfig - nettement mieux
Compilation-noyau-make-xconfig.png Compilation-noyau-make-gconfig.png
make xconfig - c'est-y pas magnifique ça ? make gconfig - trop top !


S'il existe un ancien fichier de configuration, on peut aussi taper make oldconfig.

Si vous compilez votre noyau pour la première fois, le mieux est de récupérer le fichier de config actuel, et simplement modifier les points qui vous intéressent. Car si on part d'un fichier vierge, on risque de ne jamais pouvoir booter sur notre nouveau noyau, à moins de vraiment s'y connaitre. Pour récupérer l'ancien fichier de config, ça peut varier d'une distribution à l'autre. Normalement, il faut aller dans le répertoire /boot et repérer le ou les fichiers qui commencent par config-2.6. Dans mon cas, ce fichier se nome config-2.6.12.10-686. On va alors remplacer notre fichier de config actuel par celui-ci avec les commandes suivantes :

# ls -a /boot                        <== pour voir les fichiers  dans /boot tout en restant dans notre répertoire de travail 			
# cp /boot/config-2.6.12.10-686 ./   <== copie le fichier dans le répertoire de travail 			
# rm .config                         <== supprime l'ancien fichier de config 			
# mv config-2.6.12.10-686 .config    <== renome le fichier pour qu'il soit pris en compte

Maintenant, il ne reste plus qu'à éditer ce nouveau fichier avec make xconfig ou la commande de votre choix, et d'apporter les modifications voulues. Une fois terminé, on va pouvoir passer à la compilation.

Compilation

Cette partie dure longtemps, mais c'est l'ordinateur qui fait tout. On a fait le plus dur. Pour vous donner un ordre d'idée, il m'a fallu un peu moins de 45 minutes pour compiler un noyau 2.6.15.4 (38 Mo compressé) sur un portable Pentium 4 3,2 GHz avec 512 Mo de RAM.

On a cinq commandes à taper dans l'ordre :

  • make : compile le noyau - environs 40 minutes dans mon cas, le plus long
  • make modules : compile les modules - environs 1 min 30s
  • make modules_install : installe les modules - environs 1 min 30s
  • make install : installe le nouveau noyau - environs 30s


La dernière commande ne fait pas partie de la compilation elle-même, mais elle est nécessaire pour pouvoir redémarrer le système. Ici, on va créer un fichier /boot/initrd.img-2.6.15.4 qui est une sorte de RAM initiale qui va se charger en RAM au démarrage de linux. Certaines distributions n'utilisent pas ce fichier. Pour savoir si vous avez besoin ou pas de faire cette étape, il suffit de regarder dans le fichier de config de votre gestionnaire de démarrage ; vous observez les lignes correspondant à votre ancien noyau, et si vous avez une ligne qui contient initrd, alors c'est nécessaire. Sinon, passez à l'étape suivante.

  • mkinitrd -o /boot/initrd.img-2.6.15.4 /lib/modules/2.6.15.4: créé l'image initrd (init RAM disk)


Mise à jour du programme d'amorçage (LILO ou GRUB)

Pour LILO, il suffit d'éditer le fichier /etc/lilo.conf, de rajouter la partie correspondant au nouveau noyau, et de valider le tout en exécutant /sbin/lilo. Je ne rentrerais pas dans les détails, car c'est assez intuitif, et il existe de nombreuses aides pour configurer lilo. Par exemple ici.

Pour GRUB, il suffit de rajouter la section sur le nouveau noyau dans /boot/grub/menu.lst. Plus d'infos là.

Et voilà, c'est terminé. Vous n'avez plus à rebooter le pc pour tester votre nouveau noyau. Et si ça ne fonctionne pas, pas d'inquiétude, il suffit de rebooter sur l'ancien noyau et votre système repart !

Plus d'infos

Cet article tente de résumer clairement et rapidement les étapes de la compilation du noyau. Je ne suis volontairement pas rentré dans les détails. Si vous avez besoin de plus d'informations, je vous conseille les sites suivants :