LinuxÉdu-Québec

Accueil À propos de nous Contact Plan du site

Le dimanche 4 juillet 2004, par Benoit St-André, Patrice Levesque, Pierre Lachance

Compiler son noyau

Pour les VServers ou pour le plaisir !

Voulant installer des VServers sur un eServer d’IBM, nous avons rencontré un problème, un module (sd_mod) pour le scsi n’était pas compilé dans le noyau de notre ami Jacques Gélinas. Il faut donc compiler notre propre noyau ! Ho ! On va se salir les mains ;o)

Voici donc comment nous avons procédé.

 Télécharger le noyau 2.4, sur kernel.org

 Déplacer l’archive du noyau vers /usr/src

  • mv linux-2.4.26.tar.bz2 /usr/src

 Décompresser l’archive du noyau :

  • tar xvfj linux-2.4.26.tar.bz2

 Télécharger le patch vserver, sur http://www.13thfloor.at/vserver/s_r...

 Déplacer le patch vers /usr/src/

 Appliquer le patch au noyau « vanilla » (le noyau vanille, c’est le noyau original. La plupart des distributions "patchent" leur noyau, ce qui fait que ce ne sont plus des noyaux vanille) :

  • cd /usr/src/
  • patch -p0 < patch-2.4.26-vs1.27.diff

 Dans /usr/src/linux-2.4.26 on fait la commande pour sélectionner les options du noyau (ici c’est délicat et assez long) :

  • make menuconfig [1]

ATTENTION : options importantes pour éviter des problèmes avec initrd, en faisant ça, on aura PAS besoin de faire mkinitrd. L’initrd sert à monter en « Ramdisk » les modules qui doivent être « loadés » très tôt lors du démarrage. Si on ne fait pas de initrd, on doit alors compiler certains modules dans le noyau.

Alors, on compile dans le noyau (Y) ou en modules (M) ? Le noyau se charge avant les modules, donc si vous utilisez le type de partitions EXT3, on doit pouvoir y accéder le plus tôt possible (c’est logique). C’est pourquoi on a les lignes ci-dessous :

  • CONFIG_EXT3_FS=y plutot que m [2]
  • CONFIG_BLK_DEV_SD=y
  • CONFIG_SCSI_AIC7XXX=y au lieu de m

Lorsque votre configuraiton est terminée, vous pouvez donc faire la commande suivante.

  • make dep clean bzImage modules modules_install [3]

Après un temps dépendant de la puissance de votre ordinateur, la compilation se terminera sans erreur nous l’espérons. Nous sommes donc prêts pour l’installation du noyau. On doit copier deux fichiers dans le répertoire /boot. Le premier est la bzImage et l’autre est le System.map. On les renomme aussi comme ci-dessous :

  • cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.26-vs1.27 (c’est le noyau)
  • cp System.map /boot/System.map-2.4.26-vs1.27 [4]

Notre chargeur de démarrage LILO doit être modifié pour que notre noyau soit reconnu, éditez /etc/lilo.conf

On ajoute ceci [5] :

image=/boot/vmlinuz-2.4.26-vs1.27
       label="vserver"
       root=/dev/sda1
       append="devfs=mount acpi=ht splash=silent"
       read-only

Puis on fait la commande lilo -v (s’il n’y a pas d’erreur, vous êtes prêt pour un reboot).

Si tout va bien, vous pouvez maintenant mettre votre noyau au démarrage par défaut. Rééditez lilo.conf et modifier la ligne default="Linux" pour inscrire le nom de votre noyau (ici vserver).

Kernel panic ! Voilà le message qui fait frémir le nouveau compileur de noyau. Comment trouver ce qui ne fonctionne pas ? Et bien on redémarre l’ordinateur sur un noyau qui fonctionne. Puis on va consulter le log « dmesg ». Il contient les messages du noyau. De là, vous aurez peut être à refaire un make menuconfig pour ajuster votre noyau à votre matériel. On doit alors refaire une compilation complète :o(

Voilà, nous avons compilé notre propre noyau. Quelle expérience !

Note : vous avez déjà compilé un noyau, vous avez eu des erreurs et vous avez trouvé des solutions, partagez vos expériences dans le forum au bas du présent article. Nous compilerons ;o) ces expériences et nous feront un article sur le sujet. Merci de partager !


Sources :

Notes

[1] Dans le répertoire de vos sources du noyau installé sur votre machine, on retrouve un fichier .config. Éditez ce fichier pour voir ce qui est sélectionné pour vous aider à créer votre propre .config.Il contient la configuration complète du noyau.(on peut faire aussi make xconfig, pour une interface GUI, si on roule dans l’environnement X)

[2] sinon on va être obligé de faire un initrd pour rien. Il s’agit que la partition / puisse être lue par le noyau - sans avoir besoin de lire sur / comment lire. Adapter cette ligne si vous n’utilisez pas ext3 comme type de partition (ReiserFS, ext2, jfs, xfs...). Si disque SCSI, même principe.

[3] dep : génère les dépendances
clean :supprime les fichiers objets des précédentes compilations
bzImage : compile le noyau et génère l’exécutable qui vous servira de noyau
modules : compile les modules
modules_install : installe les modules

[4] http://www.dirac.org/linux/systemmap.html/

[5] La ligne append peut varier selon vos besoin.

4 Messages de forum


Applications | LinuxÉdu-Québec | Revue de presse | Projets | Événements - colloques | Réflexion et opinion | Système d’exploitation