Compilation

A partir d'une distribution Debian GNU/Linux

Notez la version actuelle de votre noyau :

uname -a
ls -l /boot/
ls -l /lib/modules/
ls -l /usr/src/

ou

cat /proc/version

Affichez les modules chargés et repérez celui chargé du support de la carte réseau

lsmod

lancez la commande ci-dessous, choisissez la dernière version du noyau en relançant à nouveau la commande avec le nom + version

apt-get install debhelper modutils kernel-package libncurses5-dev
apt-get install kernel-source-[2.4.26]   # utilisez la dernière version
apt-get install fakeroot

entrez votre nom et adresse électronique

vi /etc/kernel-pkg.conf

déplacez vous dans le répertoire où se trouvent les sources

cd /usr/src

décompactez l'archive

tar xjvf kernel-source-(nouvelle-version).tar.bz2

supprimez le lien symbolique linux qui pointe sur la dernière version du noyau, s'il existe.

rm /usr/src/linux

créez un lien symbolique vers votre nouvelle version

ln -s /usr/src/kernel-source-(nouvelle-version) /usr/src/linux

déplacez vous dans les sources

cd /usr/src/linux

consultez les fichiers avec ,par exemple, mc

Documentation/*
README
README.debian
Makefile

lancez l'interface de configuration du noyau afin de constater que par défaut la sélection des modules du noyau ne correspond pas à celle que vous avez, c'est normal car à ce stade vous n'avez pas récupéré votre ancienne configuration (fichier .config dans les sources).

! pour le TP quitter sans sauver ! Si vous avez lu trop tard, lancer les commandes suivantes afin de purger vos sources

make mrproper

pour l'interface sous X

make xconfig

en mode console texte et ultra-basique

make menuconfig
make config

vérifiez la présence des modules réseau, video, ... de votre machine

less /boot/config-(version-actuelle)

vérifiez également leur présence dans /lib/modules/kernel-(version-actuelle)/...

Vous pouvez également constater leur chargement dans le système et dans le fichier de chargement

lsmod
cat /etc/modules

copiez le fichier de config par defaut

cp /boot/config-(version-actuelle) /usr/src/linux/.config

alternative sous Suse : make cloneconfig

démarrez la configuration de votre nouveau noyau

make menuconfig

enlevez le module de votre carte réseau

au cours d'une autre manipulation , vous pourrez refaire ce TP en retirant tout support qui ne concerne pas votre architecture matérielle, afin d'obtenir un noyau optimisé à vos besoins, attention toutefois à ne pas retirer les modules nécessaires au fonctionnement de votre environnement.

help sur un module vous donne son label que vous retrouvez dans .config

quittez et sauvez les modifications

regardez vos modifications par rapport au fichier d'origine

pour voir vos modifications

diff /boot/.config-(version-actuelle) .config

éditez le fichier Makefile et mettez votre EXTRAVERSION personelle

profitez-en pour parcourir ce fichier et voir ce que font les différentes cibles (dep, clean, bzImage, ...)

copiez votre /usr/src/linux/.config dans /boot

cp .config /boot/config-(nouvelle-version)

lancez les commandes de compilation suivantes:

make dep
make clean
make bzImage
make modules

Vous pourriez également enchaîner les traitements en une seule commande : make clean bzImage modules

Attention ! A ce point si vous recompiliez la même version de kernel, vous devez déplacer /lib/modules/kernel-(version-actuelle), afin de ne pas génerer, dans ce dernier, les modules issus de votre nouvelle compilation

mv /lib/modules/kernel-(version-actuelle) /lib/modules/kernel-version-actuelle-old

continuez ensuite par installer les modules

make modules_install
ls -l /lib/modules/ # Vous permet de constater la création du répertoire contenant les modules de kernel-(version-actuelle)

copiez les fichiers (noyau et System.map) créés par la compilation dans /boot

cp arch/i386/boot/bzImage /boot/vmlinuz-(nouvelle-version)
cp System.map /boot/Sytem.map-(nouvelle-version)

Si /boot/System.map existe et est un lien symbolique, vous devez le supprimer pour établir un lien avec le nouveau fichier.

rm  /boot/System.map
ln -s /boot/Sytem.map-(nouvelle-version)  /boot/Sytem.map

Supprimer /vmlinuz.old s'il existe, ou renommer le

rm /vmlinuz.old

permutez le lien symbolique /vmlinuz

mv /vmlinuz /vmlinuz.old

créez un lien symbolique pointant sur la nouvelle image du noyau

ln -s /boot/vmlinuz-(nouvelle-version) /vmlinuz

Editer lilo.conf et activer la section vmlinuz.old (si ce n'est pas fait) et valider vos changements

lilo -v

rebooter

shutdown -r now ou reboot

Extras, à faire plus tard

il est possible de rendre totalement automatique l'installation du noyau en lançant la commande (ne l'utilisez pas pour le TP)

cd /usr/src/linux
make modules_install install

Fabriquer un noyau « debianisé » en simple utilisateur: récupérer les sources du kernel et de pcmcia dans votre répertoire

$ cd ~/kernel-source-(nouvelle-version)
$ make menuconfig
$ make-kpkg clean
# N'utilisez pas --initrd,  initrd n'est pas utilisé dans notre cas.
$ fakeroot make-kpkg --append_to_version -486 --initrd \
             --revision=rev.01 kernel_image \
             modules_image # modules_image pour pcmcia-cs* etc.
$ cd ..

# dpkg -i kernel-image*.deb pcmcia-cs*.deb # installation en tant que root

En réalité, make-kpkg kernel_image lance make oldconfig et make dep.

Si vous voulez les modules de pcmcia-cs, ou pas de support pcmcia, sélectionnez dans make menuconfig « General setup » dans « PCMCIA/CardBus support » et le déselectionner (càd décocher la case).

Sur une machine SMP, configurez CONCURRENCY_LEVEL selon kernel-pkg.conf(5).

Autre possibilité

cd /usr/src/linux
make-kpkg -revision debidon.2.4.26 kernel_image

après cette commande un noyau debianisé est créé dans /usr/src/

un utilisateur peut faire un package de kernel en utilisant fakeroot pour l'installer ensuite sur une autre machine, ou encore le stocker dans un repertoire dont le sources.list d'apt pointerait dessus.

fakeroot make-kpkg -revision debidon.2.4.26 kernel_image

root peut ensuite l'installer en lançant la commande

dpkg -i kernel_image-2.4.26_debidon.2.4.26_i386.deb

regardez les commandes mkboot et installkernel