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