Compiler un kernel pour LXC
Un noyau LXC sur serveur dédié OVH

Suite à l’abandon de la technologie openvz dans les dépots officiels de debian wheezy ; Je dois me mettre à la page et utiliser LXC pour virtualiser mes environements linux.
Le comble c’est que LXC ne nécessite pas de recompilation de noyaux mais malheureusement les kernels livrés par ovh n’ont pas les cgroup d’activés

Récupérer les sources du noyau, le patch grsec et la config ovh qui va bien

Se rendre dans un dossier de travail

Téléchargement du kernel

Téléchargement du patch grsecurity [1] correspondant à la version du noyau (3.9.6 dans l’article)

récuperer la config du noyaux ovh sur leur serveur ftp [2]

Préparer les sources

décompresser [3] le noyau

copier la configuration ovh dans racine du noyau linux décompressé précédemment

aller dans le répertoire du noyau fraichement décompressé

appliquer le patch grsec

Configuration des cgroups

dans le repertoire du kernel, lancer l’utilitaire de configuration du noyau make menuconfig et configurer lxc cgroup [4] en activant les options suivantes :

-> General setup
	[renommer votre kernel] Local version - append to kernel release
	-> Control Group support
		[x] Namespace cgroup subsystem
		[x] Freezer cgroup subsystem
		[x] Cpuset support
		[x] Simple CPU accounting cgroup subsystem
		[x] Resource counters
		[x] Memory resource controllers for Control Groups
		-> Group CPU scheduler
			[x] Basis for grouping tasks (Control Groups) (!)
			[x] Group scheduling for SCHED_OTHER (NEW)
			[x] CPU bandwidth provisioning for FAIR_GROUP_SCHED
			[x] Group scheduling for SCHED_RR/FIFO
		-> Namespaces support
			[x] UTS namespace
			[x] IPC namespace
			[x] User namespace (!)
			[x] Pid namespace
			[x] Network namespace
 -> Device Drivers
	-> Character devices
		[x] Support multiple instances of devpts
		[*] Unix98 PTY support
	-> Network device support
		[x] MAC-VLAN support
		[x] Virtual ethernet pair device
 -> Networking support
	-> Networking options
		[x] 802.1d Ethernet Bridging
		[x] Network priority cgroup
	-> Security options
		[x] File POSIX Capabilities (!)
(!) suivant la version/configuration du kernel certaines options peuvent être déplacées ou inexistantes. Pour activer l’option usernamespace je suis tombé sur un bug pour le noyau 3.8. De plus une contrainte oblige a désactiver le système de fichier XFS [5] pour pouvoir activer cette option. XFS devrait être supporté à partir des versions 3.10 du kernel linux.

Une fois votre configuration terminée, retourner sur la page d’accueil de menuconfig sélectionner < Exit >, une boite de dialogue vous demande d’enregistrer votre configuration selectionner < yes > avant de quitter.

Avant de compiler, On va tester la configuration :


CONFIG=/usr/src/linux-3.9.6/.config lxc-checkconfig

 --- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

 --- Control groups ---
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: missing (!)
Cgroup cpuset: enabled

 --- Misc --- 
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

 

Cgroup memory controller : missing (!) - Debian Wheezy

Sur Debian wheezy, avec le paquet lxc, la configuration de "memory controller" semble manquante. En installant la dernière version de lxc (0.9) la vérification devient OK

Youpi ! la configuration est maintenant terminée, il est temps de lancer la compilation avant de boire un café !

Compilation du noyau

Penser à installer les outils pour la compilation des noyaux. Sur Debian, le paquet s’appelle build-essential c’est un meta-paquet dédié a l’installation de tous les outils de compilation make, gcc, etc..

Lancer la compilation, ou -j X (correspond au nombre de core ) :

Le kernel se retrouve dans le dossier arch/x86/boot. On va Copier/renommer le nouveau kernel dans le dossier /boot du système :

Installer le kernel et redémarrer

Je vous invite à consulter mon article précédent intitulé Installer un nouveau kernel Linux en 5 étapes