12 février 2014

Compiler et installer un noyau Version 2

Nous disposons de deux méthodes :
  • la compilation classique ;
  • la compilation façon Debian.

1. Effectuer une compilation classique

Cette méthode est utilisable sur toutes les distributions GNU/Linux, y compris Debian.

a. Pré-requis

Concernant Debian 7 et Ubuntu 12.04 LTS, il faut installer les paquets nécessaires à la compilation :
  • build-essential
  • module-init-tools
  • fakeroot
Quant à CentOS 6, les paquets à ajouter sont :
  • Les outils de développement (Development Tools), et les bibliothèques de développement (Development Libraries).
  • La bibliothèque ncurses (ncurses-devel) pour menuconfig ou nconfig.
  • La bibliothèque qt-devel pour xconfig.
  • Les bibliothèques gtk2-devel, libglade2 pour gconfig.
D’autres paquets peuvent s’ajouter à la liste ci-dessus en fonction des besoins ou des dépendances.
Au sein du système, l’emplacement pour construire le noyau doit disposer d’un espace disque suffisant. Prévoyez au minimum 10 Gio.

b. Télécharger le code source du noyau

Le téléchargement du code source du noyau Linux s’effectue depuis le site web http://www.kernel.org. La commande wget permet d’effectuer cette opération en ligne de commandes. Vous pouvez aussi utiliser un navigateur web pour effectuer cette opération.
La version du noyau stable au moment de l’écriture de cet ouvrage est 3.10.2. Le nom du fichier est linux-3.10.2.tar.xz.
Syntaxe
wget <URL>
Tapez dans un terminal :
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.2.tar.xz 
--2013-07-16 11:13:33--  
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.2.tar.xz  
Résolution de www.kernel.org (www.kernel.org)... 149.20.4.69,  
198.145.20.140  
Connexion vers www.kernel.org 
 (www.kernel.org)|149.20.4.69|:443...connecté.  
requête HTTP transmise, en attente de la réponse...200 OK  
Longueur: 73192648 (70M) [application/x-xz]  
Sauvegarde en : «linux-3.10.2.tar.xz»  
 
100%[==  ========================>] 73 192 648   353K/s   ds 4m 0s    
2013-07-16 11:17:35 (298 KB/s) - «linux-3.10.2.tar.xz» sauvegardé  
[73192648/73192648]
Pour décompresser l’archive linux-3.10.2.tar.xz, il faut utiliser l’outil tar.
Syntaxe
tar <options> <fichier_à_décompresser>
Options nécessaires :
Option
Description
courte
longue
-x
--extract
Extrait les fichiers contenus dans l’archive.
-J
--xz
Décompression au format Lzma.
-v
--verbose
Affiche la liste détaillée des fichiers qui sont traités.
-f
--file
Utilise le fichier archive mentionné.








Tapez dans un terminal :
# tar xJvf linux-3.10.2.tar.xz 
linux-3.10.2/  
linux-3.10.2/.gitignore  
linux-3.10.2/.mailmap  
linux-3.10.2/COPYING 
... 
linux-3.10.2/virt/kvm/iommu.c  
linux-3.10.2/virt/kvm/irq_comm.c  
linux-3.10.2/virt/kvm/irqchip.c  
linux-3.10.2/virt/kvm/kvm_main.c 
L’extraction est réalisée dans le dossier linux-3.10.2. Avec la commande du, nous pouvons connaître sa taille.
Syntaxe
du <options> <dossier>
Options nécessaires :
Option
Description
courte
longue
-h
--human-readable
Affiche les tailles dans un format lisible par un humain.
-d
--max-depth
Affiche l’espace total occupé par un dossier seulement s’il est situé à une profondeur inférieure ou égale au niveau mentionné.
--max-depth=0 est identique à --summarize.
-s
--summarize
Affiche seulement un total pour chaque paramètre.










Tapez dans un terminal :
# du -h --max-depth=0 ./linux-3.10.2 
573M   ./linux-3.10.2
ou bien :
# du -hs ./linux-3.10.2 
573M   ./linux-3.10.2
L’occupation disque du code source du noyau Linux version 3.10.1 est de 573 Mio.

