2.8 Compiler un noyau personnalisé avec cl-kernel

Introduction

Calculate Linux utilise le noyau Linux longterm (avec assistance à long terme). La plupart des pilotes sont compilés comme modules, ce qui permet de réduire la taille sans compromis sur les fonctionnalités. Les options et les patchs appliqués varient selon la version, serveur ou bureau. Contrairement aux équivalents fournis dans Portage, le paquet sys-kernel/calculate-sources, qui est le défaut sur Calculate Linux, s'installe comme tout autre paquet, le code source n'étant pas conservé une fois la compilation achevée.

La modification du noyau permet de l'optimiser, notamment de le rendre plus performant, d'ajouter le support d'un matériel spécifique, de réduire la consommation mémoire ou d'alimentation, mais aussi d'amorcer la machine plus rapidement. C'est par ailleurs une excellente occasion pour mieux comprendre le fonctionnement d'un système Linux.

cl-kernel

La compilation du noyau est assurée par le script cl-kernel qu'on trouve dans le paquet sys-apps/calculate-toolkit. Écrit en Bash, il s'intègre de manière transparente au système de modèles Calculate.

Fonctionnalités

  1. Supporte tous les noyaux, à savoir sys-kernel/calculate-sources, sys-kernel/gentoo-sources, sys-kernel/vanilla-sources, etc.
  2. Permet de créer un noyau avec ou sans initramfs.
  3. Prend en charge le noyau personnalisé pour générer un modèle de configuration utilisable ultérieurement.
  4. Importe les options préconfigurées.
  5. Permet de basculer librement entre les versions sans perdre la configuration existante.
  6. Est intégré aux Utilitaires Calculate, permettant ainsi d'utiliser les modèles que ceux-ci génèrent lors de l'installation de calculate-sources.
  7. Crée une copie de réserve.
  8. Est disponible en trois langues (anglais, français, russe).

Le code source sera décompressé dans le répertoire /usr/src. Avant de continuer, vérifiez s'il y a suffisamment d'espace disque, en tapant :

df -h

Pensez à toujours avoir une copie de secours en cas de défaillance. Afin de ne pas vous retrouver avec une Calculate qui ne démarre plus, n'expérimentez que sur des noyaux alternatifs ou sur calculate-sources d'une version non installée.

Compiler le noyau

Choisissez un noyau parmi ceux proposés dans l'arbre Portage. Pour en afficher la liste complète, tapez :

