Recompilation du kernel sous Linux 2.2/2.4

E-mail Print PDF



QUOI?
Le kernel est le noyeau d'un système d'exploitation. Pour fortement simplifier, on peut dire qu'il effectue les appels systèmes entre les applications et le matériel. Celui de Linux est monolithique.

POUR QUI?
Le fait de recompiler un kernel n'est pas une tâche pour les utilisateurs d'un système d'exploitation. Cette tâche est destinée à l'administrateur du système ou à son propriétaire. Les systèmes tels que Unix (et donc Linux) ne permettent ce type d'actions qu'aux personnes autorisées qui possèdent un account root (administrateur général) ou un utilisateur à qui celui-ci a délégué certains pouvoirs importants.

QUAND ET POURQUOI?
On ne recompile pas des kernels à longueur de journée pour le plaisir (bien que certains...). Cette tâche, quelque peu risquée, ne doit s'effectuer que lorsqu'elle est réellement nécessaire et lorsque "Mr root" estime que son système en retirera plus d'avantages que d'inconvénients, car il ne faut pas oublier que la recompilation entraînera au moins un reboot complet, une durée temporelle variable (selon le hardware ou l'importance de la modification),et peut-être certains soucis pour les utilisateurs qui devront interrompre leur travail...
On peut dire qu'il y a deux grandes raisons pour recompiler un kernel.
La première, c'est lorsque vous intégrez un nouveau hardware dans votre "serveur". Il faut donc déclarer et configurer ce matériel si il n'est pas supporté directement (par exemple, un disque SCSI et son contrôleur sont installés sur une machine qui ne comportait jusqu'à présent que des disques IDE).
Il se peut aussi que vous vouliez utiliser ce hardware de façon différente ou lui ajouter certaines spécificités (une carte réseaux, quelle que soit son type, utilisait un protocole A. Votre réseau s'est développé et vous avez besoin d'un protocole B, plus souple, ainsi que de certaines garanties au niveau de la sécurité pour cette machine).
Avant de se jeter tête baissée dans ces tâches, il faut bien analyser l'état actuel du systèmes, bien vérifier que le "prix" de l'opération ne sera pas supérieur aux pertes qui vont en découdre. Il faut aussi veiller à pourvoir récupérer le système dans son état initial de bonne marche si les maintenances effectuées échouaient lamentablement (backups, notes,...)
Certaines modifications ne sont possibles qu'en changeant de version de kernel. Ce point est important à aborder car on ne change pas de version de kernel pour "être à la mode" (comme avec un autre OS de bas étage que l'on upgrade tous les mois à force de patches, de services packs,... qui reste peu stable et que l'on change tous les trois ans, sans y voir d'amélioration remarquable, sinon une augmentation en espace disque utilisé et en puissance nécessaire pour une utilisation semblable aux versions précédentes). Changer de kernel ne se fait que lorsque votre matériel n'est pas supporté dans votre version actuelle (une carte contrôleur SCSI qui a été construite après la création de votre kernel) ou lorsque le nouveau kernel est mieux optimisé en vitesse pour les opérations les plus fréquentes de votre système. De nouveaux kernels sont développés environ tous les mois et on peut appliquer des patches de version à version. Il existe deux types de kernels. Ceux qui ont étés testés et qui sont considérés comme stables à 100% par les distributeurs (SuSE, Red Hat,...) car ceux-ci les incluent comme kernel par défaut dans leur configuration. Ils ne sont pas les plus récents non plus. Les autres kernels sont appelés Hacker-Kernel car, bien qu'ils fonctionnent parfaitement dans la plupart des cas, ils n'ont pas encore étés déclarés stables. On peut les downloader sur beaucoup de sites.

COMMENT?
Tout d'abord, il faut décider si vous installez un nouveau kernel ou si vous voulez modifier l'actuel. Si vous installez une nouvelle version, lisez la suite de ce paragraphe, sinon, passez-le.

NOUVELLE VERSION
Il faut vous fournir ce kernel. Il existe plusieurs façons de procéder. Soit vous downloadez ce kernel sur les sites Internet, soit vous pouvez le trouver sur certains CD de magazines, etc.. Il existe plusieurs "présentations" de ce kernel. Soit la version RPM (seulement pour RedHat ou SuSE, et autres distributions supportant le format RPM), soit le bon vieux "tarzippé" (.tar.gz ou .tgz) soit le plus récent "tarbézippé" ( tar.bz2). Le format bz2 existe pour les nouveaux kernels car ceux-ci ont une taille avoisinant 10Mb compressés (environ 60Mb décompressés).
Dans le cas de RPM, il suffit d'exécuter les outils de distributeurs (comme YaST pour SuSE) pour le décompresser automatiquement ou les outils rpm en ligne de commande ou sous X-window. La commande de décompression avec rpm est la suivante: rpm -Uvh kernelfilename.rpm
Dans les autres cas, la méthode est différente car les fichiers sont compressés deux fois. Il faut tout d'abord copier le fichier dans un répertoire temporaire et ensuite, selon les cas (.tar.gz, .tgz, .tar.bz2) effectuer les opérations suivantes:

le cas .tar.gz:

gzip -dc kernelfilename.tar.gz | tar -xvf

le cas .tgz:

gzip -d kernelfilename.tgz > tar -x

le cas .tar.bz2:

bunzip2 kernelfilename.tar.bz2 | tar -xvf-

ou, si vous n'avez pas bunzip2 mais seulement bzip2:

bzip2 -d kernelfilename.tar.bz2 | tar -xvf-

Vous avez maintenant un répertoire linux contenant une arborescence et des fichiers qui vient d'être crée. Il serait sage de le renommer en linux_version pour ne pas écraser la version actuelle ou créer des conflits de versions (dans le cas d'un échec par la suite, il faudrait garder l'ancienne version). Vous devez déplacer ce répertoire dans /usr/src/ et créer un lien symbolique vers ce nouveau répertoire  avec la commande: ln -s /usr/src/linux /usr/scr/linux_version . Vous pouvez ensuite supprimer le fichier compressé dans le répertoire temporaire (ou le sauvagarder si vous voulez le garder pour des opérations futures).

CONFIGURATION

Si vous avez déjà tout configuré, passez ce paragraphe.
Vous devez d'abord vous positionner dans le répertoire /usr/src/linux. Là, il existe trois façons de configurer le kernel.
Tout d'abord, si votre serveur X est installé, grâce à make xconfig, qui s'exécutera dans une fenêtre X-window.
Si vous préférez une interface de menus au shell, il y a make menuconfig , assez convivial.
Si vous préférez répondre par Y, N, M à toutes les questions, une après l'autre, en mode pur texte, vous avez make config .
Si aucun ne fonctionne, vérifiez bien que le compilateur C est installé (gcc) ainsi que gawk (awk) et make.

Vous devez choisir Y si vous voulez activer l'option, N pour la désactiver(ou ne pas supporter) ou M pour le charger en module.
Il y a une aide ou un déscriptif de chaque option (en anglais).
!!! Ici s'effectuent des choix importants et le fait de mal choisir peut entaîner des conséquences plus ou moins graves (jusqu'à rendre le système totalement inutilisable !) je vous conseille donc, avant toute modification, de prendre note de l'état initial des options et des modifications ultérieures !!!
Ensuite, vous pouvez quitter (si vous utilisez le menuconfig ou xconfig) la configuration.