c. Outils pour configurer le noyau

Configurer convenablement toutes les options du Noyau Linux implique d’une part une bonne connaissance sur le fonctionnement de celui-ci et du matériel utilisé (périphériques, processeur(s), mémoire, disques physiques et logiques...) sur lequel vous allez installer le nouveau noyau Linux. Mais aussi d’autre part, il faut bien identifier l’objectif de la conception de ce dernier.
Pour effectuer la configuration du noyau, nous disposons de cinq outils CLI ou GUI :
make config
Cet outil a une ergonomie simple. Les choix s’effectuent les uns après les autres :
#make configuration 
  HOSTCC  scripts/basic/fixdep 
  HOSTCC  scripts/kconfig/conf.o 
  SHIPPED scripts/kconfig/zconf.tab.c 
  SHIPPED scripts/kconfig/zconf.lex.c 
  SHIPPED scripts/kconfig/zconf.hash.c 
  HOSTCC  scripts/kconfig/zconf.tab.o 
  HOSTLD  scripts/kconfig/conf 
scripts/kconfig/conf --oldaskconfig Kconfig 
# 
# using defaults found in /boot/config-3.2.0-4-amd64 
# 
/boot/config-3.2.0-4-amd64:488:warning: symbol value ’m’ invalid  
for ACPI_PCI_SLOT 
/boot/config-3.2.0-4-amd64:490:warning: symbol value ’m’ invalid  
for ACPI_CONTAINER 
/boot/config-3.2.0-4-amd64:491:warning: symbol value ’m’ invalid  
for ACPI_HOTPLUG_MEMORY 
/boot/config-3.2.0-4-amd64:1565:warning: symbol value ’m’ invalid 
for BMP085 
/boot/config-3.2.0-4-amd64:2975:warning: symbol value ’m’ invalid 
for POWER_SUPPLY 
/boot/config-3.2.0-4-amd64:3210:warning: symbol value ’m’ invalid 
for MFD_WM8400 
/boot/config-3.2.0-4-amd64:4699:warning: symbol value ’m’ invalid 
for COMEDI_MISC_DRIVERS 
/boot/config-3.2.0-4-amd64:4706:warning: symbol value ’m’ invalid 
for COMEDI_PCI_DRIVERS 
/boot/config-3.2.0-4-amd64:4763:warning: symbol value ’m’ invalid 
for COMEDI_PCMCIA_DRIVERS 
/boot/config-3.2.0-4-amd64:4771:warning: symbol value ’m’ invalid 
for COMEDI_USB_DRIVERS 
* 
* Linux/x86 3.10.2 Kernel Configuration 
* 
64-bit kernel (64BIT) [Y/n/?] 
make menuconfig
Il est développé avec la bibliothèque ncurses ce qui implique l’installation de libncurses5-dev pour Debian et Ubuntu ou de ncurses-devel.x86_64 pour CentOS. Grâce à une gestion par menus, il offre une meilleure convivialité que make config pour choisir les options :
images/04EI01.png
make nconfig
Développé avec la bibliothèque ncurses, make nconfig est une version améliorée de make menuconfig :
images/04EI02.png
make gconfig
Nécessite l’installation de libgtk2.0-dev, libglib2.0-dev et de libglade2-dev pour Debian. Ubuntu Server et CentOS n’ont pas nativement d’environnement graphique. Certes, il n’est pas impossible de l’ajouter par vos soins. Dans ce cas, il faut installer les bibliothèques GTK et Glade.
images/04EI03.png
make xconfig
Développé avec la bibliothèque Qt, le paquet libqt4-dev doit être installé sur Debian. Tout comme pour le GTK, Ubuntu Server et CentOS n’ont pas d’environnement graphique nativement. Si vous l’avez ajouté, dans ce cas, installez les bibliothèques Qt 3 ou 4.
images/04EI04.png
Si vous administrez votre serveur en mode texte depuis un terminal distant, make menuconfig ou make nconfig sont probablement les meilleurs choix. Les différentes options du noyau sont activées (Y), désactivées (N) ou chargeables en tant que module (M) et sont répertoriées ainsi :
  • 64-bit kernel (sélectionné nativement) contient le code 64 bits du noyau Linux. C’est obligatoirement activé.
  • General setup. Ce menu contient les options générales de configuration du noyau comme le mécanisme de pagination de la mémoire virtuelle, la gestion des IPC compatibles System V, etc.
  • Enable loadable module support (sélectionné nativement) contient le support des Loadable Kernel Modules (LKM). Ce sujet est du reste abordé dans le chapitre Loadable Kernel Modules.
  • Enable the block layer (sélectionné nativement) contient la prise en charge des périphériques de type bloc.
  • Processor type and features contient le support de plusieurs processeurs.
  • Power management and ACPI options contient la gestion d’énergie.
  • Bus options contient la gestion des bus tels que PCI, PCMCIA...
  • Executable file formats / emulations gère l’utilisation des fichiers binaires au format ELF. Du fait que ce format de fichier est devenu un standard, l’activation de cette option est recommandée.
  • Networking support (sélectionné nativement) contient la prise en charge des fonctionnalités réseau. C’est une option quasiment obligatoire. Il est rare de voir un serveur GNU/Linux sans services réseau.
  • Device drivers gère les options relatives aux gestionnaires de périphériques.
  • Firmware drivers gère les options relatives aux firmwares (BIOS, EFI, DMI...).
  • File systems active ou non la prise en charge des systèmes de fichiers (ext2, ext3, ext4, JFS, XFS, BRFS...).
  • Kernel hacking ajoute une datation aux traces du noyau Linux. Cette option n’est pas recommandée pour un usage courant.
  • Security options permet le stockage des clefs privées dans le noyau au lieu des processus.
  • Cryptographic API (sélectionné nativement) permet d’intégrer la prise en charge les algorithmes de chiffrement SHA1, AES, MD5, MD4...
  • Virtualization (sélectionné nativement) permet la prise en charge de Kernel-based Virtual Machine (KVM).
  • Library routines offre la possibilité d’inclure différentes fonctions. Les composants du noyau ne vont pas, cependant, les utiliser. Les fonctions sont exportées pour que des modules livrés par des tiers puissent les exploiter.

