«

»

avr 03

Compiler un kernel 4.10.x optimisé vmware sous Debian 8 jessie

Introduction

Aujourd’hui on va parler compilation de kernel !

Alors déjà pourquoi compiler son kernel ?

Parce que le kernel stock a l’avantage de pouvoir se lancer à peu près n’importe quoi, de la VM à un PC portable en passant une gameboy (j’exagère mais à peine).

La contre-partie de ça, c’est que le kernel doit embarquer pleins de chose qui ne servent à rien dans une VM.

On va donc essayer d’en compiler avec le strict nécessaire pour faire tourner une VM ESXi 6.

Périmètre de ce tuto

Ce tuto est réalisé sur une Debian jessie et doit permettre de faire tourner une VM ESXi 6.

La base

On commence sur une installation minimale d’une Debian 8 Jessie. Je ne détaillerai pas cette installation.

On va d’abord télécharger les sources du kernel depuis l’url suivante : https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.10.8.tar.xz

cd /usr/src

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.10.8.tar.xz

On décompresse tout ça :

tar xJf linux-4.10.8.tar.xz

cd linux-4.10.8

Maintenant qu’on a les sources on va installer les binaires nécessaires pour compiler notre nouveau noyau :

aptitude install build-essential kernel-package debconf-utils dpkg-dev debhelper ncurses-dev

Là vous devriez normalement rencontrer cette question. Choisissez l’option N°1

debconf

Voilà maintenant on a tout ce qu’il faut pour compiler son kernel :-)

La configuration

Jusque là c’était facile. C’est maintenant que les choses se corsent. Il va falloir choisir ce qu’on veut embarquer dans son kernel. Quelles sont les fonctionnalité qu’on attends de lui, quels matériel veut-on qu’il supporte, etc… Et ça c’est long, très très long. Surtout quand on cherche à enlever ce qui ne nous servira pas. Parce qu’il faut pas tout enlever non plus, autrement ça va plus démarrer. Je vous recommande d’y aller par petite touche. Compiler, tester, et recommencer, jusqu’à obtenir exactement ce qu’on veut. Et comme il faut compiler à chaque fois pour pouvoir tester, ça prend beaucoup de temps. Un test de base pour commencer est la commande :

dmesg

Ca vous renvoie tout ce que crash le kernel au démarrage, et c’est souvent là que les problèmes apparaissent.

Comme je suis un admin sympa je vous propose de télécharger ma conf ici. Elle est très minimaliste, j’ai même enlevé tout ce qui touche à netfilter et ipv6. Mais libre à vous de rajouter ces fonctionnalités :-)

Si vous souhaitez partir de ma conf, copiez là dans le répertoire « /usr/src/linux-4.10.8″ sous le nom de fichier « .config »

Pour la modifier :

make menuconfig

Vous aurez ensuite une belle interface ncurses pour naviguer dans les nombreux menus.

La compilation

Une fois que tout est bien configurer comme on le souhaite, on va passer à la compilation. Cette étape peu prendre du temps. Beaucoup de temps même, surtout quand on compile pleins de trucs qui servent à rien. Avec la conf que je vous fournie ça ne devrait pas prendre plus de 8 à 10 minutes.

make deb-pkg KDEB_PKGVERSION=version_de_la_compilation LOCALVERSION=-nom_de_version_du_kernel -j nb_de_jobs_simultanés

Quelques explications :

LOCALVERSION : C’est en quelque sorte votre branche de kernel. Par example, un kernel pour vm, un kernel sans netfilter, etc…

KDEB_PKGVERSION : Le numéro de version dans la branche. Pratique pour les future mise à jour.

-j : Le nombre de tâches de compilation simultanées. La en gros c’est simple, vous faite [nb_de_vcpu] + 1

Perso ça donne ça sur une VM avec 4 vCPU :

time make deb-pkg KDEB_PKGVERSION=1.03 LOCALVERSION=-vm-no-netfilter -j 5

La commande time me permet de voir combien a pris la compilation.

Une fois fini, vous devriez avoir les fichiers suivants dans /usr/src :

linux-headers-4.10.8-vm-no-netfilter_1.03_amd64.deb

linux-image-4.10.8-vm-no-netfilter_1.03_amd64.deb

linux-libc-dev_1.03_amd64.deb

Vous voilà avec vos kernel package prêt à être installé.

L’installation

Nous sommes maintenant à la dernière étape de l’opération :-)

Pour installer vos paquets :

dpkg -i linux-image-4.10.8-vm-no-netfilter_1.03_amd64.deb linux-headers-4.10.8-vm-no-netfilter_1.03_amd64.deb linux-libc-dev_1.03_amd64.deb

Un petit reboot et vous tournerez avec la dernière version de kernel au moment de la rédaction de ce tuto.

Pour info ce kernel vous permettra d’être mis à jour sans avoir à rebooter.

Le petit plus en compilant de cette façon, c’est que vous pourrez installer ce kernel, via les paquets produits, sur vos autres machines sans avoir refaire l’ensemble de l’opération sur chaque machines.

Complément

Je vous mets en lien un script python très très pratique pour comparer les différence de configuration entre deux kernel diffconfig.

Merci aux auteurs, Matt Mackall et Tim Bird pour le partage.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


quatre × 1 =

Vous pouvez utiliser les balises HTML suivantes : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>