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
- cd /usr/src
Téléchargement du kernel
- wget ftp://ftp.kernel.org/pub/linux/kernel/v3.x/linux-3.9.6.tar.xz
Téléchargement du patch grsecurity [1] correspondant à la version du noyau (3.9.6 dans l’article)
- wget https://raw.github.com/slashbeast/grsecurity-scrape/master/test/grsecurity-2.9.1-3.9.6-201306182033.patch
récuperer la config du noyaux ovh sur leur serveur ftp [2]
- wget ftp://ftp.ovh.net/made-in-ovh/bzImage/latest-production/config-3.8.13-xxxx-grs-ipv6-64
Préparer les sources
décompresser [3] le noyau
- tar -Jxf linux-3.9.6.tar.xz
copier la configuration ovh dans racine du noyau linux décompressé précédemment
- cp config-3.8.13-xxxx-grs-ipv6-64 linux-3.9.6
aller dans le répertoire du noyau fraichement décompressé
- cd linux-3.9.6
appliquer le patch grsec
- patch -p1 < ../grsecurity-2.9.1-3.9.6-201306182033.patch
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 (!)
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
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 ) :
- make -j 8
Le kernel se retrouve dans le dossier arch/x86/boot. On va Copier/renommer le nouveau kernel dans le dossier /boot du système :
- cp arch/x86/boot/bzImage /boot/bzImage-3.9.6-xxxx-grs-ipv6-64-lxc
Installer le kernel et redémarrer
Je vous invite à consulter mon article précédent intitulé Installer un nouveau kernel Linux en 5 étapes