d. Fichiers de configuration

Dans le répertoire /boot de votre distribution, un fichier texte contient la configuration du noyau que votre système d’exploitation utilise. La nomenclature du nom est : config-<version_du_noyau><architecture>.
Distribution
Nom du fichier
Debian 7 (Wheezy)
/boot/config-3.2.0-4-amd64
Ubuntu 12.04 LTS
/boot/config-3.2.0-45-generic
CentOS 6.4
/boot/config-2.6.32-358.14.1.el6.x86_64
Voici, par exemple le contenu du fichier /boot/config-3.2.0-4-amd64 de Debian 7 :
# cat config-3.2.0-4-amd64  
#  
# Automatically generated file; DO NOT EDIT.  
# Linux/x86 3.2.46 Kernel Configuration  
#  
CONFIG_64BIT=y  
# CONFIG_X86_32 is not set  
CONFIG_X86_64=y  
CONFIG_X86=y  
CONFIG_INSTRUCTION_DECODER=y  
CONFIG_OUTPUT_FORMAT="elf64-x86-64"  
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"  
CONFIG_GENERIC_CMOS_UPDATE=y  
CONFIG_CLOCKSOURCE_WATCHDOG=y  
CONFIG_GENERIC_CLOCKEVENTS=y  
 
                               ... 
 
