[Debian 9] Compiler et installer le kernel 4.14.5

Les « Kernel » sont les fondements même d’un Linux – Ils sont maintenus par une équipe de développeur et par Linus Torvalds lui-même. Dernier en date au 11/12/2017, la version 4.14.5 est en version finale ! Tous les kernels peuvent être installés sur votre distribution, à condition d’effectuer une sauvegarde complète de votre machine et de compiler les sources !

Les kernel pour Linux peuvent se trouver à l’adresse suivante : https://www.kernel.org/

Connue de tous, Debian n’est pas très friande des tous derniers kernel. Avec cet article, vous serez en mesure de pouvoir compiler le tout dernier kernel en date pour votre Debian !

La procédure ci-dessous est tirée du site « cyberciti.biz », site sur lequel je me suis aidé pour compiler mon kernel. La source est en fin d’article. De plus, je ne me suis pas attardé sur la personnalisation du kernel – le but ici est de pouvoir compiler un kernel « from scratch » à partir de ses sources.

I. Pré-requis

Sauvegarde !

Avant toute chose, sauvegardez impérativement vos documents ou créez une image / snapshot de votre système ! Un kernel défectueux peut casser votre système et le rendre totalement inopérant. Les réparations peuvent être très lourdes et extrêmement compliquées… Donc sauvegardez vos données !

Espace de stockage

Compiler un kernel demande BEAUCOUP de place – assurez-vous d’avoir au strict minimum 10 Go d’espace disque de libre ! Privilégiez plutôt 15 Go de libre pour avoir un peu de débattement si vous ajoutez de nombreux patchs à votre kernel.

Installation des outils nécessaires

La compilation d’un kernel se fait sur une machine disposant de certains outils de compilation, d’interpréteurs et autres. Attention, il vous faut au moins 500 Mo d’espace libre sur votre système pour contenir tous ces outils et les dépendances.

L’installation des paquets peut prendre un certain temps, puisqu’il y a de nombreux paquets à télécharger (des outils et utilitaires de compilation, des librairies…) – tout dépend de la puissance de votre machine et de vos disques durs.
Lorsque tout est installé, il faut préparer « l’emplacement » où va être travaillé le kernel : tous les fichiers seront stockés dans un dossier, y compris le kernel compilé.

Attention, certains paquets inutiles peuvent être téléchargés et installés, notamment les documentations « texlive » – elles prennent une place assez impressionnante (plus de 600mo !!), vous pouvez donc vous en séparer via cette commande :

Préparation du dossier de travail

Je ne me suis pas embêté pour cette partie, je me suis connecté en tant que root et j’ai utilisé mon dossier de sauvegarde dans lequel j’ai créé un sous-dossier spécifique. Libre à vous de placer où vous le souhaitez ce fameux dossier de travail.

A l’intérieur, j’ai téléchargé les sources publiques du kernel 4.14.5 directement depuis le site officiel :

Et lorsque l’archive est téléchargée, il faut la décompresser :

Un dossier va être créé, au nom du kernel – dans ce cas présent (en version 4.14.5), le dossier s’intitulera « linux-4.14.5 »

Préparation de la compilation

Puisque les sources sont extraites et prêtes à être compilées, une étape préliminaire est nécessaire – il faut copier l’actuel fichier de configuration du kernel pour bénéficier d’une base « saine ».

Et ainsi, le (futur) kernel de votre système est prêt à recevoir ses tweaks / patchs et autres routines !
Pour ce faire, vous devez lancer la commande :

1_menu-makeconfig

Je ne détaillerai pas cette partie – je ne la connais pas du tout, je n’ai pas eu le temps de la travailler. J’ai donc laisser tous les paramètres par défaut de mon ancien « .config » du kernel Debian de base.
Faites très attention lors de l’utilisation de ce menu ! Un faux-pas et vous pouvez rendre votre kernel totalement inutilisable et donc votre machine aussi !

Même si vous n’avez aucune option à modifier, vous devez quand même utiliser le « make menuconfig » pour créer le fichier « .config ». Sélectionnez donc « < Save >« , validez les modifications et enfin sélectionnez « < Exit >« .

Lancement de la compilation

Le moment est arrivé ! La compilation va bientôt pouvoir se lancer ! Une dernière commande est à effectuer pour remettre de l’ordre dans les fichiers et retrouver une arborescence « propre ».
Cette opération peut durer quelques minutes.

