Kernel Perso sur RPS OVH

Linux
Comme à chaque fois, il est compliqué de se satisfaire d'un kernel par défaut chez un hébergeur, même si ces derniers sont pensés pour 99% des cas d'utilisation.

Si vous êtes un tordu comme moi, vous aurez besoin du 1% qui manque.

Pour moi, c'est simple, il manque les deux options suivantes qui ne sont pas dans les kernels NetBoot:
- CONFIG_IPV6_MULTIPLE_TABLES : Permet d'avoir de multiple route IPv6
- CONFIG_IPV6_SUBTREES : Permet de faire du source routing IPv6

Dans cette article, je vais vous expliquer comment compiler votre propre noyau pour votre RPS.

Prerequis Importants :
- Être à l'aise sur la compilation de noyau Linux
- Être à l'aise avec l'utilisation des RPS
- Avoir du temps devant soi.

Pour information, je l'ai fais avec une RPS II (Atom 330) et un noyau sans les patchs GRSEC.

Récupération des sources du kernel et de la config kernel

Dans, un premier temps, il nous faut récupérer votre configuration référence. Pour cela, rien de plus simple, il faut choisir votre noyau non GRSEC dans les choix du netboot (dans le manager OVH) et booter dessus.

Logguez vous sur votre RPS, et téléchargez les sources noyaux d'OVH (ou directement sur le site de kernel.org, mais, celle-ci ne contiennent pas des patchs utiles).

Pour mon exemple :