CONFIG_HAS_DMA=y  
CONFIG_CHECK_SIGNATURE=y  
CONFIG_CPU_RMAP=y  
CONFIG_DQL=y  
CONFIG_NLATTR=y  
CONFIG_LRU_CACHE=m  
CONFIG_AVERAGE=y  
CONFIG_CORDIC=m 
Avant de construire le noyau, vous souhaitez probablement reprendre les options du noyau en cours d’exécution, donc depuis l’un des fichiers mentionnés ci-dessus.
Avec la commande cp, il suffit de copier le fichier de configuration du noyau en cours situé dans le dossier /boot vers la racine du dossier des sources du nouveau noyau. Il faut lui donner obligatoirement le nom .config :
Exemple
Copier le fichier noyau 3.2.0-4 en cours d’exécution vers le dossier linux-3.10.2 et le renommer en .config :
# cp /boot/config-3.2.0-4-amd64 ./.config 
Une autre solution, c’est d’utiliser la commande make defconfig :
# make defconfig 
HOSTCC  scripts/basic/fixdep  
  HOSTCC  scripts/kconfig/conf.o  
  SHIPPED scripts/kconfig/zconf.tab.c  
  SHIPPED scripts/kconfig/zconf.lex.c  
  SHIPPED scripts/kconfig/zconf.hash.c  
  HOSTCC  scripts/kconfig/zconf.tab.o  
  HOSTLD  scripts/kconfig/conf Development Libraries 
*** Default configuration is based on ’x86_64_defconfig’  
#  
# configuration written to .config  
# 

e. Nettoyer

Pour nettoyer les traces d’une précédente compilation qui pourrait interférer avec la nouvelle compilation, la commande make dispose de deux cibles :
  • mrproper qui enlève tous les fichiers générés, le fichier .config mais aussi les fichiers de sauvegarde afin de retrouver la configuration de base telle qu’elle était dans l’archive. Tapez Make mrproper dans un terminal :
# make mrproper  
  CLEAN   .  
  CLEAN   arch/x86/kernel/cpu  
  CLEAN   arch/x86/kernel  
  CLEAN   arch/x86/realmode/rm  
  CLEAN   arch/x86/vdso  
  CLEAN   arch/x86/lib  
  CLEAN   drivers/tty/vt  
  CLEAN   drivers/video/logo  
  CLEAN   firmware  
  CLEAN   kernel  
  CLEAN   lib  
  CLEAN   security/selinux  
  CLEAN   usr  
  CLEAN   arch/x86/boot/compressed  
  CLEAN   arch/x86/boot  
  CLEAN   arch/x86/tools  
  CLEAN   .tmp_versions  
  CLEAN   scripts/basic  
  CLEAN   scripts/kconfig  
  CLEAN   scripts/mod  
  CLEAN   scripts/selinux/genheaders  
  CLEAN   scripts/selinux/mdp  
  CLEAN   scripts  
  CLEAN   include/config include/generated  
arch/x86/include/generated  
  CLEAN   .config .version include/generated/uapi/linux/version.h 
Module.symvers 
  • clean qui enlève les fichiers générés. Le fichier .config est conservé. Tapez make clean dans un terminal :
# make clean  
  CLEAN   .  
  CLEAN   arch/x86/kernel/cpu  
  CLEAN   arch/x86/kernel  
  CLEAN   arch/x86/realmode/rm  
  CLEAN   arch/x86/vdso  
  CLEAN   arch/x86/lib  
  CLEAN   crypto/asymmetric_keys  
  CLEAN   drivers/gpu/drm/radeon  
  CLEAN   drivers/scsi/aic7xxx  
  CLEAN   drivers/tty/vt  
  CLEAN   drivers/video/logo  
  CLEAN   firmware  
  CLEAN   kernel  
  CLEAN   lib/raid6  
  CLEAN   lib  
  CLEAN   security/selinux  
  CLEAN   usr  
  CLEAN   Documentation/accounting  
  CLEAN   Documentation/auxdisplay  
  CLEAN   Documentation/connector  
  CLEAN   Documentation/filesystems  
  CLEAN   Documentation/ia64  
  CLEAN   Documentation/laptops  
  CLEAN   Documentation/misc-devices/mei  
  CLEAN   Documentation/networking/timestamping  
  CLEAN   Documentation/networking  
  CLEAN   Documentation/pcmcia  
  CLEAN   Documentation/spi  
  CLEAN   Documentation/timers  
  CLEAN   Documentation/watchdog/src  
  CLEAN   arch/x86/boot/compressed  
  CLEAN   arch/x86/boot  
  CLEAN   arch/x86/tools  
  CLEAN   .tmp_versions 

