Avant de vous lancer dans la compilation d’un nouveau noyau pour un IBM xSeries 305, il faut prendre en compte les éléments installés sur cette machine :
Pour le Type 8673-12X
Sur cette machine rien d’anormal sinon que le contrôleur IDE est un serverworks CSB5. De même le contrôleur Ethernet est un chipset BCM5703 issu de la société BROADCOM Corporation . C’est précisément cet élément qui est problématique car le module existe bien mais n’est pas natif au kernel. Au niveau de la carte graphique, il s’agit d’une ATI Technologies Inc Rage XL classique.
Pour le Type 8673-63X
Cette machine reprends les même éléments que le type 8673-12X avec en plus un contrôleur SCSI qui est bien connu de GNU/Linux, puisqu’il s’agit d’une carte Adaptec AIC-7892A U160/m utilisant le module aic7xxx.
Il convient donc de Télécharger les pilotes de la carte Ethernet sur http://www.broadcom.com/docs/driver-download.html et le noyau 2.4.21 sur http://www.kernel.org.
De même certains package de base doivent être installés sur votre système :
loadlin qui contient entre autre le programme freeramdisk permettant de libérer la mémoire utilisée par un ramdisk lorsque ce dernier n’est plus utilisé.
bzip2 qui contient l’utilitaire de compression de données.
libncurses5-dev qui contient les librairies de développement pour ncurses.
e2fsprogs qui contient les librairies et utilitaires du système de fichier ext2.
ash qui contient un shell plus petit que bash permettant de réduire la taille d’un ramdisk.
Ces packages sont facilement installable sous Debian GNU/Linux grâce à la commande apt-get :
apt-get install nom_du_package
Copiez linux-2.4.21.tar.bz2 dans /usr/src
Désarchivez linux-2.4.21.tar.bz2 par la commande tar -jxf linux-2.4.21.tar.bz2.
Nota : si la commande tar produit une erreur c’est que le package bzip2 n’est pas installé. Pour y remédier faire apt-get install bzip2 avec la distribution Debian Woody bien sur.
Vérifiez qu’il n’existe pas de dossier /usr/src/linux, sinon le renommer en /usr/src/linux-
Vérifiez qu’il n’existe pas de lien symbolique /usr/src/linux sinon le supprimer.
Créez un lien symbolique nommé linux et pointant vers le dossier nommé linux-2.4.21 (créé par l’archive).
Allez dans /usr/src/linux.
Saisissez la commande make menuconfig.
Nota : si la commande échoue, il y a de grande chance pour que vous n’ayez pas installé correctement ncurses et particulièrement les librairies de dev libncurses5-dev. Pour y remédier, saisir la commande apt-get install libncurses5-dev.
Ne configurez pas maintenant le noyau. Le fait de l’ouvrir le menu de configuration, puis d’enregistrer vos changements (que vous n’avez pas fait) suffit pour le moment.
Créez ou vérifiez l’existence du dossier /usr/src/modules
Copiez l’archive linux-6.2.17.zip récupérée sur le site de BROADCOM dans le dossier /usr/src/modules
Désarchivez cette archive, vous allez récupérer une autre archive nommée bcm5700-6.2.17.tar.gz !
Créez le dossier /usr/src/modules/bcm5700-6.2.17
Déplacez l’archive bcm5700-6.2.17.tar.gz dans /usr/src/modules/bcm5700-6.2.17, puis se placer dans ce même dossier.
Désarchivez ce fichier par la commande tar -zxf bcm5700-6.2.17.tar.gz
Aller dans le dossier /usr/src/modules/bcm5700-6.2.17/patches.
Saisissez la commande patch -p1 -d /usr/src/linux-2.4.21 < bcm5700-6.2.17-2.4.21.patch afin d’appliquer le patch nécessaire à l’intégration du module bcm5700 dans les options de configuration du noyau. Il est temps maintenant de configurer ce noyau...
Allez dans le dossier /usr/src/linux
Saisissez la commande make menuconfig
Configurez le noyau...
Nota : Il n’y a pas lieu de décrire ici les options choisies, sinon que de vérifier l’existence en tant que module des éléments cités dans le pré-requis. Toutefois, j’attire votre attention sur le fait qu’il s’agit d’un système GNU/Linux, et qu’il y a de grande chances pour que vos partitions soient en ext2 ou en ext3. Il convient donc de charger non pas en tant que module mais dans le noyau ces deux systèmes de fichiers.
Quittez et sauvegardez vos modifications.
Éditez le fichier Makefile.
Vous trouverez en début du fichier une variable nommée EXTRAVERSION. Cette variable sert à définir un nom pour les modules de votre noyau. Si vous ne renseignez pas cette variable, le répertoire d’installation de vos modules sera /lib/modules/2.4.21, sinon il sera /lib/modules/2.4.21valeur_de_EXTRAVERSION.
Validez vos changements.
Lancez les commandes make dep; make clean; make bzImage; make modules; make modules_install
En principe, tout doit bien se passer, dès lors que vous n’avez pas sélectionné d’options qui vous semblaient farfelues dans la partie configuration du noyau.
Allez dans le dossier /usr/src/linux/arch/i386/boot, et copiez le fichier bzImage dans /boot en lui donnant un nom plus compréhensible.
Allez dans le dossier /usr/src/linux et copiez le fichier System.map dans /boot/System.map-2.4.21valeur_de_EXTRAVERSION
C’est fini pour la partie compilation. Vous allez à présent configurer le système pour pouvoir démarrer sur le nouveau noyau. Compte tenu de la spécificité de certains modules, vous allez créer un ramdisk initrd. Ce ramdisk est appelé par le boot loader (LILO), charge les modules qui vont bien puis passe la main au noyau.
Placez vous dans le dossier /
Créez le dossier /initrd
Si ce dossier existe déjà, effacez son contenu, et redémarrez votre machine sur l’ancien noyau.
Fabriquez un système de fichier ext2 en RAM : mke2fs -q -m 0 -i 1024 /dev/ram0 4096. Cette commande initialise un espace de 4096 ko dans le device /dev/ram0
Montez ce système de fichier : mount -n -t ext2 /dev/ram0 /initrd.
Vous noterez que si vous faites un df -k, le système de fichier que vous venez de monter n’est pas vu dans la table des partitions.
Placez vous dans le dossier /initrd
Créez une arborescence minimale :
Copiez les binaires nécessaires :
Copiez les librairies nécessaires.
Attention, il convient de copier la version de librairie sous le nom du lien. Les exemples donnés seront peut être différent en fonction des versions installées sur votre système :
Créez un lien symbolique sh pointant sur ash Attention : Le faire dans /initrd/bin :
Créez certains devices dans dev Attention : Le faire dans /initrd/bin :
Copiez les modules nécessaires au démarrage :
Créez le fichier linuxrc Attention : Le faire dans /initrd :
Créez le fichier loadmodules Attention : Le faire dans /initrd :
Créez le fichier message, qui servira a afficher un texte afin d’avertir l’administrateur qu’il a 5 secondes pour interrompre le chargement en appuyant sur entrée, et ce, afin d’ouvrir un shell Attention : Le faire dans /initrd :
Votre image initrd est à présent terminée en RAM, il faut maintenant la sauvegarder dans un fichier. Allez sur la racine /
Démontez votre système de fichier chargé en RAM :
Sauvegardez ce système de fichier dans un fichier :
Libérez la mémoire RAM :
Remarque : Si vous souhaitez faire de nouvelle modifications sur votre image, il est inutile de monter cette image en RAM, ni de refaire toutes les opérations précédentes. Il convient simplement de monter l’image dans un dossier existant via la commande :
Bien que peu volumineuse, votre ramdisk peut, et doit être compressée :
Copiez l’image compressée dans /boot en prenant soin de ne pas écraser une autre image (si tel est le cas, renommez votre image pendant la copie)
Tout est prêt pour tester ce noyau. Sauf le Boot Loader (LILO).
Editez le fichier /etc/lilo.conf
Créez une nouvelle section image :
Sauvegardez votre fichier puis quittez vi
Vous noterez quelques optimisation dans la syntaxe append... Si votre machine est multi-processeur, il est inutile de désactiver la prise en charge SMP, et de remplacer maxcpus=0 par le nombre de CPU sur votre serveur.
A présent, exécutez la commande lilo -v pour écrire le Boot Loader sur le secteur 0 du disque.
Si tout s’est bien passé, vous pouvez redémarrer sur le nouveau noyau (pensez a le sélectionner dans le menu de lilo si ce dernier n’est pas le noyau par défaut.)