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.

3 Messages de forum

  • 15 juillet 2004 12:32, par Gérard Blanchet

    Après avoir vu Benoit aux RMLLs de Bordeaux j’ai appliqué à la lettre les indications de l’article.

    J’ai refait l’archive kernel-2.4.26-vs1.27.tar.gz que j’ai placé dans /VSERV

    J’ai créé ensuite dans /usr/src/RPM/SPECS le fichier kernelvserver-2.4.26.spec


    debut du fichier

    %define name kernelvserver

    %define version 2.4.26

    %define release vs1.27

    %define buildroot /usr/src/RPM/RPMS/i586/kernelvserver

    Summary : kernel pour les vservers

    Name : %name

    Version : %version

    Release : %release

    Requires : vserver vserver-admin gnome-linuxconf linuxconf-lang-fr linuxconf linuxconf-util

    License : GPL

    Group : Applications

    URL : http://www.slaes.net/

    %description

    Ce kernel est necessaire pour implementer les vservers sur SLAES.

    %files

    /VSERV

    %post

    cd /

    tar zxf /VSERV/kernel-2.4.26-vs1.27.tar.gz

    echo "image=/boot/vmlinuz-2.4.26-vs1.27

    label=\"vservers\"

    `grep -m 1 \"root=/dev\" /etc/lilo.conf`

    append=\"devfs=mount acpi=ht\"

    read-only

    " >> /etc/lilo.conf

    lilo


    fin du fichier

    un petit : rpm -bb —target i586 kernelvserver-2.4.26.spec

    et le rpm kernelvserver-2.4.26-vs1.27.i586.rpm est créé

    J’ai enfin intégré le package dans le nouveau dvd de la slaes-4.0 mais il sera disponible par urpmi (attendre demain) si vous vous créez une nouveau media par :

    urpmi.addmedia update_slaes httpd ://www.slaes.net/updates4.0 with ../base4.0/hdlist.cz

    Cordialement

    Gérard

  • 17 juillet 2004 09:40

    coucou me revoilà.

    Tout marche avec disque IDE, mais kernel panic avec disque scsi donc j’ai repris les choses. Remis en modules les variables indiquées par Benoit et dans la création du package mis les lignes suivantes, en gras :

    tar zxf /VSERV/kernel-2.4.26-vs1.27.tar.gz

    mkinitrd /boot/initrd-2.4.26-vs1.27.img 2.4.26-vs1.27

    echo "image=/boot/vmlinuz-2.4.26-vs1.27

    label=\"vservers\"

    `grep -m 1 \"root=/dev\" /etc/lilo.conf`

    initrd=/boot/initrd-2.4.26-vs1.27.img

    append=\"devfs=mount acpi=ht\"

    read-only

    " >> /etc/lilo.conf

    Je suis en train de recompiler le noyau, le package modifié s’il marche, sera mis sur le site www.slaes.net dans la soirée

    @+

    Gérard

  • 17 juillet 2004 14:29

    ça roule et disponible sur le site

    à signaler qu’il vaut mieux dans l’ordre faire :

    urpmi gnome-linuxconf

    urpmi linuxconf-util

    urpmi linuxconf-lang-fr

    urpmi kernelvserver

    sinon, pour une obscure raison, linuxconf dans sa section divers n’a pas create newserver

    sur ce je pars en vacances pour 15 jours

    Bonnes vacances à tous

    Gérard


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