f. Construire le noyau

La compilation s’effectue avec la commande make. Pour accélérer la compilation, vous pouvez utiliser le commutateur -j en indiquant le nombre de CPU plus 1. Par exemple pour huit cœurs : make -j9.
# make -j9 
  HOSTLD  scripts/kconfig/conf  
scripts/kconfig/conf --silentoldconfig Kconfig  
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h  
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h  
  SYSHDR  arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h  
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_32.h  
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_32_ia32.h  
  SYSHDR  arch/x86/syscalls/../include/generated/asm/unistd_64_x32.h  
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_64.h  
  HOSTCC  arch/x86/tools/relocs_32.o  
  HOSTCC  arch/x86/tools/relocs_64.o  
  HOSTCC  arch/x86/tools/relocs_common.o  
  HOSTLD  arch/x86/tools/relocs  
  WRAP    arch/x86/include/generated/asm/clkdev.h  
  CHK     include/generated/uapi/linux/version.h  
  UPD     include/generated/uapi/linux/version.h  
  CHK     include/generated/utsrelease.h  
  UPD     include/generated/utsrelease.h  
  CC      kernel/bounds.s  
  GEN     include/generated/bounds.h  
  CC      arch/x86/kernel/asm-offsets.s  
  GEN     include/generated/asm-offsets.h  
  CALL    scripts/checksyscalls.sh  
  HOSTCC  scripts/genksyms/genksyms.o  
 
... 
 
H16TOFW firmware/edgeport/boot.fw  
  H16TOFW firmware/edgeport/boot2.fw  
  H16TOFW firmware/edgeport/down.fw  
  H16TOFW firmware/edgeport/down2.fw  
  IHEX    firmware/edgeport/down3.bin  
  IHEX2FW firmware/whiteheat_loader.fw  
  IHEX2FW firmware/whiteheat.fw  
  IHEX2FW firmware/keyspan_pda/keyspan_pda.fw  
  IHEX2FW firmware/keyspan_pda/xircom_pgs.fw  
  IHEX    firmware/yam/1200.bin  
  IHEX    firmware/yam/9600.bin 
La durée de la construction varie entre 45 minutes et 1 heure.

g. Installer

L’installation des modules du noyau (Loadable Kernel Modules) s’effectue avec make modules_install tandis que l’installation du noyau proprement dit se réalise avec make install. Nous pouvons combiner les deux commandes en une seule :
# make modules_install install  
  INSTALL arch/x86/crypto/ablk_helper.ko  
  INSTALL arch/x86/crypto/aes-x86_64.ko  
  INSTALL arch/x86/crypto/aesni-intel.ko  
  INSTALL arch/x86/crypto/blowfish-x86_64.ko  
  INSTALL arch/x86/crypto/crc32c-intel.ko  
  INSTALL arch/x86/crypto/ghash-clmulni-intel.ko  
  INSTALL arch/x86/crypto/glue_helper.ko  
  INSTALL arch/x86/crypto/salsa20-x86_64.ko  
  INSTALL arch/x86/crypto/sha1-ssse3.ko  
  INSTALL arch/x86/crypto/twofish-x86_64-3way.ko  
  INSTALL arch/x86/crypto/twofish-x86_64.ko  
  INSTALL arch/x86/kernel/cpu/mcheck/mce-inject.ko  
  INSTALL arch/x86/kernel/cpuid.ko  
  INSTALL arch/x86/kernel/microcode.ko  
  INSTALL arch/x86/kernel/msr.ko  
  INSTALL arch/x86/kvm/kvm-amd.ko  
  INSTALL arch/x86/kvm/kvm-intel.ko 
 
                                ... 
 
INSTALL /lib/firmware/whiteheat.fw  
  MKDIR   /lib/firmware/keyspan_pda  
  INSTALL /lib/firmware/keyspan_pda/keyspan_pda.fw  
  INSTALL /lib/firmware/keyspan_pda/xircom_pgs.fw  
  MKDIR   /lib/firmware/yam  
  INSTALL /lib/firmware/yam/1200.bin  
  INSTALL /lib/firmware/yam/9600.bin  
  DEPMOD  3.10.2 
