Sortis il y a un peu plus d’un mois, le kernel linux 4.16 se veut plus léger (450 000 lignes de code en moins avec l’abandon d’architectures inutilisées) et disponible avec des correctifs contre Meltdown et Spectre. Mais ce n’est pas tout !
Zorin OS
Zorin OS est un système d’exploitation basé sur Ubuntu, qui se veut simple, efficace et très agréable d’utilisation. J’utilise la version lite qui équipe un HP EliteBook 2530p avec 2Go de RAM et un Intel Core 2 x64.
Quelques infos système :
$ lsb_release -a No LSB modules are available. Distributor ID: Zorin Description: Zorin OS 12.3 Release: 12 Codename: xenial
$ uname -a Linux PC-ROLLO 4.13.0-37-generic #201804012230 SMP Sun Apr 1 20:31:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Installation automatique du noyau avec dpkg
Cette première méthode d’installation se fait assez aisément (avec une configuration standard) en récupérant directement les binaires qui se chargeront d’installer le nouveau noyau.
Récupération des binaires depuis le repo d’Ubuntu
$ cd /tmp
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.16/linux-headers-4.16.0-041600_4.16.0-041600.201804012230_all.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.16/linux-headers-4.16.0-041600-generic_4.16.0-041600.201804012230_amd64.deb
$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.16/linux-image-4.16.0-041600-generic_4.16.0-041600.201804012230_amd64.deb
Une fois les fichiers récupérés, on peut maintenant les installer avec dpkg
$ dpkg -i *4.16*
Le nouveau noyau est maintenant installé ! On le repère dans le répertoire /boot, qui contient les fichiers nécessaires au démarrage du système d’exploitation, donc les différents noyaux présents :
$ ls -a /boot |grep vmlinuz vmlinuz-4.13.0-37-generic vmlinuz-4.16.0-041600-generic
Mise à jour de GRUB et redémarrage
$ update-grub2 && shutdown -r now
Une fois le redémarrage effectuée, on s’assure que le nouveau kernel est bien pris en compte :
$ uname -a Linux PC-ROLLO 4.16.0-041600-generic #201804012230 SMP Sun Apr 1 22:31:39 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
Il convient de toujours garder un kernel de secours (version stable de préférence => 4.9, 4.14 …) en cas de problème avec celui nouvellement installé. On est pas à l’abri d’un kernel panic 😉
Installation avec compilation manuelle
La compilation manuelle peut avoir différents but : faire fonctionner un matériel qui n’est pas inclus dans le noyau actuel, optimiser son noyau en y incluant le strict nécessaire, durcir sa sécurité (selinux) où alors appliquer différents patchs/correctifs.
Dans mon cas, je souhaite l’alléger de toute charge inutile présente dans les options de base, et de surtout de me faire un peu la main sur le fonctionnement d’un noyau Linux ! 🙂
Je repars d’une machine Zorin OS vierge, avec la version du noyau en 4.13.
Préparation des outils et récupération du code source du noyau
Différents outils sont nécessaires dans mon cas (compilation classique avec une distribution dérivée de Debian)
$ apt-get update && apt-get install build-essential kernel-package debconf-utils dpkg-dev debhelper ncurses-dev libelf-dev
Les bibliothèques OpenSSL sont également nécessaires et non-disponible de base dans Zorin OS
$ apt-get install openssl libssl-dev
L’avantage avec la compilation manuelle est que je peux choisir directement la version de noyau qui m’intéresse. Je vais prendre la 4.16.7, datant du 02 Mai 2018.
Récupération du code source du noyau via le site officiel kernel.org
$ mkdir ~/kernel && cd ~/kernel
$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.7.tar.xz
Décompression de la tarball
$ tar xvf linux-4.16.7.tar.xz && cd linux-4.16.7
Compressée, l’archive faisait 100 Mo. Nous en sommes à un peu moins d’1Go.
$ du -hs . 908M .
Options de compilation
Option 1 : garder la configuration du noyau actuelle
Si l’on souhaite garder les options actuels et simplement upgrader sa version du noyau, il faut récupérer le fichier de config actuel :
$ cp /boot/config-$(uname -r) /root/kernel/linux-4.16.7/.config
Où alors, plus simple …
$ make defconfig
Cela va nous permettre de lancer la compilation du nouveau noyau tout en gardant le paramétrage actuel.
$ head -n 10 .config # # Automatically generated file; DO NOT EDIT. # Linux/x86 4.16.17 Kernel Configuration # CONFIG_64BIT=y CONFIG_X86_64=y CONFIG_X86=y CONFIG_INSTRUCTION_DECODER=y CONFIG_OUTPUT_FORMAT="elf64-x86-64"" CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
Option 2 : personnaliser sa configuration
Pour compiler et choisir les options voulus en mode terminal, je vais utiliser l’outil make nconfig. Il offre une meilleur convivialité et interface que make menuconfig
Il existe également des outils graphique, comme make gconfig ou make xconfig.
La commande make nconfig nécessite la bibliothèques ncurses, installé précédemment (ncurses-dev).
J’ai dû dans mon cas installer des paquets qui n’étaient pas incluent dans la distro de base et nécessaire à la compilation :
$ apt-get install bison flex
I’m ready !!
$ make nconfig
Je ne vais pas détailler ici les différentes options possibles, la touche F2 est la pour cela !
Dans mon cas, je vais choisir de désactiver différentes fonctionnalités :
- Paramètres de virtualisation
- Quelques paramètres du kernel hacking (kernel debugging, niveau de verbosité)
- Quelques paramètres réseau (réseau radio, netfilter, IPv6)
- Drivers pour MACINTOSH
- Fonction de SWAP
- Quota de disques durs
Et bien d’autres encore … je souhaite m’alléger le plus possible !
Une fois la configuration terminée, il faut presser F6 pour générer le fichier .config
Accélérer le processus de compilation
Toujours dans le même répertoire, on peut maintenant lancer la compilation avec le fichier .config souhaité et généré précédemment.
Pour accélérer la compilation, j’utilise la commande make -j suivie du nombre de CPU +1 que je souhaite utiliser. Ces différentes informations sont visibles via la commande lscpu
$ lscpu Architecture: x86_64 Mode(s) opératoire(s) des processeurs :32-bit, 64-bit Byte Order: Little Endian CPU(s): 2 On-line CPU(s) list: 0,1 Thread(s) par cœur : 1 Cœur(s) par socket : 2 Socket(s): 1 Nœud(s) NUMA : 1 Identifiant constructeur :GenuineIntel Famille de processeur :6 Modèle : 23 Model name: Intel(R) Core(TM)2 Duo CPU L9600 @ 2.13GHz Révision : 10 Vitesse du processeur en MHz :2134.000 ***commande tronquée***
J’ai quatre coeurs au total, je vais donc en allouer trois pour la compilation :
$ make -j4
puis
$ make install
Pendant le déroulement de cette commande, le fichier de configuration de grub sera automatiquement mis à jour. Cela permettra de booter directement sur le nouveau noyau !
On redémarre la bête
$ reboot
Pas de soucis au démarrage ! C’est plutôt bon signe 😉
Check du nouveau noyau :
$ uname -r 4.16.7
Nouveau noyau installé !
Sources et liens complémentaires
Wiki debian-fr.xyz : compiler et patcher son noyau
Debian-handbook : Raphaël Hertzog et Roland Mas
Opensuse.org : configurer, compiler et installer un noyau Linux personnalisé
Et le très bon livre de Philippe PINCHON aux éditions ENI