logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Ceci est une ancienne révision du document !


Compiler un kernel de kernel.org

Voir aussi le tuto :

Introduction

Compiler un kernel (plus réçent) est utile pour plusieurs choses :

  1. Pour les maniaques, juste avoir le kernel le plus réçent ! 8-o
  2. Bénéficier des nouvelles fonctionnalités offertes par celui-ci.
  3. Avoir une meilleure reconnaissance matérielle.
  4. Pouvoir peaufiner les options de compilations pour ses besoins

Il y a sûrement d'autres raisons de le faire mais ce sont celles que j'ai retenues. :-)

Testé sous stretch, future Debian Stable :

Je rappelle pour les personnes non-habituées et les habitués tête en l'air, qu'il faut bien tout lire.

Nous n'avons pas besoin d'être en root, sauf pour installer les paquets apt au début et le kernel à la fin !

Étape 1 Prérequis et Dépendances

Prévoir un peu de stockage (10GB pour prévoir large) car il y aura une création des paquets du kernel :-)

Installer les paquets :

apt install build-essential fakeroot libncurses5-dev dpkg-dev libssl-dev bc gnupg dirmngr

C'est-à-dire :

  1. le compilateur et ses utilitaires principaux, ce qui va nous permettre de compiler en user
  2. et un utilitaire de configuration du kernel
  3. gpg pour contôler la signature des sources

Ce qui normalement :

  1. permettra la contruction des packages,
  2. permettra de configurer votre kernel par rapport à votre machine.

Pour avoir un menu graphique de configuration des options:

  • Pour les DE basés sur qt:
apt install libqt4-dev

quand nous seront à l'étape 5 nous pourrons faire:

make xconfig
  • Pour les DE basés sur gtk:
apt install libgtk2.0-dev libglade2-dev

quand nous seront à l'étape 5 nous pourrons faire:

make gconfig

Étape 2 Création répertoire de compilation

Les X remplacent des chiffres

On va télécharger dans son dossier personnel, dans un sous-dossier kernel.

On crée le dossier :

mkdir ~/kernel

On se déplace dedans :

cd ~/kernel

Étape 3 Téléchargement et vérification de l'intégrité du kernel

Il faut télécharger le kernel (source et signature) depuis ce lien :

Les commandes du cadre suivant sont à copier coller ligne par ligne en modifiant juste la version (pour une version voulue) du kernel à télécharger. Cette automatisation a été conçue pour les kernels de kernel.org. Si vous compilez à partir d'autres sources, il vous faudra comprendre le fonctionnement gpg et l'automatisation (au copier collé par lignes) ne seras pas fonctionnelle.

Pour automatiser un peu, voici un exemple avec le kernel 4.10.14 (à changer par la version du kernel que vous voulez):

kversion=4.10.14	# la version du kernel à changer
wget https://www.kernel.org/pub/linux/kernel/v${kversion:0:1}.x/linux-$kversion.tar.xz    # les sources du kernel
wget https://www.kernel.org/pub/linux/kernel/v${kversion:0:1}.x/linux-$kversion.tar.sign    # la signature des sources

Voilà, les prochaines fois, vous n'aurez plus qu'à changer la variable kversion , les autres commandes ne changeront pas.

