Les nouvelles versions de noyau sortent régulièrement. N'hésitez pas à adapter vos lignes de commande en fonction des dernières versions de noyau afin de bénéficier des derniers drivers, et surtout des dernières mises à jour de sécurité.
Le noyau de Linux (ce qui est un abus de langage d'ailleurs, vu que Linux n'est que un noyau autour duquel sont greffées des applications), sert à initialiser le système et à charger en mémoire tout ce qu'il faut pour que le matériel soit géré.
Pour connaître la version du kernel (noyau) en cours d'utilisation :
$ uname -r
Exemple pour un noyau 2.6.16 :
$ uname -r 2.6.16
Attention : ceci ne signifie pas que ce soit la seule version installée : il s'agit de la version utilisée actuellement. Pour avoir la liste des kernels installés, regardez la liste des fichiers vmlinuz-* dans /boot) :
$ ls /boot/vmlinuz-*
Exemple :
$ ls /boot/vmlinuz-* /boot/vmlinuz-2.6.16 /boot/vmlinuz-2.6.17-2-k7 /boot/vmlinuz-2.6.17-fritz
Pour obtenir plus d'informations sur votre système :
$ uname -a
Exemple :
$ uname -a Linux LightStar 2.6.16 #1 Tue Oct 10 20:36:58 CEST 2006 i686 GNU/Linux
Un utilisateur de Linux peut se retrouver dans 3 cas de figure :
Comme vous venez de la voir, le noyau gère les périphériques. Un périphérique peut être géré de 2 manières : en dur ou en tant que module. Lorsque vous configurez votre noyau, il vous faudra donc choisir entre ces deux options...
On peut compiler un noyau de différentes manières :
Dans le cas d'une compilation classique, prévoyez toujours d'avoir un noyau de secours dans votre chargeur de démarrage (lilo, grub, etc), sous peine d'être bloqué si vous avez mal compilé votre noyau !!
N'oubliez pas que compiler un noyau n'est pas inné, et qu'il ne faut pas oublier qu'on a une chance de bloquer le système lors du démarrage avec un noyau mal configuré.
Note pour la suite : nous allons poser les hypothèses suivantes :
Cette première solution permet d'obtenir rapidement et simplement une version récente d'un noyau avec de grandes chances d'avoir tout son matériel reconnu.
Pour obtenir la liste des images disponibles, nous allons utiliser la commande suivante :
# apt-cache search linux-image
Une fois que vous avez choisi votre image (dans notre cas la version 2.6.17-2-k7), vous pouvez l'installer :
# apt-get install linux-image-2.6.17-2-k7
Maintenant il reste à mettre à jour le Bootloader pour que votre nouveau noyau soit reconnu au démarrage.
Dans le cas de Grub, il suffit de lancer la commande :
# update-grub
Il suffit ensuite de rebooter et on a un joli noyau tout neuf, pas optimisé, mais qui détecte une grande majorité des périphériques que l'on a sur uen configuration classique (dont carte tv, disques sata, stockage externe sur usb/ieee, etc)
Cette méthode va nous permettre d'obtenir un package Debian à installer (il installera le noyau). Ceci implique que si vous avez plusieurs machines identiques, il vous suffit de créer votre package sur une seule machine, et d'ensuite l'installer sur toutes les autres (ce qui permet de gagner un temps précieux).
Cela permet également d'avoir une "sauvegarde" rapidement installable de votre noyau.
Tout d'abord, sur la machine de compilation, il faut installer trois packages :
# apt-get install kernel-package fakeroot libncurses5-dev
Ensuite, on va récupérer les sources :
# apt-get install kernel-source-2.6.17-2-k7
On décompresse les sources du noyau dans /usr/src/:
# cd /usr/src # tar xvjf kernel-source-2.6.17-2-k7.tar.bz2
On crée un lien symbolique vers les sources du noyau :
# ln -s kernel-source-2.6.17-2 linux
Les 2 commandes qui suivent est facultative. Elle consiste à récupérer le fichier /boot/config-2.6.x... afin de l'utiliser comme base de départ. En effet, ce fichier contient la façon dont le noyau que vous utilisez est configuré.
# cp /boot/config-2.6.17-2-k7 /usr/src/linux/.config
Maintenant on va pouvoir attaquer le vif du sujet en lançant le menu de configuration du noyau
# cd /usr/src/linux # make menuconfig
Maintenant que vous avez configuré le noyau, il faut le compiler.
# fakeroot make-kpkg clean # fakeroot make-kpkg --revision <nom_que_vous_desirez_donner_au_noyau> kernel-image
Une fois le noyau compilé (et le paquet créé), vous devez obtenir un fichier /usr/src/linux-image-2.6.17-fritz.deb. Pensez à copier ce paquet dans un endroit sûr.
Maintenant, il va falloir installer ce paquet :
# dpkg -i linux-image-2.6.17-fritz.deb
Nous allons créer un initrd. Pour ceci vous allez utiliser l'utilitaire initrd-tools. Si vous ne l'avez pas :
# apt-get install initrd-tool
L'initrd est un fichier chargé en RAM par le bootloader avant de lancer le kernel. Cela permet de mettre en module des composants qui ne pourraient autrement être compilé qu'en dur (ex : le support du système de fichier de la partition racine, pour monter la partition il faut le module, lui-même stocké sur la partition...)
La commande suivante n'est pas valable actellement (noyau 2.6.17) mais devrait l'être lors du passage de Etch en stable. A vérifier ! En attendant la stabilisation de Etch ou une future version de mkinitrd, nous allons utiliser yaird :
# apt-get install yaird
Et nous allons créer un fichier initrd :
# mkinitrd.yaird -o /boot/initrd.img-2.6.17-2-k7
Pour créer l'initrd :
# mkinitrd -o /boot/initrd.img-2.6.17-2-k7
Maintenant il reste à mettre à jour le Bootloader pour que votre nouveau noyau soit reconnu au démarrage.
Dans le cas de Grub, il suffit de lancer la commande :
# update-grub
Maintenant rebootez votre machine.
Kernel Panic not syncing: VFS: Unable to mount root fs on unknown block...
mount: unknown filesystem type 'devfs' umount: devfs: not mounted mount: unknown filesystem type 'devfs' umount: devfs: not mounted pivot_root: No such file or directory /sbin/init: 432: cannot open dev/console: No such file Kernel panic - not syncing: Attempted to kill init!
Le problème est du à l'abandon de devfs pour passer à udev. Le fichier initrd utilisé au boot utilise devfs au lieu de udev. Il faut donc le remplacer.
Pour celà nous allons utiliser yaird :
# apt-get install yaird
Et nous allons créer un fichier initrd (ici pour un noyau 2.6.17) :
# mkinitrd.yaird -o /boot/initrd.img-2.6.17