2_make-kpkgclean

Enfin, la compilation est maintenant possible :

  • – –initrd : essentiel pour avoir un pseudo-OS au démarrage de votre machine – c’est grâce au initrd que vous voyez apparaître toutes les inscriptions au démarrage de votre machine Linux et par la suite (indirectement) faire booter votre système.
  • – –revision=1.CZS : Numéro de la révision du kernel – à changer selon vos besoins et vos envies
  • kernel_image kernel_headers : la compilation produira les fichiers  « kernel_image » et « kernel_headers », nécessaire pour créer votre kernel « bootable » pour le système.
  • – -jobs x : cette variable permet d’optimiser l’utilisation des ressources de votre machine pour la compilation. « x » correspond au nombre suivant : il s’agit du nombre de CPU de votre machine +1.
    Exemple : Si votre VM a deux CPU virtuels, « – -jobs x » devra donc être « – -jobs 3 ».
    Merci à Geoffrey pour son commentaire et cette information !

3_fakeroot-kernel

Attention ! La compilation d’un kernel prend un vrai temps !! Vous pouvez facilement passer plusieurs heures à compiler votre noyau ! Pour ma part, j’ai mis plus de 19 minutes (machine virtuelle sous VMware Workstation, 4vCPU (base CPU = i7 6700k OC à 4,4 Ghz), 8Go de RAM, disque au format RAW sur une grappe RAID-0 de disques SSD Samsung 850 Pro) – encore une fois, tout dépend de la puissance de votre machine.

II. Installation du kernel

Après la compilation, votre nouveau noyau est prêt à l’emploi !! Vous pouvez dès à présent l’installer sur votre machine pour pouvoir l’exploiter.
Il faut installer les deux paquets « .deb » que vous venez de compiler :

Attention, le nom des fichiers peut changer en fonction de ce que vous avez entrer dans la commande de compilation, notamment quant à l’attribut « – -revision ».
L’installation se fait rapidement pour les deux paquets – peu après l’installation, vous n’êtes pas obligé de redémarrer votre machine ! En effet, depuis les kernel 4.x, vous pouvez « redémarrer à chaud » votre machine et donc prendre en compte les modifications sans devoir redémarrer le serveur.

Pour se faire, il faut utiliser le paquet « kexec-utils« .

Vos sessions SSH vont alors se couper, puisque le serveur va redémarrer les services sans redémarrer physiquement.
Source

Toutefois, vous n’êtes pas obligé d’utiliser ce paquet si vous préférez l’ancienne méthode, à savoir le redémarrage « normal » via un « reboot ».

Au démarrage du serveur, lorsque vous arriverez sur le grub, dirigez-vous dans « Options avancées » (Advanced settings), vous devriez avoir une liste avec 4 options : deux lignes pour le kernel 4.14.5 et les deux autres lignes sont pour votre autre kernel.

J’ai sélectionné le kernel 4.14.5 – la machine a booté puis immédiatement, j’ai effectué la commande ci-dessous :

L’image correspond à un kernel compilé en 4.14.5 – vous verrez de vôtre côté le bon numéro de kernel. Comme le dirait Apache, « It Works ! » 🙂

Source

Julien HOMMET

Passionné depuis toujours par l’informatique, je transforme ma passion en expertise. J’utilise quotidiennement les outils et systèmes Microsoft. Je ne délaisse pas mon côté ouvert, notamment via l’utilisation des OS Debian et Archlinux.
L’infosec m’ouvre les yeux sur les enjeux actuels et futurs de l’IT.

24 thoughts on “[Debian 9] Compiler et installer le kernel 4.14.5”

  1. Merci; pourriez-vous en dire un peu plus sur les bonnes raisons d’upgrader le kernel natif de la Debian Jessie ? Ca inclus le patch pour Grub par exemple ? Je suis sur Linux Debian depuis peu et j’ai toujours entendu dire que la mise à jour du noyau était une opération extrêmement risquée d’où mes questions 😉

    1. L’intérêt, c’est d’avoir un kernel disposant des derniers « drivers » et d’une meilleure intégration des composants matériel dans la distribution Linux – Bien entendu, c’est facultatif, notamment sous Debian, puisque le kernel proposé dans les dépôts officiels est conçu et « fait » pour Debian ! Après, il y a aussi le côté « Hype », c’est vrai… !

      Le gros risque justement, c’est de bloquer intégralement son système à cause d’un kernel mal compilé ou compilé avec des patchs incompatible avec le système (matériel et logiciel) – Le kernel que je propose est vierge de tout patch, tout hooks et autres joyeusetés 🙂
      Le « grub » est une partie indépendante du kernel – la mise en place d’un nouveau kernel n’est donc que très peu (voire même pas) sensible pour le grub.
      Si tu n’es pas sûr de toi, n’effectue pas la procédure sur une machine « critique » ! Teste plutôt sur une VM 😉

      1. Bonjour
        Félicitations pour votre post.
        Savez vous si la procédure pour mettre à jour même réinstaller le kernel 4.13 c’est la même ? Après petite boulette d’avoir installé le 4.14 via synaptic a briqué mon debian parrot je cherche une solution afin d’éviter un formatage de la partition (dual boot avec grub2)
        Merci et joyeux Noël 😀

        1. Bonjour,
          Merci pour le compliment 🙂 La procédure est toujours la même qu’importe la version de kernel – je viens de tester sur un Debian 8 et un Debian 9 avec succès !
          Concernant votre Debian Parrot bloquée, au démarrage de la machine, lorsque le GRUB s’initialise, vous devriez avoir une option « safe mode », permettant de démarrer en cli sans être bloqué. Une fois cette ligne de commande acquise, le plus « simple » est de désinstaller le kernel qui pose problème 😉
          Joyeuses fêtes de fin d’année !!

  2. Salut ! J’ai essayé de suivre la procédure mais, il y a toujours un mais n’est-ce pas ? 😉
    Etant rendu à fakeroot make-kpkg –initrd –revision=1.CZS kernel_image kernel_headers
    j’ai obtenu quelques messages d’erreurs :

    scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h: Aucun fichier ou dossier de ce type
    #include
    ^
    compilation terminated.
    make[2]: *** [scripts/sign-file] Erreur 1
    make[1]: *** [scripts] Erreur 2
    make[1]: quittant le répertoire « /home/gwen/linux-4.4 »
    make: *** [debian/stamp/build/kernel] Erreur 2

    et l’opération, qui pouvait selon prendre plusieurs dizaines de minutes, a été achevée en moins d’une. J’imagine que ce n’est pas bon signe 🙂
    Comment faire ?

    1. Hello ! 🙂
      Il y a toujours un « mais », ce n’est pas tout à fait normal sinon, on est d’accord !
      Vu l’erreur, je dirai qu’un paquet semble défectueux sur la machine/VM concernée > openssl. Il faudrait supprimer et réinstaller le paquet, en faisant un sudo apt-get remove –purge openssl (il y a bien deux traits d’unions avant purge), suivi d’un sudo apt install openssl et enfin relancer la compilation ; ça devrait être mieux ! 🙂

  3. Si on veut gagner un peu de temps on peu ajouter l’option jobs.
    fakeroot make-kpkg –initrd –revision=1.CZS kernel_image kernel_headers –jobs 3

    Remplacer 3 par « nombre de coeurs de votre CPU » + 1

  4. merci pour l’article, par contre sauf erreur de ma part il y a une erreur dans l’orthographe de l’un des paquets ; libncurses5-dev au lieu de libncurses5dev

  5. #!/bin/bash
    # Installation automatisée
    echo « Quel est le numero du kernel ? »
    read nb
    apt -y install git build-essential libncurses5-dev xz-utils kernel-package
    apt -y remove texlive-latex-base-doc texlive-latex-recommended-doc texlive-latex-extra-doc texlive-pictures-doc texlive-pstricks-doc
    mkdir /kernel && cd /kernel
    wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-« $nb ».tar.xz
    tar xf linux-« $nb ».tar.xz
    cd linux-« $nb »
    cp /boot/config-$(uname -r) .config
    cd /kernel/linux-« $nb »

    1. Bonjour, une petite amélioration de ma contribution :

      #!/bin/bash
      echo « Quel est la version du kernel ? »
      read nb
      v= »$nb »
      v=${nb:0:1}
      apt -y install git build-essential libncurses5-dev xz-utils kernel-package
      apt -y remove texlive-latex-base-doc texlive-latex-recommended-doc texlive-latex-extra-doc texlive-pictures-doc texlive-pstricks-doc
      mkdir /kernel && cd /kernel
      wget https://cdn.kernel.org/pub/linux/kernel/v« $v ».x/linux-« $nb ».tar.xz
      tar xf linux-« $nb ».tar.xz
      cd linux-« $nb »
      cp /boot/config-$(uname -r) .config
      cd /kernel/linux-« $nb »
      ls -la

      1. Hello « hackensolo » !
        Merci beaucoup pour ta contribution !!! Je la teste dès demain – si c’est validé, je te contacterai par e-mail pour que l’on puisse en faire bon usage ensemble… 😉

  6. Bonjour,

    J’ai testé le début du script de « hackensolo » jusqu’à wget https://cdn.kernel.org/pub/linux/kernel/v« $v ».x/linux-« $nb ».tar.xz et celui-ci fonctionne jusque là. Je ne suis pas allé plus loin préférant le décomposer en parties fonctionnellement vérifiables.

    #!/bin/bash
    echo « Quelle est la version du kernel ? »
    read nb
    v= »$nb »
    v=${nb:0:1}
    apt -y install git build-essential libncurses5-dev xz-utils kernel-package
    apt -y remove texlive-latex-base-doc texlive-latex-recommended-doc texlive-latex-extra-doc texlive-pictures-doc texlive-pstricks-doc
    mkdir /kernel && cd /kernel
    wget https://cdn.kernel.org/pub/linux/kernel/v« $v ».x/linux-« $nb ».tar.xz
    tar xf linux-« $nb ».tar.xz
    cd linux-« $nb »
    cp /boot/config-$(uname -r) .config
    cd /kernel/linux-« $nb »
    ls -la

    1. Le script fonctionne correctement en effet – je remarque juste que WordPress formate les quotes (« ) en chevrons… Et ça pose pb dans le script.
      Il y a aussi quelques coquilles, je modifierai le script et je le mettrai à disposition sur GitHub 🙂

  7. Hello! Merci pour la marche à suivre plus simple et claire que ce qu’on trouve chez Debian!
    Ca a marché parfaitement pour une SolydXK, maintenant je vais tenter sur Devuan…

    1. Bonjour Thierry, merci pour ton retour !! 🙂
      Je vais bientôt le mettre à jour vis-à-vis des nouveaux kernels… 😉 Content que tout s’est bien passé sur les machines !

  8. Bonjour et merci pour le tuto: j’ai l’intention d’installer le noyau 4.14 qui gère mieux les Radéons.
    Je suis également tenté d’installer le patch-4.14.gz mais je ne sais pas quoi en faire, pourriez-vous m’indiquer comment faire ?

    Je vous remercie !

    Skwal

    1. Hello Skwal !
      En effet, le 4.14 joue beaucoup sur les évolutions vis-à-vis des cartes graphiques Radeon et les CPU AMD. Quand tu patch… du quel parlez-vous ? Je n’ai pas encore pris le temps de tester de patcher un kernel – il faut d’ailleurs je ne mette à jour cet article pour le 4.14 !

  9. J’ai tenté de compiler le 4.14 mais sans succès. J’ai tenté de lancé une discution sur debian-fr.org mais sans succès. Du coup je me suis lancé sur une installation de stretch autour du noyau 4.14 d’experimental, faut dire que je suis pas trop doué… Je comprend pas trop le résultat de tout ça mais dans un « lspci » je trouve:

    01:00.0 Display controller: Advanced Micro Devices, Inc. [AMD/ATI] Jet PRO [Radeon R5 M230] (rev c3)
    C’est que ça doit fonctionner, par contre pour l’exploiter…
    C’est un vaste sujet mais c’est une bonne base pour les futures technologies à venir !

    1. Je vais effectuer la compilation du kernel sous peu, uniquement en VM toutefois, n’ayant aucun matériel en AMD/ATI je ne pourrai pas faire certains tests. Merci pour le lien sur debian-fr.org ! Il faut espérer que la communauté puisse t’aider rapidement !
      La commande « lspci » permet de récupérer les infos matérielles connectées – mais ça ne veut pas dire que les modules sont activés pour être exploitables 😉

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Close