rXXXXX:~# wget ftp://ftp.ovh.net/made-in-ovh/bzImage/linux-2.6.28.4-ovh.tar.gz
--2009-04-14 00:26:09-- ftp://ftp.ovh.net/made-in-ovh/bzImage/linux-2.6.28.4-ovh.tar.gz
=> `linux-2.6.28.4-ovh.tar.gz'
Résolution de ftp.ovh.net... 213.186.33.9
Connexion vers ftp.ovh.net|213.186.33.9|:21...connecté.
Ouverture de session en anonymous...Session établie!
==> SYST ... complété. ==> PWD ... complété.
==> TYPE I ... complété. ==> CWD /made-in-ovh/bzImage ... complété.
==> SIZE linux-2.6.28.4-ovh.tar.gz ... 67469316
==> PASV ... complété. ==> RETR linux-2.6.28.4-ovh.tar.gz ... complété.
Taille: 67469316 (64M)

100%[=====>] 67 469 316 8,85M/s in 6,4s

2009-04-14 00:26:17 (9,99 MB/s) - « linux-2.6.28.4-ovh.tar.gz » sauvegardé [67469316]

rXXXXX:~#


Ensuite, décompactez les sources :

rXXXXX:~# tar xzf linux-2.6.28.4-ovh.tar.gz
rXXXXX:~#


Nous allons, maintenant, sauvegarder la conf par défaut fourni avec les sources (Noyau Std ipv4) et le remplacer par celui associé avec le noyau que nous avons choisi dans le netboot. Dans les versions non GRSEC, OVH a activé l'option dans la compilation qui rend accessible la configuration noyau via /proc/config.gz

rXXXXX:~/linux-2.6.28.4-ovh# cp .config .config.old
rXXXXX:~/linux-2.6.28.4-ovh# cp /proc/config.gz .
rXXXXX:~/linux-2.6.28.4-ovh# gunzip config.gz
rXXXXX:~/linux-2.6.28.4-ovh# cp config .config
rXXXXX:~/linux-2.6.28.4-ovh#


Maintenant, on peut modifier la configuration noyau.

rXXXXX:~/linux-2.6.28.4-ovh# make menuconfig
[...]


Une fois, le changement de configuration faites, on compile le noyau. Pour information, la plupart des versions de distribution nue que proposent OVH possèdent tout ce qu'il faut pour compiler un noyau.

rXXXXX:~/linux-2.6.28.4-ovh# make -j5
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf -s arch/x86/Kconfig
CHK include/linux/version.h
UPD include/linux/version.h
CHK include/linux/utsrelease.h
UPD include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-x86
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/bin2c
HOSTCC scripts/mod/mk_elfconfig
CC scripts/mod/empty.o
MKELF scripts/mod/elfconfig.h
[...]


La compilation peut prendre plus de 10 minutes.

Ensuite, on va installer le nouveau noyau

rXXXXX:~/linux-2.6.28.4-ovh# make install
sh /root/linux-2.6.28.4-ovh/arch/x86/boot/install.sh 2.6.28.4-ipv6-20090414-www.pouf.org arch/x86/boot/bzImage System.map "/boot"
rXXXXX:~/linux-2.6.28.4-ovh#


Donc, maintenant, on va noter le nom du binaire :

rXXXXX:~/linux-2.6.28.4-ovh# ls -latr /boot/
total 10280
-rw-r--r-- 1 root root 3267416 mai 29 2008 bzImage-2.6.24.5-xxxx-grs-ipv4-32
-rw-r--r-- 1 root root 830824 mai 29 2008 System.map-2.6.24.5-xxxx-grs-ipv4-32
-rw-r--r-- 1 root root 24116 fév 9 13:57 sid.bmp
-rw-r--r-- 1 root root 23662 fév 9 13:57 sarge.bmp
-rw-r--r-- 1 root root 153720 fév 9 13:57 debianlilo.bmp
-rw-r--r-- 1 root root 308326 fév 9 13:57 coffee.bmp
-rw------- 1 root root 512 fév 9 13:59 boot.0800
-rw------- 1 root root 512 fév 9 13:59 boot.0801
lrwxrwxrwx 1 root root 15 avr 13 23:47 debian.bmp -> /boot/sarge.bmp
-rw------- 1 root root 73216 avr 13 23:48 map
drwxr-xr-x 21 root root 4096 avr 13 23:52 ..
-rw-r--r-- 1 root root 4625936 avr 14 00:50 vmlinuz-2.6.28.4-ipv6-20090414-www.pouf.org
-rw-r--r-- 1 root root 1095728 avr 14 00:50 System.map-2.6.28.4-ipv6-20090414-www.pouf.org
-rw-r--r-- 1 root root 50361 avr 14 00:50 config-2.6.28.4-ipv6-20090414-www.pouf.org
drwxr-xr-x 2 root root 4096 avr 14 00:50 .
rXXXXX:~/linux-2.6.28.4-ovh#


On voit dans mon cas, que le noyau est celui-ci : vmlinuz-2.6.28.4-ipv6-20090414-www.pouf.org

On va donc, maintenant, modifier la configuration LILO (bootloader par défaut chez OVH)

Voici, la configuration originale de lilo :

prompt
timeout=50
default=linux
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
lba32
#serial=0,9600n8

image=/boot/bzImage-2.6.24.5-xxxx-grs-ipv4-32
label=linux
read-only
root=/dev/ram0
initrd=/initrd-iscsi.img
append="libusual.bias=ub"


Je vais donc mettre de côté l'ancienne configuration en la renomant linux-old et j'ajoute le nouveau noyau :

prompt
timeout=5
default=linux
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
lba32
#serial=0,9600n8

image=/boot/vmlinuz-2.6.28.4-ipv6-20090414-www.pouf.org
label=linux
read-only
root=/dev/ram0
initrd=/initrd-iscsi.img
append="libusual.bias=ub"

image=/boot/bzImage-2.6.24.5-xxxx-grs-ipv4-32
label=linux-old
read-only
root=/dev/ram0
initrd=/initrd-iscsi.img
append="libusual.bias=ub"


Ensuite, on applique la configuration LILO :

rXXXXX:~/linux-2.6.28.4-ovh# lilo -v
LILO version 22.8, Copyright (C) 1992-1998 Werner Almesberger
Development beyond version 21 Copyright (C) 1999-2006 John Coffman
Released 19-Feb-2007, and compiled at 17:47:45 on Nov 15 2008
Debian GNU/Linux

Reading boot sector from /dev/sda
Using MENU secondary loader
Calling map_insert_data

Boot image: /boot/vmlinuz-2.6.28.4-ipv6-20090414-www.pouf.org
Mapping RAM disk /initrd-iscsi.img
Warning: The initial RAM disk is too big to fit between the kernel and
the 15M-16M memory hole. It will be loaded in the highest memory as
though the configuration file specified "large-memory" and it will
be assumed that the BIOS supports memory moves above 16M.
Added linux ? *

Boot image: /boot/bzImage-2.6.24.5-xxxx-grs-ipv4-32
Mapping RAM disk /initrd-iscsi.img
Added linux-old

Writing boot sector.
/boot/boot.0800 exists - no boot sector backup copy made.
One warning was issued.
rXXXXX:~/linux-2.6.28.4-ovh#


Maintenant, le système est prêt.

Important : Il ne faut pas oublier de configurer le netboot dans le manager sur HD, pour qu'il boote sur le disque dur et non pas en réseau.

Vous pouvez rebooter !!

Important : Le temps de reboot est relativement long : Pour exemple, mon RPSII met 15 minutes à rebooter !! Donc, faut être patient !! En supprimant des drivers inutiles et en optimisant la configuration qui m'a fait passé d'un noyau de 4.5 Mo à 3.3Mo , cela m'a fait gagner 4 minutes au reboot... Je vais continuer de chercher un moyen d'optimiser cela !!

rXXXXX:~# uname -a
Linux rXXXXX.ovh.net 2.6.28.4-ipv6-20090414-www.pouf.org #1 SMP Tue Apr 14 00:50:33 CEST 2009 i686 GNU/Linux
rXXXXX:~#


Rétroliens

    Pas de rétroliens

Commentaires

Afficher les commentaires en (Vue non groupée | Vue groupée)

  1. mollusk says:

    bravo pour votre article, il m'a été d'une grande utilité. Savez-vous comment fonctionne le boot du RPS car si je vois bien comment ça peut marcher en netboot (le pxe de la carte réseau charge par dhcp/bootp/tftp le kernel + l'initrd qui monte les disks iscsi et fait un chroot), je ne vois pas du tout comment il charge un kernel à partir de /dev/sda1 alors que c'est le kernel/initrd qui est censé monter l'iscsi
    merci,
    msk


Ajouter un commentaire


Les adresses Email ne sont pas affichées, et sont seulement utilisées pour la communication.
To leave a comment you must approve it via e-mail, which will be sent to your address after submission.
Marquer un texte en gras: *mot*, souligner un texte: _mot_.
Les smilies standard comme :-) et ;-) sont convertis en images.
Syntaxe BBCode autorisée
De quel couleur est le cheval blanc d'Henri 4 ?