COMPILER (OU RECOMPILER)

Si vous voulez juste rendre votre nouveau kernel bootable, passez ce paragraphe.
Il faut à présent compiler (à l'aide du compilateur C de Linux) le kernel que vous venez de créer (en réalité, avec make et awk, et de manière transparente pour vous, vous venez de  créer un script de sélection certains codes sources en C (.o et .c) qui composeront par la suite le kernel.)
Cette (ces) opérations prennent pas mal de temps, même sur des systèmes puissants et il faut bien en tenir compte. (entre 5min et 20min avec un K6-2 333Mhz, selon le nombre de composants du kernel).

Soit, si vous avez généré beaucoup d'options ou si vous partez d'un kernel 'de distribution', vous devez exécuter, dans l'ordre, les commandes suivantes:

make dep
make clean
make

Vous devez ensuite compiler les modules à part, de cette façon (après le kernel):

make modules
make modules_install
depmod -a

Soit, si vous avez jste modifié quelques options (Y) alors exécutez juste ceci:

make depmake

Et dans le cas où ce ne serait que des modules (M):

make modules
make modules_install
depmod -a

CREER L'IMAGE DU  KERNEL ET LA RENDRE BOOTABLE

Pour que l'image bootable (/boot/vmlinuz) du nouveau kernel soit générée, il faut encore effectuer quelques commandes.
Tout d'abord, sachez que les options de démarrage se trouvent dans un fichier: /etc/lilo.conf . Ce fichier sera lu lors de la création de l'image et de la modification de la MBR d'amorçage de la machine (soit sur hda,fd0,...). Remarque: si jous n'avez généré que des modules, ce n'est pas utile de recompiler le /boot/vmlinuz.

Voici la commande à exécuter:

make zlilo

Si la taille de votre version du kernel (compressé) est supérieure à 10 Mb (généralement pour les kernels à partir de 2.1.1), vous devez exécuter la commande suivante:

make bzlilo

Il se peut aussi que, par la suite, vous modifiiez la configuration d'amorçage (sur un autre support, ou un choix entre plusieurs kernels,...) dans le fichier /etc/lilo.conf . Dans ce cas, pour rendre les modifications effectives au système, il ne faudra plus recréer toute l'image mais juste modifier le LILO. Ceci est possible avec les commandes suivantes:

lilo

Ou, pour les plus gros kernels:

bzlilo

A ce stade, vous pouvez rebooter votre système (n'oubliez pas de prévenir les autres utilisateurs du système) et tester votre nouveau kernel. Si des problèmes surviennent, vous pouvez tenter de modifier à nouveau la configuration, et si ceux-ci sont trop graves, il y a vos backups et vos notes de la version/configuration originale du système. Néanmoins, il existe une aide importante de Linux lui-même et d'Internet: les Manual Pages (man) les FAQ, les HOWTO, les newsgroups, l'IRC,...

OU?

Il existe beaucoup de sites mirrors. En voici quelques-uns:

Pour les kernels:
Le site maître: http://www.kernel.org
Le mirror belge: http://www.be.kernel.org/pub/linux/

Remarque: La dernière version se trouve dans le répertoire LATEST

 



03/04/1999 Vincent Jamart

Last Updated ( Wednesday, 02 September 2009 23:16 )  
You are here: