Google PlusFacebookTwitter

Kpatch, une alternative libre pour patcher son noyau à chaud !

By on Juil 2, 2014 in Devel, Linux | 3 comments

Share On GoogleShare On FacebookShare On Twitter

I had a dream… Kpatch !

Bon, c’est vrai, je le reconnais, je m’emballe légèrement.  🙄

Enfin une solution prometteuse permettant d’appliquer les mises à jour de sécurité (et autres) du noyau à chaud, ce qui veut dire sans redémarrage du serveur.

Avant, il existait Ksplice, une solution propriètaire détenue par la société Oracle mais ça c’était avant !

Depuis quelques mois, RedHat et Suse se sont lancés dans la bataille pour chacun fournir leur solution alternative.

Pour ma part, je n’ai pas eu l’occasion de « jouer » avec kgraft, si vous avez déjà côtoyé la bête, n’hésitez pas à partager votre retour d’expérience.

Comment ça fonctionne ?

Je vais faire très simple et très rapide :

kpatch permet de remplacer une fonction par une autre à l’aide d’un module noyau.

Pour la version longue et complexe, je vous invite à parcourir le GitHub de kpatch. Tout y est très bien expliqué ; les étapes, ce que kpatch peut et ne peut pas faire, etc… Il existe un schéma qui résume assez bien le fonctionnement de kpatch :

Fonctionnement de kpatch

Kpatch et Debian, pas si simple…

Sur le site de kpatch, il y a une procédure d’installation pour Fedora 20 et Ubuntu 14.04 mais hélas, rien pour Debian 7.5.

En voyant de la documentation pour Ubuntu je me suis dit :

Si ça fonctionne sur une Ubuntu, ça fonctionnera forcément sur une Debian !
Ben oui voyons, Ubuntu n’est « que » basée sur la version unstable de Debian.
Pardi, c’est parti !

Diantre, mais parfois qu’est-ce que je peux être naïf (pour rester poli) !

Debian et kpatch, un petit résumé

Dans un premier temps, j’ai essayé de faire fonctionner kpatch sur une Debian 7.5 (alias Wheezy) mais ce fut laborieux. Par laborieux je veux dire que Wheezy est trop ancienne pour que kpatch puisse fonctionner « out of the box ».

kpatch a des pré-requis que Wheezy n’est pas apte à fournir par défaut :

En plus de ces versions à respecter, kpatch nécessite que certaines options du noyau soient compilées.

C’est pour les raisons sus-citées, que j’ai décidé de continuer avec une Debian 8.0 (alias Jessie).
En faisant ce choix, je suis passé outre les questions de pinning et de backports. Reste à compiler un noyau avec les bonnes options mais ceci est un moindre mal !

Un noyau « Made in Debian »

Dans la procédure ci-dessous, j’ai essayé de rester le plus cohérent possible avec la méthodologie Debian.

Récupération des sources du noyau actuel depuis les dépôts Debian.

Copie du fichier de configuration actuel dans les sources fraîchement téléchargées.

Activation des options nécessaires pour le noyau.

Modification du SUBLEVEL, compilation du noyau et création des paquets Debian.

Installation des nouveaux paquets et redémarrage du serveur.

Le noyau actuel de Jessie est en version 3.14, sans la modification du SUBLEVEL, la version passera en 3.14.7 (une histoire de SUBLEVEL dans le Makefile).

Kpatch, l’installation

Le plus dur a été fait, kpatch n’a pas encore de paquet mais son installation s’effectue très facilement avec l’aide de git. Certains des paquets ci-dessous sont certainement déjà présents si vous venez de compiler votre noyau.

Afin de gagner du temps dans les futures compilations « kpatchienne », il est nécessaire d’augmenter la taille du cache de ccache.

Récupération des sources et installation de kpatch.

Depuis aujourd’hui, il n’est plus nécessaire de modifier le fichier kpatch-build pour que ce dernier soit fonctionnel avec Debian (cf. PR #285) 😎 

À vos marques, patchez !!

Dans la documentation officielle, le patch consiste à modifier l’affichage de /proc/meminfo. Et bien nous, nous allons modifier l’affichage de /proc/version, on est des foufous !! Voici le patch en question :

Un petit avertissement avant d’aller plus loin :

L’étape suivante sera consommatrice en espace disque. kpatch-build créé un répertoire de travail dans $HOME/.kpatch, il est donc nécessaire d’avoir au moins 20Go d’espace disque disponible sur cette partition. Si vous êtes dans le même cas que moi et que votre partition ne contient pas assez d’espace, alors vous pouvez créer un lien symbolique de .kpatch vers le répertoire de votre choix.

Le patch est prêt, il ne reste plus qu’à créer un module noyau avec kpatch-build (soyez patient, cette étape nécessite plusieurs minutes).

Une fois la compilation terminée, un fichier kpatch-version-katy-perry.ko doit apparaître à l’endroit ou la commande kpatch-build a été lancée. Quelques informations sur le module :

Résultat :

Le moment que vous attendez depuis que cet inter »minable » billet a débuté, le chargement du module !

Résultat :

Et dans le fichier /var/log/kern.log, que se passe t’il ?

On peut vérifier que le module soit bien chargé.

Résultat :

Ça se présente bien pour le moment.

Verdict, houlala, j’ai peur !

Résultat :

Alors oui, c’est très très moche, c’est à ne surtout pas faire mais c’était pour l’exemple. Il suffit de désactiver le module pour que tout redevienne comme avant.

Résultat :

Vérification que le retour arrière a bien été effectif.

Résultat :

L’exemple était très simple, mais libre à vous de patcher des fonctions bien plus complexes !

Conclusion

Ce fut un long billet, avec tout plein d’informations et pas des plus simples, j’espère que tout a fonctionné sans trop de soucis sur votre serveur. Le projet n’est pas encore complétement stable, libre à vous de l’utiliser en production.

Il va de soit que tous les outils de compilation installés ne doivent pas se trouver sur un serveur de production, compilez vos modules sur un serveur dédié à cet effet  et déployez-les sur vos serveurs de production !

Le prochain billet lié à kpatch sera certainement sur l’installation de ce dernier sur une Debian Wheezy, ça risque d’être drôle ! 😈

Liens

The following two tabs change content below.

Gaëtan Trellu (goldyfruit)

OpenStack Technical Cloud Consultat chez Red Hat
Autodidacte en informatique, depuis 2005 je parcours l’écosystème Unix à la recherche de nouvelles connaissances et de nouvelles rencontres.

CC BY 4.0 Kpatch, une alternative libre pour patcher son noyau à chaud ! par Gaëtan Trellu (goldyfruit) est sous Licence Creative Commons Internationale Attribution 4.0.

  • Buzut

    Ça doit bien s’installer maintenant ! J’ai pas eu le temps (courage) d’aller à la pêche aux infos. Ça en est où ce projet ? Tu l’as déjà utilisé en prod ? Pck si on pouvait se passer des reboot après updates, ce serait vraiment génial !

    • Le projet est toujours actif, le dernier commit date d’il y a 8 jours.
      Je ne l’ai jamais utilisé en production mais j’ai déjà fait plusieurs tests concluants !

      • Buzut

        Merci pour ce feedback. J’essayerai de l’utiliser à l’occasion alors !