Une méthode simple pour compiler un noyau personnalisé sous Archlinux

Résumé

Je vais vous présenter ici une méthode pour créer un kernel personnalisé sous Archlinux.


 

 

Introduction

 

Archlinux est une distribution GNU/Linux utilisant le gestionnaire de paquets pacman, qui permet comme tout ses homologues ou presque d'installer des paquets binaires prés-compilés et de gérer les dépendances entre eux.

Fort de la philosophie BSD à laquelle elle est attachée, tout les paquets binaires d'Arch sont générés à l'aide d'un outil de compilation et d'empaquetage similaire aux ports de BSD. Il est de ce fait simple de compiler ses propres paquets à partir des sources officielles, cependant, la configuration du kernel nécessite quelques petits aménagements, d'où le but de cet article.

Conventions de notation :

- # précède les commandes à lancer en root

- $ précède les commandes à lancer en utilisateur normal

 

Préparer ABS

 

ABS est l'outil permettant de récupérer les sources officiels d'Arch, nous allons l'installer :

# pacman -S abs 

Puis nous récupérons l'arborescence des sources :

# abs 

Pour faire un travail propre, nous allons régler les droits sur cette arborescence ; tout d'abord, nous créons un groupe abs :

# groupadd abs 

Nous ajoutons ensuite notre utilisateur (ici CATS) dans ce groupe :

# gpasswd -a CATS abs 

Pour finir, nous réglons les permissions sur l'arborescence d'abs :

# chgrp -R abs /var/abs && chmod -R 775 /var/abs 

Afin de peaufiner nos futures compilations, nous allons modifier le fichier makepkg.conf

# vi /etc/makepkg.conf 

La ligne CFLAGS correspond aux options passées à GCC, vous pouvez par exemple mettre :

CFLAGS="-march=native -mtune=native -O2 -pipe -fomit-frame-pointer" 

La ligne CXXFLAGS correspond aux options passées à G++, vous pouvez par exemple mettre :

CXXFLAGS="${CFLAGS}" 

MAKEFLAGS correspond au nombre de compilation à lancer en même temps lors de l'appel à la commande make, une solution assez optimale est de mettre le nombre de cpu + 1, par exemple pour un bi opteron 246 :

MAKEFLAGS="-j3" 

Une fois ces formalités remplies, nous allons pouvoir copier les sources du kernel dans notre répertoire de travail :

$ mkdir /var/abs/core
$ cp -R /var/abs/core/kernel26 /var/abs/local/core/

 

Compilation du kernel

 

Pour commencer, nous allons nous placer dans notre répertoire de travail et regarder un peu ce qu'il contient :

$ cd /var/abs/local/core/kernel26
$ ls 
PKGBUILD  config  config.x86_64  kernel26.install  kernel26.preset

Le PKGBUILD est le script de compilation et d'empaquetage, par défaut, il est prévu pour fonctionner avec des fichiers de configuration du kernel fournis par Arch, nous allons le modifier pour pouvoir le personnaliser :

$ vi PKGBUILD

Remplacez les lignes :

if [ "$CARCH" = "x86_64" ]; then
    cat ../config.x86_64 >./.config
else
    cat ../config >./.config 
fi

Par :

if [ "$CARCH" = "x86_64" ]; then
    cat ~/.config/kernel/config.x86_64 >./.config
else  
    cat ~/.config/kernel/config >./.config 
fi

De cette façon nous allons pouvoir réutiliser nos fichiers de configuration et les sauver dans /home/CATS/.config/kernel, nous allons d'ailleurs créer ces répertoires :

$ mkdir ~/.config/kernel 

Ensuite toujours dans le PKGBUILD, nous allons remplacer la ligne :

yes "" | make config 

Par les lignes :

make oldconfig
make menuconfig 

Cette dernière ligne permet de lancer un outil de configuration basé sur ncurses, il faut donc l'installer :

# pacman -S ncurses 

Ensuite il nous faut récupérer le fichier de configuration du noyau d'Arch :

$ cp config ~/.config/kernel

Ou

$ zcat /proc/config.gz ~/.config/kernel

Ceci fait, nous pouvons lancer la compilation :

$ makepkg 

Après une séries de petites questions posée par le make oldconfig (surtout si vous utilisez un fichier de configuration issu d'une version plus ancienne du kernel), le make menuconfig vous permettra de tout configurer. Une fois la compilation finie, il ne reste plus qu'à installer le paquet fraichement généré :

# pacman -U kernel26-2.6.*.pkg.tar.gz

Et de rebooter :

# reboot

Si la nouvelle configuration vous convient, remplacez celle fournie par Arch par la votre :

$ cp /var/abs/local/core/kernel26/src/linux-*/.config ~/.config/kernel/config

Et si vous souhaitez gérer vos kernels à la main, modifier la ligne "IngorePkg" dans /etc/pacman.conf :

IgnorePkg = kernel26

De cette façon, pacman n'écrasera pas vos kernels par ceux d'Arch lors de la mise à jour.

Si votre Arch ne démarre plus, à l'aide d'un OS de secoure, montez vos partitions dans un chroot et réinstallez le kernel officiel.

 

Conclusion

 

Il est parfaitement possible de gérer son propre kernel sous Arch, il existe différentes méthodes et celle que je viens de vous citer est celle que j'utilise.

Elle n'est cependant pas parfaites sur plusieurs points : elle ne permet pas de gérer automatiquement de multiples versions du fichier de configuration, de plus, à chaque nouvelle compilation, vous êtes obligé d'effacer le répertoire src et donc vos fichiers objets par la même occasion, ce qui pour juste une simple modification de configuration, vous obliges à tout recompiler. Mais si vous pouvez vous accommoder de ces détails, cette méthode a l'avantage d'être simple et efficace, tout comme la philosophie Arch : KISS.

Nouveaux membres

  • nachiyassine
  • narrotto
  • drigos1er
  • salim
  • masdazil

Utilisateurs en ligne

Il y a actuellement 1 utilisateur et 6 invités en ligne.

Commentaires récents