eix -c sys-kernel/*sources

Prenons l'exemple du noyau dit vanilla, supporté par Linus Torvalds lui-même.

Le paquet étant marqué comme masked dans l'arborescence, on commence par le démasquer :

echo sys-kernel/vanilla-sources ~amd64 ~x86 >> /etc/portage/package.keywords/custom
USE="symlink" emerge sys-kernel/vanilla-sources

Activez le paramètre USE "symlink" si vous comptez utiliser des pilotes propriétaires, tels que nvidia-drivers, ati-drivers, virtualbox-bin ou encore broadcom-sta. Une fois le noyau mis en place, vous recompilerez alors les modules correspondants, en exécutant :

emerge @module-rebuild

Maintenant vous pouvez vérifier la disponibilité de votre noyau :

cl-kernel --kver list
 * 3.19.0 *
 * 3.18.7-calculate

Le vanilla, contrairement à calculate-sources ainsi qu'aux équivalents, n'est pas désigné comme tel dans cette sortie. L'astérisque rouge à gauche de la version indique que le noyau installé a été réduit par rapport aux sources complètes ; l'astérisque à droite est réservé à la version par défaut, défini par le lien symbolique /usr/src/linux.

N'hésitez pas à convertir les paramètres de la version courante pour un premier lancement :

cl-kernel --kver 3.19.0 --convert

Il importe de bien se rendre compte du principe de ¢l-kernel, qui diffère considérablement de son ancienne réalisation.
  1. Le script prend le fichier de configuration du noyau qu'il récupère dans le modèle pertinent.
  2. Une fois le noyau compilé, il étudie les modifications faites par l'utilisateur pour créer un nouveau modèle personnalisé.
  3. Comme aucun modèle de configuration n'est fourni avec les noyaux qui ne sont pas de Calculate, le modèle final listera les différences par rapport à la configuration par défaut.
  4. Lancé avec l'option "--convert", il empruntera les paramètres du noyau courant (contenus dans /boot ou /proc), si le fichier ".config" est introuvable dans le répertoire des sources.

Le noyau sera donc configuré (avec make menuconfig), compilé et installé. Si vous n'avez pas désactivé l'option CONFIG_BLK_DEV_INITRD, le fichier initramfs sera créé en plus.

Mettez à jour les modules quand la compilation aura été terminée :

emerge @module-rebuild

Voilà qui est fait, n'attendez plus pour redémarrer l'ordinateur et tester le nouveau noyau. Si vous n'avez touché à rien en dehors des commandes expliquées, votre système doit être parfaitement opérationnel.

Mettre à jour

Voici la première ligne du modèle créé par cl-kernel à partir du fichier de configuration original :

head -n 1 /var/calculate/templates/kernel/10-vanilla-x86_64-3.19
# Calculate format=kernel name=.config os_install_arch_machine==x86_64&&merge(sys-kernel/vanilla-sources)>=3.19

C'est l'en-tête, qui contient le format du modèle et le nom du fichier édité ; elle stipule également la vérification de l'architecture, du nom et de la version du noyau. On voit que notre modèle sera effectif à partir de la version 3.19.

Pour installer la version 3.19.1, il suffit d'exécuter, après l'installation du paquet :

cl-kernel --kver=3.19.1

Vous pouvez omettre l'option '--kver' si le noyau est celui sélectionné par défaut, le lien /usr/src/linux y pointant. Pour assurer ce comportement, activez l'option USE "symlink" en installant le paquet, comme suit :

echo sys-kernel/vanilla-sources symlink >> /etc/portage/package.use/custom

En mettant à jour vers une version plus récente, par exemple 3.20 4.0.0, vous voudrez probablement visualiser les modifications proposées (avec make oldconfig). Pour ce faire, tapez :

cl-kernel --kver 4.0.0 --kver-old=3.19.1

Configurer calculate-sources

L'exemple de vanilla-sources nous a appris à installer et à compiler n'importe quel noyau. Mais si on cherchait à appliquer systématiquement une même configuration personnalisée et patchée, lors de chaque mise à jour ? Rien de plus facile.

1. Désactivez le paramètre USE "minimal" pour le noyau :

echo sys-kernel/calculate-sources -minimal >> /etc/portage/package.use/custom

2. Installez le code source sans compiler :

USE="-vmlinuz" emerge sys-kernel/calculate-sources

3. Adaptez le noyau :

cl-kernel

La dernière commande ne fait pas référence à une version, parce que le lien symbolique /usr/src/linux est réécrit à chaque fois que le paquet est (ré)installé. Pour visualiser, tapez :

cl-kernel --kver list
 * 3.19.0
 * 3.18.7-calculate *

Vous remarquerez que la version est maintenant marquée d'un astérisque vert.

En cas de doute, vous pouvez toujours indiquer la version expressément, comme ci-dessous :

cl-kernel --kver=3.18.7-calculate

Profitez du temps de la compilation pour consulter le modèle de configuration du noyau ainsi obtenu : vous verrez bien qu'il ne comporte que les modifications faites par rapport à celle initiale.

Ainsi pour désactiver le support de ReiserFS, cl-kernel mettrait dans le modèle :

cat /var/calculate/templates/kernel/10-calculate-x86_64-3.18 
# Calculate format=kernel name=.config os_install_arch_machine==x86_64&&merge(sys-kernel/calculate-sources)>=3.18
!CONFIG_REISERFS_FS=m

Attention : le lancement répété de cl-kernel validera vos modifications de tout à l'heure. Si vous préférez les annuler, supprimez simplement le modèle.

Optimiser

En chantier

Patcher

En chantier

Pour développeurs

En chantier

Thank you!