Comment compiler et installer un noyau ?

Information :

Il existe différents type de noyau sous Mandrake :
– support du SMP ( kernel-smp )

– support pour plus de 4Go de RAM ( kernel-i686-up-4GB )

– spécialisé pour l’utilisation en entreprise avec le support du SMP, support pour plus de 4Go de RAM ( kernel-enterprise )

– spécialisé pour les système multiprocesseur sous PIII avec plus de 64Go de RAM ( kernel-p3-smp-64GB )

– optimisés pour la sécurité avec notamment l’inclusion des patch grsec avec le support SMP ( kernel-secure )

– optimisé pour le multimédia avec notamment l’intégration des patch low-latency, le 0(1) scheduler, le patch preempt et ce en version normal ( kernel-multimedia ) ou SMP ( kernel-multimedia-smp )

– bleeding-edge et expérimental de Thomas Backlund qui contiennent des patchs non intégrés dans les noyaux Mandrake mais offrant des fonctionnalités en plus ( kernel-tmb )

Prérequis

Il vous faut un certains nombres de packages. Tous peuvent être installé via urpmi

REQUIS :
gcc, gcc-cpp ou gcc2.96, binutils, make, kernel-source, tar, bzip2, gunzip

up

Installation

Ensuite on fais en tant que root ( veuillez à bien faire attention à ce que vous faites :

$> rm -f /usr/src/linux<- efface le lien symbolique/raccourci qui pointe sur la version actuelle du noyau.
$> mkdir /usr/src/linux-2.4.x<- on crée le répertoire dans lequel se trouveront les sources
$> ln -s /usr/src/linux-2.4.x /usr/src/linux<- refait le lien symbolique/raccourcis

si vous utilisez des rpm :

$> rpm -ivh glibc-devel.x-ymdk.rpm<- les headers du kernel se trouvent dans glibc-devel maintenant
$> rpm -ivh kernel-source_2.4.x-ymdk.rpm<- install les sources du kernel
$> rpm -ivh kernel-2.4.x-ymdk.rpm<- install le rpm qui contient le binaire du kernel

A partir de la Mandrake 9.2 il faut le package bootloader-utils pour installer le rpm du noyau ( ou un noyau de la mdk 9.2/cooker ). Normalement si vous avez une mdk 9.2 il est déjà installé pour vous.

En utilisant les sources originales sur kernel.org ou l’un de ses miroirs :

Si vous avez directement pris les sources originales sous formes de tar.gz, alors vous faites :

$> cd /usr/src
$> tar -zxvf /path/to/kernel-2.4.x.tar.gz

si vous voulez patcher les source d’un précédent kernel pour passer à la version 2.4.v :

$> cd /usr/src
$> bzip2 -dc patch-2.4.v.bz2 | patch -p0<- si vous avez récupérer le tar.bz2
$> gzip -dc patch-2.4.v.gz | patch -p0<- si vous avez récupérer le tar.gz

Compilation

Modules vs builtins

Avant de commencer d’abord il faut que vous comprenniez certaines choses. Le noyau linux a besoin de drivers pour accéder à tout ( disque dur, partition, matériel, … ). Ces drivers peuvent être soit inclus directement dans le noyau, et donc ils sont chargés lors du lancement du noyau et ce que l’on en ait besoin ou pas; soit compilés en tant que module, c’est-à-dire externe au noyau et disponible que lorsque l’on en a besoin. Par exemple sous Mandrake pratiquement tout est sous forme de modules.

Cependant tout mettre en module peut avoir des inconvénients. En effet, imaginez que vous mettez le support de votre controleur SCSI, ou le support de votre type de partition en module, comment le noyau fait-il pour le charger ? En effet pour charger le module qui se trouve sur le disque dur, le noyau doit accéder au disque, lire la partition pour charger le module, or si le noyau n’a pas le pilote pour lire la partition … vous avez droit à un beau “Kernel Panic VFS unable to mount root filesystem”.
Comment résoudre alors ce problème si on veut garder une approche modulaire ? c’est là que le initrd vient à notre secours. Le initrd contient les différents modules dont on a besoin au démarrage et le boot loader le charge en mémoire lors du démarrage et le rend disponible au noyau. Ainsi le noyau pourra charger le pilote/module pour le controleur IDE et votre système de fichier pour lire vos partitions. Bien sûr dans le boot loader il faudra préciser où trouver le initrd.
Dans ce HOWTO nous allons considérer que avez pratiquement tout en module et que vous utilisez un initrd.

Minimum syndical et pilotes communs

Utilisations de modules

Vous devriez activer kmod et le support des modules pour pouvoir utiliser des modules :

“Loadable Module Support” -> mettez tout à Y

Processeurs

Là vous pouvez préciser votre processeur pour que le noyau charge des optimisations pour votre processeur et surtout activer la MTRR utilisé par XFree pour accélérer l’affichage et donc “indispensable” si vous voulez regarder des films ( Divx, DVD ).

“MTRR ( Memory Type Range Register ) Support” -> Y

Options génériques

+ Là vous pouvez activer le support réseau ( indispensable même si vous n’avez pas de réseau car XFree a besoin de support réseau ) :

“Networking Support” -> Y

+ Vous pouvez activer le support pour les ports PCI ( à moins que vous n’ayez un PC datant de la guerre 14-18, je pense que vous en avez besoin )

“PCI Support” -> Y

+ Vous pouvez activer le support pour les périphériques hotplug ( i.e que vous branchez après le démarrage du PC ) comme les cartes PCMCIA, PC-Card et USB. Il vous faudra installer hotplug pour que cela marche.

“Support for hot-pluggable devices” -> Y

+ Vous pouvez activer sysctl ce qui vous permettra de tweaker votre système.

“Sysctl support” -> Y

+ Vous devez activer le support pour les binaires au format ELF car les exécutables linux sont dans ce format.

“Kernel support for ELF binaries” -> Y

+ Vous pouvez activer la gestion d’énergie de votre ce qui lui permettra notamment de s’éteindre correctement. Ici on ne va s’occuper que de l’APM car le support ACPI n’est pas forcément complet et sur certains système il peut même causer des ralentissements notables. Mais si vous avez besoin de l’ACPI n’hésitez pas, notamment si vous avez un portable.

“Power Management support” -> Y
“Advance Power Management BIOS Support” -> Y

Si votre ordinateur ne s’éteint pas correctement, soit vous pouvez essayer d’actyiver l’ACPI, soit demander au noyau d’essayer APM en mode réel pour éteindre la machine :
“Use Real Mode APM BIOS call to Power Off” -> Y

Port Parallèle

+ Vous pouvez activer le support pour votre port parallèle si vous l’utiliser.

“Parallel port support” -> Y ou m
“PC-style hardware” -> Y ou m

Plug and Play configuration

+ Support du Plug & Play ( surnommé aussi Plug & Pray 😉 ). Si vous avez des ports ISA vous pouvez aussi activez le support PnP pour l’ISA, il vous faudra alors le package isapnp.

“Plug and Play support” -> Y ou m

Block devices

+ Support pour le lecteur de disquette

“Normal floppy disk support” -> Y ou m

Si vous avez des périphériques particuliers sur votre port // de type CDROM, disque dur, vous y trouvez les différents pilotes pour ces périphériques.

+ Support d’un initrd. Nous allons le considérer comme indispensable étant donnée que nous sommes parties sur l’hypothèse de mettre la majorité des pilotes en module lorsque c’est possible.

“Initial RAM disk ( initrd ) support” -> Y

Multi-device support ( RAID and LVM )

Si vous voulez faire du RAID logiciel ou utiliser LVM, allez jeter un oeil dans cette section.

Networking Options

Tout ce qui concerne le réseau ( socket, protocol TCP/IP, fonctionnalités firewall/NAT avec Netfilter/Iptables, IPSEC, IPX ).
+ support des sockets Unix. Indispensable, notamment pour XFree.

“Unix domain socket” -> Y

+ support TCP/IP. Indispensable surtout si vous êtes en réseau.

“TCP/IP networking” -> Y

Les autres options sont laissées à votre discrétion. Sachez que Netfilter/Iptables est indispensable si vous voulez mettre en pace un firewall ou une passerelle NAT.

ATA/IDE/MFM/RLL support

Tout ce qui concerne votre matériel IDE ( disque dur, CDROM ). Vous y trouverez aussi l’émulation IDE -> SCSI indispensable si vous voulez utiliser votre graveur IDE sous Linux. Il y aura aussi le support de votre chipset IDE. Surtout n’oubliez de l’activer. + support ATA/IDE/MFM/RLL pour accéder au sous menu qui vous permettra de choisir les pilotes IDE dont vous avez besoin.

“ATA/IDE/MFM/RLL support” -> Y

+ support HD/CDROM IDE + DMA/UDMA + autres joyeuseries/optimisations + émulation SCSI pour graveur.

“Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support” -> Y
“Include IDE/ATA-2 DISK support” -> Y
“Use multi-mode by default” -> Y
“Include IDE/ATAPI CDROM support” -> Y ou m
“SCSI emulation support” -> Y ou m
“PCI IDE chipset support” -> Y
“Generic PCI IDE chipset support” -> Y
“Generic PCI bus-master DMA support” -> Y
“Use PCI DMA by default when available” -> Y

N’oubliez pas ensuite d’activer le pilote pour votre chipset en le mettant en Y voire m. Mais je vous recommande en Y.

SCSI support

Tout ce qui concerne votre matériel SCSI ainsi que le support générique SCSI si vous voulez utiliser un graveur IDE, et aussi les ZIP sur port parallèle.
+ Support SCSI pour les disques durs et CDROM.

“SCSI support” -> Y ou m
“SCSI disk support” -> Y ou m
“SCSI CDROM support” -> Y ou m

+ Support SCSI générique pour ceux qui utilisent un graveur IDE.

“SCSI generic support” -> Y ou m

Les pilotes pour les cartes SCSI se trouvent dans la sous catégorie “SCSI Low-level drivers”

REM : Ceux qui ont un ZIP sur port // doivent activer un des 2 pilotes dans la sous catégorie “SCSI Low-level drivers”. Le premier sert pour les ZIP 250, le second pour les ZIP 750 :
“IOMEGA parallel port (ppa – older drives)” -> Y ou m
“IOMEGA parallel port (imm – newer drives)” -> Y ou m

Network device support

Tout ce qui concerne les périphériques réseau ( cartes réseaux, support PPP ). Les pilotes des cartes réseau 10/100 se trouvent dans la sous catégorie Ethernet (10 or 100Mbit )

“Network device support” -> Y

+ Ceux qui ont l’ADSL ou une connection RTC/RNIS ( qui ont donc besoin du support PPP ), trouverons leur bonheur là

“PPP (Point-to-point protocol) support” -> Y ou m
les autres options PPP -> Y ou m

Input core support

Si vous avez une souris ou un clavier USB ( périphériques HID ), vous devriez activer les différents éléments

Character devices

Permet d’activer les terminaux virtuels, le port série, souris PS/2, joysticks, le support AGP ( agpgart ), la DRI ( /dev/dri ), l’I2C ( util pour le monitoring et pour les cartes TV ).
+ Terminaux virtuels

“Virtual terminal” -> Y
“Support for console on virtual terminal” -> Y

+ ports séries ( si vous l’utilisez )

“Standard generic (8250/16550 and compatible UARTs) serial support” -> Y

+ support I2C pour une carte TV

“I2C support -> I2C support” -> Y ou m
“I2C support -> I2C bit-banging interfaces” -> Y ou m

+ support souris PS/2

“Mice -> PS/2 mice ( aka “auxiliary device” ) support” -> Y ou m

+ support AGP

“/dev/agpgart (AGP support)” -> Y ou m
Ensuite vous choisissez le chipset de votre port AGP

+ support DRI ( 3D accélérée )

“DirectRendering Manager ( XFree86 DRI support )” -> Y
“DirectRendering Manager ( XFree86 4.1.0 and higher DRI support )” -> Y
Ensuite vous choisissez la carte graphique qu’il faut

Multimedia devices

Vous pourrez y activer le support pour votre carte TV

“Video For Linux” -> Y ou m
Dans la sous catégorie “Video For Linux” vous choissisez le pilote qui correspond au pilote de votre carte TV.

File systems

Là vous pourrez activer le support pour différents systèmes de fihcier ( ext2/ext3, reiserfs, XFS, JFS, FAT16/FAT32, NTFS en lecture seul, UDF pour les DVD, iso9660 pour les CDROM, NFS, Coda, SMB ( réseau windows ), Davfs ), les quotas.

“ISO 9660 CDROM file system support” -> Y
“/proc file system support” -> Y
“UDF file system support (read-only)” -> Y
“Partition Types -> PC BIOS ( MSDOS partition table ) support” -> Y
“Native Language support -> Codepage 850 (Europe)” -> Y ou m
“Native Language support -> NLS ISO 8859-1 (Latin1, Western european Languages)” -> Y ou m
“Native Language support -> NLS ISO 8859-15 (Latin1, Western european Languages with euro)” -> Y ou m
“DirectRendering Manager ( XFree86 4.1.0 and higher DRI support )” -> Y
Ensuite vous choisissez la carte graphique qu’il faut

Compilation

$> cd /usr/src/linux<- on va dans le rep où se trouve les sources du nouveau noyau

Si vous utilisez les sources issues d’un rpm faites par précaution la commande suivante :

$> make mrproper

Maintenant nous allons configurer et compiler le kernel.

$> make xconfig<- lance une interface graphique en tcl/tk pour configurer le noyau. Vous avez besoin du package nommé : tk

Note : il existe aussi d’autre interface pour configurer le noyau et celles-ci sont en mode console comme par exemple : make menuconfig
Celui-ci nécessite le package ncurses

On paramètres les options, regardez les aides quand vous hésitez. On quitte en sauvegardant. Puis :

$> make dep clean && make bzImage && make modules && make modules_install<- on lance la compilation. c’est long et croisez les doigts pour que tout se passe sans problême $> cp arch/i386/boot/bzImage /boot/vmlinux-2.4.x<- on copie l’image du noyau dans /boot

up

Configuration de lilo/grub

Lilo :

On vas dans /etc/lilo.conf , on copie une section qui concerne l’ancien noyau, cela ressemble à peu près à cela :

image=/boot/vmlinuz
label=linux
root=/dev/hda2
initrd=/boot/initrd.img
read-only

On copie donc cette section dans le lilo.conf à la fin ou la suite de celle-ci. Puis on met pour image l’emplacement du noyau (selon les commandes que j’ai donné c’est /boot/vmlinux-2.4.x . On remplace le label linux par test.
Cela devrait ressembler alors à cela à peu près :

image=/boot/vmlinux-2.4.x
label=test
root=/dev/hda2
initrd=/boot/initrd.img
read-only

Attention ! : seul les lignes “image =” et “label=” doivent être modifiées.

On sauvegarde, puis on tape :

$> /sbin/lilo<- on réinstalle lilo qui est le boot loader

On redémarre, et au prompt de boot de grub on tape test pour essayer le nouveau noyau.

Grub :

On va dans /boot/grub/menu.lst , on copie une section qui concerne l’ancien noyau, cela ressemble à peu près à cela :

title linux
kernel (hd2,0)/boot/vmlinuz root=/dev/hda2
initrd (hd2,0)/boot/initrd.img

On copie donc cette section dans le menu.lst à la fin ou la suite de celle-ci. Puis on met pour image l’emplacement du noyau (selon les commandes que j’ai donné c’est /boot/vmlinux-2.4.x . On remplace le titre linux par test.
Cela devrait ressembler alors à cela à peu près :

title test
kernel (hd2,0)/boot/vmlinux-2.4.x root=/dev/hda2
initrd (hd2,0)/boot/initrd.img

On redémarre, et au prompt de boot de lilo on sélectionne test pour essayer le nouveau noyau.

Ceux qui installent le kernel à partir de rpm, notamment les rpm de cooker, doivent remplacer les noms génériques par les noms réelles. Ainsi il faudra :
renommer /boot/vmlinuz en /boot/vmlinuz-2.x.y-zmdk
renommer /boot/initrd.img en /boot/initrd-2.x.y-zmdk
Pour connaitre les noms faites : $> ls -l /boot
et mettez les bons noms

up

Quelques explications rapides

Liens symboliques :

Nous avons utilisé une commande qui permettait de créer des liens symboliques ou raccourcis. En voici l’explication brève :
ln = link
-s = symbolique
syntaxe : ln -s fichier_original lien_vers_le_fichier

initrd :

J’ai aussi parlé de initrd. Ce fichier est une image chargé par le noyau au tout début du boot et qui lui permet notamment de charger des drivers/modules et autres. Pour faire un nouveau initrd, il faut utiliser le programme mkinitrd comme suit :

$> /sbin/mkinitrd -f –ifneeded /boot/initrd-2.4.x.img 2.4.x

Sous Mandrake, il existe un script qui se charge de créer un initrd pour vous et de mettre en place les liens symboliques dessus. Imaginons que vous voulez créer un initrd pour la version 2.4.21.5mdk du noyau, alors il vous suffit de taper :
/usr/share/loader/make-initrd 2.4.21.5mdk

Il suffit ensuite de remplacer dans lilo.conf ou menu.lst, pour votre nouveau noyau, les occurences de initrd.img avec initrd-2.4.x.img.
Plus d’info avec man initrd et aussi man mkinitrd

Compilation :

Nous avons utilisé des commandes pour la compilation du noyau. Voyons rapidement une explication :

make mrproper<-  “nettoie” les source du noyau. util seulement si vous installer à partir d’un rpm
make dep clean<-  crée les dépendances entre les modules
make bzImage<-  crée l’image du noyau. C’est celle qui est chargé au boot
make modules<-  crée les modules
make modules_install<-  installe les modules

up

Installation d’un noyau 2.6 sous mandrake 9.2 :

Ceci est vraiment donné à titre informatif. Sachez que le noyau 2.6 peut ne pas fonctionner sur votre système ou être plus instable.

Préparation :

REQUIS :
mkinitrd, modutils, bootloader-utils, module-init-tool, udev, sysfsutils, libsysfs0

Tout d’abord vous devez récupérer de nouvelles versions de certains packages :

modutils >= 2.4.25-2mdk
mkinitrd >= 3.4.43-10mdk
bootloader-utils >= 1.6
udev
sysfsutils
module-init-tools >= 0.9.15

Le plus simple est de récupérer les packages disponibles sur cooker par exemple sur ce site ftp.

Installation :

Une fois fois que vous avez téléchargé et installé les packages requis, il ne vous reste plus qu’à récupérer un des noyaux 2.6 disponibles pour Mandrake. Vous avez le choix entre les noyaux 2.6 de Mandrake ( kernel-2.6 ) ou les kernel 2.6 de Thomas Backlund ( kernel-tmb-2.6 ).
Dans notre cas, nous prendrons un noyau standard de mandrake ( même si je conseille souvent les noyau tmb disponibles dans contrib ou sur le site de Thomas Backlund ).
Au moment où j’écris ces lignes le noyau 2.6 le plus récent de mdk est kernel-2.6.1.1mdk-1-1mdk.i586.rpm .
Une fois qu’il est téléchargé, il suffit de faire :

$> rpm -Uvh kernel-2.6.1.1mdk-1-1mdk.i586.rpm<-  on installe le noyau
$> /sbin/lilo<-  on lance lilo pour vérifier que l’entrée pour le noyau 2.6 que l’on vient d’installer a été ajouté
$> generate-modprobe.conf > /etc/modprobe.conf<-  on génère le fihcier modprobe.conf qui contient la liste des modules à charger

Ensuite il suffit de redémarrer et de sélectionner le nouveau noyau au démarrage en croisant les doigts. Sachez que si vous avez des pilotes propriétaires ( NVIDIA, ATI, Nforce, … ) il vous faudra les recompiler/réinstaller voire même les patcher si ceux-ci ne sont pas compatible avec lenoayu 2.6

Note 1:
Le noyau 2.6 n’utilise plus le fichier /etc/modules.conf pour charger et configurer les modules. Désormais c’est le fichier /etc/modprobe.conf qui est utilisé.
Dans le même ordre d’idée, c’est désormais le fichier /etc/modprobe.preload qui permet de spécifier les modules à charger au démarrage de manière inconditionnelle.

Note 2:
Les modules ont désormais comme extension .ko ( kernel object ) et non plus .o .

Note 3:
Ceux qui veulent les drivers nvidia pour noyau 2.6 peuvent se rendre sur http://minion.de/