Compilation linux

De Wiki doc

Ce document traite de la compilation d'un noyau Linux.

ATTENTION

La compilation prend plusieurs heures (environs 2h30 sur mon core i7 960). Ne commencez pas l'opération si vous allez vous coucher et que votre PC fait un bruit d'avion à coté de votre lit (ça sent le vécu)...

La compilation d'un noyau se fait en passant des paramètres sous forme de variables dans un fichier de configuration nommé .config.

Compilation Linux Debian

Depuis une configuration existante

Préparation

Téléchargement des sources de Linux

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

Note : Vous trouverez les sources de la version du noyau que vous désirez sur le site officiel du noyau.

Décompression des sources

tar xf linux-4.13.tar.xz && cd linux-4.13/

Installation des dépendances

apt install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

Note : le paquet kernel-package n'est pas disponible dans Stretch. Utilisez une autre branche pour l'installation.

Nettoyage de l'archive

make clean && make mrproper

Explications:

  • make clean : Supprime la plupart des fichiers générés (nécessaires à la compilation mais non utilises à l'issue) mais garde la config'.
  • make mproper : Supprime tous les fichiers générés précédemment ainsi que la config et des fichiers de sauvegarde (purge totalement l'archive - mproper = Mr Propre).

Configuration

Importation des paramètres du noyau actuel

cp /boot/config-`uname -r` .config

Prise en compte du fichier de configuration

Note : Cette partie est peu être inutile, vérifier.

make menuconfig

Allez sur Load et importer le .config.

Nettoyer les fichiers de compilation

make-kpkg clean

Compilation

Compiler le noyau

fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

INFORMATION

Cette opération va générer deux fichier .deb:
  • linux-headers-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb
  • linux-image-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb
Leur installation avec un dpkg -i créera le fichier /boot/initrd.img-4.13.0-custom et /boot/vmlinuz-4.13.0-custom.

Installation

Depuis une installation sur une mémoire morte

dpkg -i linux-headers-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb linux-image-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb

Note : les fichiers /boot/initrd.img-4.13.0-custom et /boot/vmlinuz-4.13.0-custom sont désormais présents dans /boot.

Depuis un squashfs

L'installation de ces paquets utilise l'emplacement /lib/live/mount/medium/live qui ne contient pas d'espace libre (il y a donc une erreur à l'installation). Pour combler cette lacune, exécuter cette commande:

mount -t tmpfs -o rw,relatime,size=1G tmpfs /lib/live/mount/medium/ && mkdir /lib/live/mount/medium/live

On peut désormais installer les paquets sans encombre et récupérer leur résultat dans /boot pour un amorçage PXE

dpkg -i linux-headers-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb linux-image-4.13.0-custom_4.13.0-custom-10.00.Custom_amd64.deb

Sources de la section