Le dossier /boot contient les fichiers suivants :
  • config-3.10.2
  • initrd.img-3.10.2
  • System.map-3.10.2
  • vmlinuz-3.10.2
Le fichier de configuration de GRUB est mis à jour. Il suffit de redémarrer son système pour utiliser le nouveau noyau Linux installé.
Debian et Ubuntu ont un GRUB version 2 alors que CentOS 6 a la version 1. Le fichier de configuration est par conséquent différent.
Exemple avec Debian/Ubuntu
Avec la commande grep et le motif 3.10.2, vérifiez si le fichier /boot/grub.cfg de Debian ou Ubuntu contient la configuration de l’amorçage du nouveau noyau :
# grep 3.10.2 /boot/grub/grub.cfg  
menuentry ’Debian GNU/Linux, avec Linux 3.10.2’ --class debian 
 --class gnu-linux --class gnu --class os {  
   echo     ’Chargement de Linux 3.10.2 ...’  
   linux    /boot/vmlinuz-3.10.2 root=/dev/mapper/SystemVG-rootLV  
ro  quiet  
   initrd   /boot/initrd.img-3.10.2  
menuentry ’Debian GNU/Linux, avec Linux 3.10.2 (mode de  
dépannage)’ --class debian --class gnu-linux --class gnu --class  
os {  
   echo     ’Chargement de Linux 3.10.2 ...’  
   linux     /boot/vmlinuz-3.10.2 root=/dev/mapper/SystemVG-rootLV  
ro single  
   initrd    /boot/initrd.img-3.10.2
Exemple avec CentOS 6
Avec la commande grep et le motif 3.10.2, vérifiez si le fichier /boot/grub.cfg contient la configuration de l’amorçage du nouveau noyau :
# grep 3.10.2 /boot/grub/grub.conf  
title CentOS (3.10.2)  
   kernel /vmlinuz-3.10.2 ro root=/dev/mapper/VolGroup-lv_root  
rd_NO_LUK rd_NO_MD rd_LVM_LV=VolGroup/lv_swap LANG=fr_FR.UTF-8  
SYSFONT=latarcyrhe sun16  KEYBOARDTYPE=pc KEYTABLE=fr-latin9  
crashkernel=aut rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet  
   initrd /initramfs-3.10.2.img

2. Compiler un noyau façon Debian

Cette méthode, comme son nom l’indique, est destinée à la distribution Debian. 
Vous effectuez le téléchargement du code source du noyau, l’extraction de l’archive dans le répertoire de l’utilisateur /home/bob. Vous utilisez les outils de configuration de la même manière que lors de la compilation classique.

a. Paquets nécessaires

Les paquets nécessaires à la compilation à installer sont :
  • build-essential
  • kernel-package
  • debconf-utils
  • dpkg-dev
  • debhelper
  • ncurses-dev
  • fakeroot
D’autres paquets peuvent s’ajouter à la liste ci-dessus en fonction des besoins ou des dépendances.
L’emplacement pour construire le noyau doit disposer d’un espace disque suffisant.

b. Privilège utilisateur

Il n’est pas nécessaire d’être le super utilisateur (root) pour compiler. Il suffit d’ajouter bob dans le groupe src avec gpasswd :
Syntaxe
gpasswd <option> <utilisateur> <groupe(s)>
Options nécessaires :
Option
Description
courte
longue
-a
--add
Ajouter l’utilisateur mentionné à ce groupe.
-d
--delete
Enlever l’utilisateur mentionné à ce groupe.
Tapez dans un terminal :
$ sudo gpasswd -a bob src 
[sudo] password for bob 
Ajout de l’utilisateur bob au groupe src
Pour vérifier :
$ grep src /etc/group 
src:x:40:bob
Nous allons nous assurer avec la commande chown que l’utilisateur bob et que le groupe src soient propriétaires de toute l’arborescence du dossier linux-3.10.2.
Syntaxe
chown <option> <util_propriétaire>:<groupe_propriétaire> <dossier>
Option nécessaire :
Option
Description
courte
longue
-R
--recursive
Modifier récursivement fichiers et répertoires.
Tapez dans un terminal :
$ sudo chown -R bob:src ./linux-3.10.2 
[sudo] password for bob:

c. Nettoyer

La commande make-kpkg permet d’effectuer un nettoyage avant toute nouvelle compilation des sources du noyau Linux.
Syntaxe
make-kpkg <cible>
La cible nécessaire :
Cible
Description
clean
Efface tous les fichiers créés dans le répertoire des sources du noyau.
Tapez dans un terminal make-kpkg clean :
# make-kpkg clean  
exec make kpkg_version=12.036+nmu3 -f /usr/share/kernel- 
package/ruleset/minimal.mk clean  
====== making target minimal_clean [new prereqs: ]======  
This is kernel package version 12.036+nmu3.  
test ! -f .config || cp -pf .config config.precious  
test ! -e stamp-building || rm -f stamp-building  
test ! -f Makefile || \  
            make    ARCH=x86_64 distclean  
make[1]: entrant dans le répertoire « /home/bob/linux-3.10.2 »  
  CLEAN   scripts/basic  
  CLEAN   scripts/kconfig  
  CLEAN   include/config include/generated  
make[1]: quittant le répertoire « /home/bob/linux-3.10.2 »  
test ! -f config.precious || mv -f config.precious .config  
rm -f modules/modversions.h modules/ksyms.ver  
scripts/cramfs/cramfsck scripts/cramfs/mkcramfs

d. Construire

Il n’est pas nécessaire d’avoir les privilèges root car la commande fakeroot simule l’environnement de root pour le programme make-kpkg, lequel va générer les paquets du noyau à construire.
Syntaxe
fakeroot make-kpkg <options> <cibles>
Options nécessaires :
Option
Description
--initrd
Stipule que cette image a besoin d’un initrd.
--append-to-version
L’argument est ajouté à la valeur de la variable EXTRAVERSION qui est présente dans le fichier Makefile. Vous pouvez mettre ainsi la date du jour de la compilation.
Cibles nécessaires :
Cible
Description
kernel-image
Génère un paquet Debian contenant un noyau Linux, et tous les modules définis dans le fichier de configuration du noyau .config :
linux-image-3.10.2-20130726_3.10.2-20130726-10.00.Custom_amd64.deb
kernel-headers
Crée le paquet Debian des fichiers d’en-têtes contenus dans le noyau Linux :
linux-headers-3.10.2-20130726_3.10.2-20130726-10.00.Custom_amd64.deb
Dans un terminal, tapez :
$ fakeroot make-kpkg --initrd --append-to-version=-$(date ’+%Y%m 
%d’) kernel-image kernel-headers  
exec make kpkg_version=12.036+nmu3 -f /usr/share/kernel- 
package/ruleset/minimal.mk debian APPEND_TO_VERSION=-20130726   
INITRD=YES  
====== making target debian/stamp/conf/minimal_debian [new  
prereqs: ]======  
This is kernel package version 12.036+nmu3.  
test -d debian             || mkdir debian  
test ! -e stamp-building || rm -f stamp-building  
install -p -m 755 /usr/share/kernel-package/rules debian/rules  
for file in ChangeLog  Control  Control.bin86 config templates.in  
rules; do                                                      \  
          cp -f  /usr/share/kernel-package/$file ./debian/;    \  
       done  
for dir  in Config docs examples ruleset scripts pkg po;  do   \  
          cp -af /usr/share/kernel-package/$dir  ./debian/;    \  
        done  
test -f debian/control || sed      -e ’s/=V/3.10.2-20130726/g’  \  
            -e ’s/=D/3.10.2-20130726-10.00.Custom/g’         -e  
’s/=A/amd64/g’  \  
             -e ’s/=SA//g’  \  
             -e ’s/=I//g’                         \  
             -e ’s/=CV/3.10/g’                    \  
             -e ’s/=M/Unknown Kernel Package Maintainer 
<unknown@unconfigured.in.etc.kernel-pkg.conf>/g’               \  
             -e ’s/=ST/linux/g’      -e ’s/=B/x86_64/g’        \  
                   /usr/share/kernel-package/Control >  
debian/control  
test -f debian/changelog ||  sed -e ’s/=V/3.10.2-20130726/g’ \  
            -e ’s/=D/3.10.2-20130726-10.00.Custom/g’        -e  
’s/=A/amd64/g’       \  
            -e ’s/=ST/linux/g’     -e ’s/=B/x86_64/g’         \  
            -e ’s/=M/Unknown Kernel Package Maintainer  
<unknown@unconfigured.in.etc.kernel-pkg.conf>/g’              \  
             /usr/share/kernel-package/changelog >  
debian/changelog  
chmod 0644 debian/control debian/changelog  
test -d ./debian/stamp || mkdir debian/stamp  
make -f debian/rules debian/stamp/conf/kernel-conf  
make[1]: entrant dans le répertoire « /home/bob/linux-3.10.2 »  
====== making target debian/stamp/conf/kernel-conf [new prereqs: ] 
======  
make EXTRAVERSION=-20130726   ARCH=x86_64 \  
                    oldconfig;  
make[2]: entrant dans le répertoire « /home/bob/linux-3.10.2 »  
scripts/kconfig/conf --oldconfig Kconfig  
#  
# using defaults found in /boot/config-3.10.2  
#  
#  
# configuration written to .config  
#  
make[2]: quittant le répertoire « /home/bob/linux-3.10.2 »  
make EXTRAVERSION=-20130726   ARCH=x86_64 prepare  
make[2]: entrant dans le répertoire « /home/bob/linux-3.10.2 »  
scripts/kconfig/conf --silentoldconfig Kconfig  
make[2]: quittant le répertoire « /home/bob/linux-3.10.2 »  
make[2]: entrant dans le répertoire « /home/bob/linux-3.10.2 »  
  SYSHDR  
arch/x86/syscalls/../include/generated/uapi/asm/unistd_32.h  
  SYSHDR  
arch/x86/syscalls/../include/generated/uapi/asm/unistd_64.h  
  SYSHDR  
arch/x86/syscalls/../include/generated/uapi/asm/unistd_x32.h  
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_32.h  
  SYSHDR  
arch/x86/syscalls/../include/generated/asm/unistd_32_ia32.h  
  SYSHDR  
arch/x86/syscalls/../include/generated/asm/unistd_64_x32.h  
  SYSTBL  arch/x86/syscalls/../include/generated/asm/syscalls_64.h  
  HOSTCC  arch/x86/tools/relocs_32.o  
  HOSTCC  arch/x86/tools/relocs_64.o  
  HOSTCC  arch/x86/tools/relocs_common.o  
  HOSTLD  arch/x86/tools/relocs  
  WRAP    arch/x86/include/generated/asm/clkdev.h  
  CHK     include/generated/uapi/linux/version.h  
  UPD     include/generated/uapi/linux/version.h  
  CHK     include/generated/utsrelease.h  
  UPD     include/generated/utsrelease.h  
  CC      kernel/bounds.s  
  GEN     include/generated/bounds.h  
 
                               ... 
 
chown -R root:root                  /home/bob/linux- 
3.10.2/debian/linux-headers-3.10.2-20130726  
chmod -R og=rX                      /home/bob/linux- 
3.10.2/debian/linux-headers-3.10.2-20130726  
dpkg --build                        /home/bob/linux- 
3.10.2/debian/linux-headers-3.10.2-20130726 ..  
dpkg-deb : construction du paquet « linux-headers-3.10.2- 
20130726 » dans « ../linux-headers-3.10.2-20130726_3.10.2- 
20130726-10.00.Custom_amd64.deb ».  
cp -pf debian/control.dist          debian/control  
make[2]: quittant le répertoire « /home/bob/linux-3.10.2 »  
make[1]: quittant le répertoire &laqu

Aucun commentaire :

Enregistrer un commentaire