Ensuite vérification (à partir de l'exemple précédant), à reproduire en fonction de votre kernel:

xz -cd linux-$kversion.tar.xz | gpg --verify linux-$kversion.tar.sign -
gpg: Signature made mer. 03 mai 2017 17:38:11 CEST
gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Can't check signature: Pas de clef publique

on extrait la clé, signature inconnue, on va la chercher:

gpg --keyserver hkp://keys.gnupg.net --recv-keys 647F28654894E3BD457199BE38DBBDC86092693E
gpg: key 38DBBDC86092693E: public key "Greg Kroah-Hartman (Linux kernel stable release signing key) greg@kroah.com" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg: imported: 1

on recommence

xz -cd linux-$kversion.tar.xz | gpg --verify linux-$kversion.tar.sign -
gpg: Signature made mer. 03 mai 2017 17:38:11 CEST
gpg: using RSA key 647F28654894E3BD457199BE38DBBDC86092693E
gpg: Good signature from "Greg Kroah-Hartman (Linux kernel stable release signing key) greg@kroah.com" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 647F 2865 4894 E3BD 4571 99BE 38DB BDC8 6092 693E

Voilà, super la signature est ok :
Good signature from “Greg Kroah-Hartman…
Même si la clé n'est pas signée avec une signature de confiance.

En cas de “BAD signature”, vérifier: * la procédure * le chargement * contacter ftpadmin@kernel.org immédiatement pour investigation

WARNING: This key is not certified with a trusted signature
On va s'arrêter là dans la vérification, à moins de vouloir vérifier en contactant des signataires de cette clé.
Voir les signataires:

gpg --list-sigs ABAF11C65A2970B130ABE3C479BE3E4300411886

Étape 4 Décompression

On décompresse le kernel téléchargé avec cette commande :

tar -xaf linux-$kversion.tar.xz

On se déplace dans le nouveau dossier créé par la décompression

cd linux-$kversion

Étape 5 Configuration des options du noyau

Maintenant, dans cette étape, on va s'occuper de la configuration du kernel :

5.1 Options actuelles

Il est conseillé de restaurer la configuration actuelle, pour ce faire, on peut faire au choix les commandes de type make oldconfig suivantes :

  • Avec les kernel récents, sûrement au-dessus de la v4.x, il va chercher automatiquement le .config dans /boot/config-votreKernelActuellementActifOuPrecedant et crée le .config.
Pour les kernels plus anciens, il faudra peut-être copier la configuration de votre kernel actuel sous forme de .config
cp /boot/config-votreKernelActuellementActifOuPrecedant .config

Puis faire une des trois commandes suivantes au choix :

make olddefconfig
  • Cette commande s'exécutera en choisissant les valeurs par defaut en une fois
    (les lignes de validations par Y ou N seront cachées).

Ou :

make oldnoconfig
  • Cette comande répond N à tout les nouveaux arguments, c'est utile surtout si vous avez un serveur parfaitement stable et que vous voulez mettre un kernel LTS Long Term Support à la place d'un kernel en fin de support.

Ou encore :

make oldconfig
  • Cette commande vous demandera de valider les nouvelles options (ajoutées dans le nouveau kernel) par Y ou par N ou|et d'autres options encore.
Si vous avez un doute, appuyez sur la touche entrée.

Annexe optionnelle

Pour les plus avisés et/ou les bidouilleurs-fous, vous pouvez gratter à la main dans la configuration du kernel par cette interface semi-graphique de configuration :

  • make menuconfig en console ncurse

Vous pouvez aussi utilisez une interface graphique plus confortable pour naviguer dans toutes ces options, selon le DE :

  • make gconfig en graphique pour interfaces ou DE basés sur gtk.
  • make xconfig en graphique pour interfaces ou DE basés sur qt.

Vous passerez un agéable moment à parcourir la documentation des sources pour découvrir les options possibles ou les matériels qu'il est possible de prendre en compte en rajoutant des options.

  • consulter ~/kernel/linux-4.X.X/README
  • l'index de la documentation du kernel se trouve dans ~/kernel/linux-4.x/Documentation/00-INDEX, à lire pour aller plus loin

Remarque: à partir du noyau 4.10, la doc intéressante est déplacée, mais c'est indiqué dans le README

5.2 Désactiver les clés du kernel

Obligatoire pour éviter erreur de compilation et éventuellement utiliser ses clés propres En savoir plus: https://lists.debian.org/debian-kernel/2016/04/msg00579.html

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

5.3 Ne pas compiler de debug

Ne pas compiler le fichier de symboles dbg :

./scripts/config -d CONFIG_DEBUG_INFO

ce n'est pas obligatoire, mais permet un gain de 38%.

Étape 6 Compilation

Nous allons maintenant pouvoir nous mettre à compiler !
Selon la manière que je vais vous présenter :

  • il créera les packages
fakeroot make deb-pkg -j$(nproc) LOCALVERSION=-nomanecdotique KDEB_PKGVERSION=$(make kernelversion)-1
fakeroot make deb-pkg -j$(nproc) LOCALVERSION=-$(dpkg --print-architecture) KDEB_PKGVERSION=$(make kernelversion)-1

A cause de l'étape 5 2nde sous-partie il se pourrait que vous le terminal vous demande de valider ou d'écrire quelque chose, tapez entrée à chaque fois.

Explications

  • fakeroot va nous permettre de compiler sans être en root
  • make est l'outil qui va chercher les instructions dans le Makefile qui va donner les instructions au compilateur.
  • -j$(nproc) on attribue tous les threads possibles, on peut remplacer $(nproc) par le nombre de threads voulu en ne dépaçant pas le nombre maximum de threads maximum de votre processeur

ce n'est pas obligatoire, mais cela permet d'augmenter la vitesse de compilation, le processeur travaillant en entier sur tout ses cores avec tout ses threads avec cette option.

  • LOCALVERSION=-$(dpkg –print-architecture), optionnel, sert à nommer son kernel, au plus près du nommage Debian

vous pouvez aussi comme dans l'exemple avec nomanecdotique remplacernomanecdotique par un nom custom, mais sans lettre(s) majuscule(s) car sinon à la fin, lors de la construction du paquet, cela fera une belle erreur caractère non autorisé = la(les) lettre(s) en majuscule(s).

  • KDEB_PKGVERSION=$(make kernelversion)-1, optionnel, donne une version aux paquets construits à la fin.

Maintenant, suivant la puissance de votre processeur, cela va prendre un peu de temps (20 min si vous avez un processeur très puissant genre intel core i7 overclocké et une semaine pour un pIImmx, en tout cas dans la plupart des cas des machines actuelles, c'est environ entre 2 et 4h de compilation).
Vous avez donc le temps de boire un thé ou un café, manger des Chocos-DF et d'écouter du hard-rock :-O

Étape 7 Contemplation

Maintenant on remonte pour voir les fichier crées :

cd ..

Puis, passez en root et listez le contenu du répertoire :

ls

Vous devriez avoir obtenu les fichiers :

 linux-X.X-X-architecture_X.X-X-1_architecture.changes
 linux-X.X-X-architecture_X.X-X-1.debian.tar.gz
 linux-X.X-X-architecture_X.X-X-1.dsc
 linux-X.X-X-architecture_X.X-X-architecture.orig.tar.gz
 linux-firmware-image-X.X-X-architecture_X.X-X-1_architecture.deb
 linux-headers-X.X-X-architecture_X.X-X-1_architecture.deb
 linux-image-X.X-X-architecture_X.X-X-1_architecture.deb
 linux-libc-dev_X.X-X-1_architecture.deb

Si vous n'avez pas désactivé la compilation de de dbg : linux-image-X.X-X-architecture-dbg_X.X-X-1_architecture.deb

Tout ça sans compter les fichiers qui étaient présents avant.

Les fichiers se terminant par .deb sont les paquets installables directement, les autres sont les nouvelles sources, les modifications apportées enregistrées dans le .change et la signature des clefs.

Étape 8 Installation et/ou déinstallation du kernel

Pour installer le kernel, nous devons au minimum installer l'image et les headers mais je conseille d'installer tout les .deb si vous ne manquez pas d'espace de stockage.

dpkg -i linux-image-X.X-X-architecture_X.X-X-1_architecture.deb linux-headers-X.X-X-architecture_X.X-X-1_architecture.deb

(vous pouvez rajouter les autres paquets après ou directement *.deb si vous voulez tout installer)
Pour Déinstaller:

dpkg -P linux-image-X.X-X-architecture_X.X-X-1_architecture.deb linux-headers-X.X-X-architecture_X.X-X-1_architecture.deb

(vous pouvez rajouter les autres paquets après ou directement *.deb si vous voulez tout déinstaller en faisant attention à bien être dans le bon répertoire)

Vous pouver aussi déinstaller avec apt.

Moi sur la plupart des macines sur lesquelles j'ai appliqué le tutoriel j'avais ensuite un message au boot de pcspkr is already registered du coup j'ai dû le blacklister:
echo blacklist pcspkr > /etc/modprobe.d/blacklist-pcspkr.conf

Avertissement

Dans /etc/kernel/postinst.d/apt-auto-removal :
# Mark as not-for-autoremoval those kernel packages that are:
#
# - the currently booted version
# - the kernel version we've been called for
# - the latest kernel version (as determined by debian version number)
# - the second-latest kernel version
#
# In the common case this results in two kernels saved (booted into the
# second-latest kernel, we install the latest kernel in an upgrade), but
# can save up to four. Kernel refers here to a distinct release, which can
# potentially be installed in multiple flavours counting as one kernel.

Ce script n'est peut-être présent que sur Stretch, pas sur Jessie (à vérifier)

Il faut que je teste un peu plus, mais généralement, il ne reste que 2 noyaux installés.
N'installez jamais plusieurs version de noyaux sans vérifier que l'avant dernier fonctionne, sinon…

  • désinstallez un noyau qui ne convient pas auparavant
  • ou annulez ce script

Pas testé, mais logiquement ça pourrait ressembler à ça :

mv /etc/kernel/postinst.d/apt-auto-removal /etc/kernel/postinst.d/apt-auto-removal.bak
ln -s /dev/null /etc/kernel/postinst.d/apt-auto-removal

Conclusion et Sources

Bravo! vous avez une machine avec le kernel de votre choix!

A voir aussi ce lien en section 8.10.4, Toute la page est intéressante pour tous les Fous-faciles! :-)

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
doc/systeme/kernel/compiler.1494531072.txt.gz · Dernière modification: 11/05/2017 21:31 par naguam

Pied de page des forums

Propulsé par FluxBB