Compiler Linux

Nouveau PC, nouvelle installation d’une Bullseye, autant cette fois-ci tout compiler ?

PC : Un tiny PC Lenovo ThinkCentre Core I5

Deux méthodes

Soit un système est déjà installé sur votre machine et vous compillez.

Soit vous compillez direct à partir d’un live-CD : https://www.debian.org/CD/live/#live-install-stable

Note : selon la puissance du processeur, la compilation peut être très rapide (10 min avec un intel core i7), mais la plupart du temps c’est entre 1 et 4h.

Prérequis

Avoir suffisamment d’espace libre pour :

  • les dépendances
  • la compilation qui créera des paquets

L’espace nécessaire est de 10GB minimum, plus est conseillé

Les dépendances

On installe les dépendances dans un premier temps, en root :

# apt install build-essential fakeroot dpkg-dev perl libssl-dev bc gnupg dirmngr libncurses-dev libelf-dev flex bison lsb-release rsync dwarves

Explication des paquets :

  • build-essential : Liste informative des paquets de construction essentiels
  • fakeroot : outil de simulation des privilèges superutilisateur
  • dpkg-dev : outils de développement pour les paquets Debian
  • perl : langage perl (langage de rapports et d’extractions)
  • libssl-dev : trousse à outils SSL
  • bc : langage bc (calculateur de précision arbitraire)
  • gnupg : remplaçant libre de PGP
  • dirmngr : service de gestion de certificats réseau
  • libncurses-dev : bibliothèques de développement pour ncurses (bibliothèque pour l’interface utilisateur)
  • libelf-dev : bibliothèques de développement et fichiers d’en-tête de libelf1 [lire et écrire des fichiers ELF (Executable and Linkable Format) à un niveau élevé]
  • flex : générateur rapide d’analyse lexicale
  • bison : énérateur d’analyseur syntaxique compatible avec YACC (Yet Another Compiler Compiler)
  • lsb-release : Utilitaire de rapport de version du Linux Standard Base
  • rsync : outil de copie de fichiers à distance (et local) rapide et polyvalent
  • dwarves : ensemble d’utilitaires DWARF sophistiqués

Les dépôts

Si vous avez les dépôts dans /etc/apt/sources.list qui vous sont utiles (vous n’aurez donc plus le minimum de dépendances) vous pouvez lancer, en root :

# apt build-dep linux

Répertoire d’installation

Création du répertoire d’installation dans lequel s’effectuera la compilation (en user) :

$ mkdir ~/compilation
$ cd ~/compilation

Récupération et vérification du noyau

Récupérer la source

Normalement, si vous partez d’une fraiche install ou d’un live-CD, wget n’est pas installé, on utilisera donc curl. Le mieux est d’aller récupérer le noyau sur le site https://www.kernel.org/

$ curl -o linux-5.15.1.tar.xz https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.1.tar.xz

Vérification

On doit également récupérer la signature sur https://www.kernel.org/ pour la comparer avec le noyau précédement téléchargé :

Récupération de la signature :

$ curl -o linux-5.15.1.tar.sign https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.1.tar.sign

Comparaison :

$ xz -cd linux-5.15.1.tar.xz | gpg --verify linux-5.15.1.tar.sign -

La commande vous renvoie une clé RSA mais il ne peut pas vérifier la signature et nous allons utiliser la clé indiquée pour le faire :

$ gpg --keyserver hkp://keys.gnupg.net --recv-keys <LaCléRécupérée>

Note : Si vous rencontrer un problème vous pouvez utiliser un autre site de vérification :

  • keyserver.ubuntu.com
  • keys.openpgp.org
  • pgp.mit.edu

Si vous n’avez pas d’erreur, tout est ok.

Décompression

Décompression des sources, puis on se place dans le répertoire :

$ tar -xvaf linux-5.15.1.tar.xz
$ cd linux-5.15.1

Configuration

Il existe 2 options, soit en utilisant toutes les options par défault (en utilisant les options du noyau actuel), soit tout paramétrer soi-même

Avec les options par défaut

$ make olddefconfig

Pour une configuration pointue

$ make menuconfig

Et vous n’avez plus qu’à cocher ou décocher ce dont vous avez besoin. Vous pouvez sauvegarder votre config dans un fichier d’extension .config

Désactiver les clés

Il nous faut générer de nouvelles clés et désactiver les actuelles car elles sont déjà utilisé pour signer le noyau, comme nous allons créer un autre noyau elles ne seront pas valides.

$ ./scripts/config -d CONFIG_MODULE_SIG_ALL -d CONFIG_MODULE_SIG_KEY -d CONFIG_SYSTEM_TRUSTED_KEYS

Compilation et Installation

Compilation

Lancer la commande :

$ make deb-pkg -j"$(nproc)" LOCALVERSION=-"$(dpkg --print-architecture)" KDEB_PKGVERSION="$(make kernelversion)-1"

Si vous ne voulez que les paquets nécéssaires :

$ make bindeb-pkg -j"$(nproc)" LOCALVERSION=-"$(dpkg --print-architecture)" KDEB_PKGVERSION="$(make kernelversion)-1"

Explications des commandes :

  • -j“$(nproc)“ :

    • prend le nombre de threads total de votre processeur (pour une compilation plus rapide possible),
    • vous pouvez mettre -j<nombre> en remplaçant nombre par le nombre de cores à allouer
  • LOCALVERSION=-“$(dpkg –print-architecture)“

    • nom custom de l’architecture, vous pouvez en choisir un comme tel LOCALVERSION=-archi42 (sans majuscule)
  • KDEB_PKGVERSION=“$(make kernelversion)-1”

    • pour versionner le kernel 1 (soit version 1)

Installation

Dans le répertoire précédent, soit dans ~/compilation, un certains nombre de .deb sont nécéssaires : au moins pour les headers et l’image du kernel. Le mieux est quand même d’installer tous ceux nouvellement présents dans ce répertoire

# dpkg -i *.deb

Documentation

https://debian-facile.org/doc:systeme:kernel:compiler
https://www.kernel.org/
https://fr.wikipedia.org/wiki/Ncurses
https://fr.wikipedia.org/wiki/Executable_and_Linkable_Format
https://www.debian.org/distrib/packages
https://stackoverflow.com/questions/66217436/gpg-keyserver-receive-failed-no-name

> Partager <