NOM
make-kpkg - construit des paquets Debian du noyau à partir des sources
du noyau Linux
SYNOPSIS
make-kpkg [options] [cible[cible ...]]
Cette page de manuel décrit l’utilitaire Debian make-kpkg, utilisé pour
créer les paquets Debian concernant le noyau. Cet utilitaire doit être
lancé à partir du répertoire racine des sources du noyau Linux, noyau
qui doit avoir été préalablement configuré (à moins que vous
n’utilisiez la cible «configure »). Normalement, si kernel-package ne
trouve pas de fichier .config dans le répertoire courant, il essaye
absolument d’en trouver un autre qui fera l’affaire (en fait, un
fichier de configuration déjà pré-réglé pour les noyaux Debian sur
cette architecture) puis lancera un make oldconfig pour permettre à
l’utilisateur de répondre à toute nouvelle question. Typiquement, vous
exécutez cette commande en tant que root ou avec fakeroot, ou encore en
indiquant à make-kpkg comment devenir root, comme ceci :
make-kpkg --rootcmd fakeroot kernel_image
Le paquet Debian sera créé dans le répertoire père des sources du noyau
depuis lequel la commande a été lancée.
De plus, sachez que certaines versions de gcc ne fonctionnent pas très
bien avec les sources du noyau (gcc 2.95 rencontre des problèmes de
compilation du noyau si on n’utilise pas l’option de compilation
«-fno-strict-aliasing »). Ce problème a été réglé pour les noyaux
récents (les séries 2.2 et 2.4 n’ont pas ce problème) (je crois que,
pour les noyaux plus anciens, vous risquez d’avoir à modifier le
makefile). Vous pouvez indiquer la version de gcc à utiliser pour la
compilation du noyau en définissant les variables CC et HOSTCC du
Makefile (le Makefile du premier niveau). Cela se fait tout simplement
en définissant la variable d’environnement MAKEFLAGS. Pour voir,
testez :
% KBUILD_VERBOSE=1 MAKEFLAGS="CC=gcc-4.4" make-kpkg configure
KBUILD_VERBOSE affiche le détail des commandes qui sont lancées
(Consultez le Makefile de premier niveau afin de connaître les
variables qui peuvent être définies).
WARNING: Do NOT set the -j option in MAKEFLAGS directly, this shall
cause the build to fail. Use CONCURRENCY_LEVEL as specified below.
There is also a -j flag that can be used.
OPTIONS
Affiche un message d’aide.
--revision numéro
Changes the version number for the packages produced to the
argument number. This has certain constraints: the version may
contain only alphanumerics and the characters ~ + . (tilde, full
stop and plus) and must contain a digit. (Look at the Policy
manual for details). Optionally, you may prepend the revision
with a digit followed by a colon (:). The default is
10.00.Custom unless the environment variable
DEBIAN_REVISION_MANDATORY is set, in which case an error is
generated if the revision is not set on the command line or the
configuration file. Hint: You may set it to $(version)-<foo> in
the configuration file to get the upstream version number
prepended to your custom string <foo>.
--append-to-version toto
--append_to_version toto
L’argument ( toto ) est ajouté à la valeur de la variable
EXTRAVERSION présente dans le Makefile du noyau. Puisque
EXTRAVERSION fait partie de la version du noyau, il est aussi
ajouté au nom du paquet, et de ce fait doit obéir à la politique
qui régit les noms de paquet. Ce qui signifie qu’il ne doit
contenir que des caracactères alphanumérique en minuscules et
des caractères ~ - + . (tilde, point, tiret et plus). Les
majuscules sont interdites selon la Charte pour les nouveaux
paquets. Si la variable d’environnement IGNORE_UPPERCASE_VERSION
est définie, make-kpkg changera la casse en minuscules pour le
numéro de version défini soit dans le Makefile ou dans le
fichier localversion. Cette option outrepasse la variable
d’environnement APPEND_TO_VERSION
--added-modules toto
--added_modules toto
Cet argument se présente sous la forme d’une liste de modules
additionnels séparés par des virgules (modules non inclus dans
l’arborescence principale du noyau) que vous souhaitez
construire lorsque vous invoquez les cibles modules_truc. Vous
devez indiquer le chemin complet des répertoires contenant les
modules, ou simplement le nom du module s’il peut être trouvé
dans MODULE_LOC, qui pointe par défaut sur /usr/src/modules. Le
comportement par défaut compile tous les modules qui sont dans
MODULE_LOC, quand les cibles modules_truc sont demandées.
--arch truc
Pratique pour définir l’architecture quand vous utilisez la
compilation croisée. Si vous ne faites pas de compilation
croisée, l’architecture est automatiquement déterminée. On peut
obtenir le même résultat en réglant la variable d’environnement
KPKG_ARCH. Cette valeur doit correspondre au contenu de
DEB_HOST_ARCH_CPU lorsque dpkg-architecture est exécuté sur la
machine cible, et elle peut correspondre à une autre
architecture dans le cas d’un ensemble multiarchitecture (comme
i386/amd64).
--cross-compile truc
--cross_compile truc
Pratique pour définir la chaîne cible quand vous faites de la
compilation croisée. Utilisez la cible fantôme « - » si vous
construisez pour les autres architectures dans le cas d’un
ensemble multiarchitecture, comme i386/amd64. Le même résultat
peut être obtenu en définissant la variable d’environnement.
Notez bien que cela ne régle en aucune manière le compilateur
que le processus de construction du noyau doit utiliser. Si le
compilateur par défaut utilisé par le processus de construction
n’est pas celui dont vous avez besoin, définissez explicitement
le compilateur qui doit être utilisé. CROSS_COMPILE.
--subarch truc
Certaines architectures (comme Alpha, ou m68k) ont besoin de
noyaux différents pour chacune des sous-architectures. Cette
option offre un moyen de le spécifier en tant qu’argument de
make-kpkg. Notez bien qu’une gestion de ces sous-architectures
doit être présente dans les sources du noyaux afin que cette
option serve à quelque chose. On peut obtenir le même résultat
en réglant la variable d’environnement KPKG_SUBARCH
--arch-in-name
--arch_in_name
Cette option rallonge le nom du paquet de l’image du noyau en
intégrant la sous-architecture dans le nom de l’image ; ainsi on
peut écrire des scripts pour créer de multiples
sous-architectures, l’une après l’autre. On peut faire la même
chose en réglant la variable d’environnement ARCH_IN_NAME. Notez
bien que seul le nom du paquet est changé, pas l’emplacement des
modules, etc.
--pgpsign nom
Définit la chaîne utilisée pour signer le fichier des
modifications (changes) pour les modules externes rangés dans
/usr/src/modules/ et qui utilisent PGP. Cette option prendra le
pas sur le comportement par défaut et sur les préférences
générales qui se trouvent dans le fichier /etc/kernel-pkg.conf
ou ~/.kernel-pkg.conf.
--config cible
Modifie le type de configuration utilisée, par défaut oldconfig.
Cible doit prendre une des valeurs suivantes oldconfig, config,
menuconfig, gconfig, xconfig, randconfig,, defconfig,
allmodconfig, allyesconfig, allnoconfig; old, menu, g, ou x.
Notez cependant que make-kpkg explore au démarrage le fichier de
configuration à la recherche de certaines options, notamment
l’activation ou non des modules, et que la modification de ce
choix pendant la configuration engendrera une erreur. Si
nécessaire, créez un fichier de configuration le plus proche
possible de celui désiré avant d’appeler make-kpkg avec cette
option.
--targets
Affiche la liste des cibles connues. Voir la section Cibles plus
loin.
--noexec
Passe l’option -n au processus make afin que les commandes
soient simplement affichées à l’écran mais pas réellement
exécutées. C’est très pratique pour le débogage.
--verbose
Appelle make avec l’option -V=1, ce qui appelle les commandes
Make du niveau supérieur, pratique pour voir ce qui est en train
de se passer.
--initrd
If make-kpkg is generating a kernel-image package, arrange to
convey to the hook scripts run from the post installation
maintainer scripts that this image requires an initrd, and that
the initrd generation hook scripts should not short circuit
early. Without this option, the example initramfs hook scripts
bundled in with kernel-package will take no action on
installation. The same effect can be achieved by setting the
environment variable INITRD to any non empty value. Please note
that unless there are hook scripts in /etc/kernel or added into
the hook script parameter of /etc/kernel-img.conf. no initrd
will be created (the bundled in example scripts are just
examples -- user action is required before anything happens).
--jobs number
-j number Set the environment variable CONCURRENCY_LEVEL to
"number".
--overlay-dir /chemin/vers/répertoire
Le répertoire indiqué doit contenir les fichiers qui seront
copiés dans le répertoire ./debian des sources du noyau, afin de
contruire les paquets debian.
Veuillez noter que overlay-dir/Control et overlay-dir/changelog
sont particuliers, et que des substitutions de variables sont
exécutées sur ces fichiers. Utilisez ces fichiers
/usr/share/kernel-package/Control et
/usr/share/kernel-package/changelog en tant que modèles
(templates)
Si un programme (ou un script exécutable)
overlay-dir/post-install est présent, il sera exécuté
immédiatement après le remplissage de ./debian. Le script sera
exécuté dans le répertoire ./debian. Cela peut servir par
exemple à supprimer des fichiers dont l’utilisateur n’a pas
besoin, ou exécuter des opérations autres qu’un simple
remplacement.
--zimage
Génère un noyau en zImage plutôt qu’en bzImage (comportement par
défaut). C’est utile pour ceux qui ont des problèmes avec les
noyaux bzImage.
--bzimage
Génère un noyau en bzImage. C’est utile pour ceux qui veulent un
noyau bzImage sur les systèmes où le réglage par défaut est
zImage.
--rootcmd commande
La commande qui offre la possibilité d’obtenir l’accès
superutilisateur (Par exemple, « sudo » ou « fakeroot ») pour
les besoins de l’option -r de dpkg-buildpackage. Cette option ne
fonctionne pour trois cibles précises, qui sont binary,
binary-indep, et binary-arch. Pour ces cibles, la commande
make-kpkg doit être lancée en tant que root (ou fakeroot).
--stem truc
Nomme le paquet truc-* à la place de kernel-*. Pratique pour
assurer la transition du nommage des paquets de kernel-* à
linux-*, afin de préparer les noyaux non-linux de la
distribution. Défini à linux par défaut. Cette chaine,
puisqu’elle est le debut du nom du paquet, ne doit comporter que
des lettres minuscules (a-z), des chiffres (0-9), plus (+),
moins ’(-) ou des points (.). Elle doit faire une longueur d’au
moins 2 caractères, et commencer par une lettre.
--us Cette option est transmise à dpkg-buildpackage et demande de ne
pas signer la source. Elle n’a de sens que pour la cible
buildpackage.
--uc Cette option est transmise à dpkg-buildpackage, et demande de ne
pas signer le changelog. Elle n’a de sens que pour la cible
buildpackage.
Les options peuvent être raccourcies en la plus petite chaîne de
caractères non équivoque et peuvent être invoquées indifféremment avec
les préfixes - ou -- ; Vous pouvez mettre un espace ou un symbole =
entre une option et sa valeur. Vous pouvez aussi utiliser la forme
option=valeur ; Pour plus d’informations sur ces variantes et d’autres
qui sont reconnues, consultez la page de manuel Getopt::Long (3perl).
CONCURRENCY_LEVEL
If defined, this environment variable sets the concurrency level
of make used to compile the kernel and the modules set using -j
flags to the sub make in the build target of make-kpkg. Should
be a (small) integer, if used. You can get the current number of
CPUs using the command:
"grep -c ’^processor’ /proc/cpuinfo" WARNING: Do NOT set the -j
option in MAKEFLAGS directly, this shall call the build to fail.
It is possible to set -j as a make-kpkg argument.
CIBLES
clean Efface tous les fichiers créés dans le répertoire des sources du
noyau par la cible build, et lance un make distclean. (Consultez
le Makefile du noyau Linux pour plus d’informations). Notez que
malgré l’attention que nous portons aux réglages du noyau
courant contenus dans le fichier .config, le fichier
include/linux/autoconf.h ne sera pas gardé. Cette cible ne doit
pas être combinée avec une autre, puisque make-kpkg lit toutes
les données avant de lancer une quelconque cible, donc les
autres cibles seront exécutées avec les anciennes données, ce
qui n’est sûrement pas ce que vous désirez.
buildpackage
Cette cible lance les cibles clean, et binary, et génère le
paquet complet grâce à dpkg-buildpackage
binary Cette cible génère les quatre paquets Debian en lançant les
cibles binary-indep et binary-arch. Toutefois, il faut lancer
make-kpkg en tant que root (ou fakeroot), car --rootcmd ne
fonctionnera pas.
binary-indep
Cette cible génère les paquets indépendants de l’architecture en
lançant les cibles kernel_source, kernel_manual et kernel_doc.
Toutefois, il faut lancer make-kpkg en tant que root (ou
fakeroot), car --rootcmd ne fonctionnera pas.
binary-arch
This target produces the arch dependent packages by running the
targets kernel_headers and kernel_image. However, this also
requires make-kpkg to be run as root (or fakeroot), since
--rootcmd will not work. kernel_image.
kernel_source
Cette cible génère un paquet Debian des sources du noyau Linux.
Si la variable d’environnement SOURCE_CLEAN_HOOK pointe sur un
exécutable, alors cet exécutable sera lancé, juste avant de
faire le paquet, sur le répertoire (racine) temporaire des
sources du noyau,
./debian/tmp-source/usr/src/kernel-source-X.X.XX, de façon à ce
qu’on puisse lancer toute commande appropriée (supprimer des
arborescences liées à des architectures, ôter les répertoires de
contrôle de version, find . -type d -name CVS -prune -exec rm
-rf {} \; etc). Cela ne concerne que les sources du noyau qui
sont en cours d’empaquetage. Si cette action porte sur le
répertoire courant et ses répertoires fils, l’arborescence
originale qui contient les sources reste, elle, inchangée. Les
variables d’environnement HEADER_CLEAN_HOOK et DOC_CLEAN_HOOK
sont semblables. Elles doivent pointer sur des exécutables ; ces
exécutables seront appliqués sur le répertoire (racine)
temporaire des en-têtes du noyau et de la documentation juste
avant la génération des paquets respectifs, de façon à ce que
vous puissiez lancer toute action qui vous semble adéquate. De
même, ne sont touchées que les sources qui sont en cours
d’empaquetage.
kernel_debug
Cette cible fabrique une paquet Debian contenant les symboles de
debogages pour les modules contenu dans le paquet image
correspondant. L’idée de base ici est de garder le contrôle sur
l’encombrement dans /lib/modules/<kver>, puisqu’il pourrait
s’agir d’une partition racine dotée de limites de taille.
kernel_headers
Cette cible génère le paquet Debian des fichiers d’en-têtes
contenus dans le noyau Linux.
kernel_manual
Cette cible génère le paquet Debian contenant les pages de
manuel de la section 9 fournies dans le noyau Linux. Notez bien
que ce n’est pas vraiment une cible indépendante, puisque son
appel déclenchera l’appel de la cible kernel_doc, et créera un
paquet kernel-doc en même temps.
kernel_doc
Cette cible génère un paquet Debian contenant la documentation
contenue dans le noyau Linux. Elle peut être appelée
indépendamment de la cible kernel_manual, mais l’inverse n’est
pas possible.
kernel_image
Cette cible génère un paquet Debian contenant un noyau Linux, et
tous les modules définis dans le fichier de configuration du
noyau .config. S’il n’y a pas de fichier .config dans les
répertoires des sources du noyau, une configuration par défaut
est utilisée, identique à celle utilisée pour créer les
disquettes de démarrage Debian.
Si le fichier ./debian/post-install existe, et qu’il s’agit d’un
exécutable, il est lancé juste avant la création du paquet de
l’image du noyau. De même, notez que si des scripts existent
dans le répertoire ./debian/image.d/ , run-parts sera lancé sur
ce répertoire juste avant la création du paquet de l’image du
noyau. L’emplacement de la racine de l’image pour le paquet en
cours de construction peut être défini par la variable
d’environnement IMAGE_TOP, et la version du noyau est définie
grâce à la variable d’environnement version pour tous ces
scripts.
Consultez la documentation à propos des variables de type
« hook » (points d’entrée) dans kernel-img.conf(5). Ces
variables peuvent indiquer des scripts qui ajoutent ou
suppriment une ligne dans le menu du grub à l’installation ou à
la suppression de l’image du noyau. Un exemple de script pour
ajouter des lignes au menu du grub est fourni dans le répertoire
/usr/share/doc/kernel-package/.
En dehors de ces variables de type « hook » que l’administrateur
peut définir, il existe un ensemble de répertoires dans lesquels
des paquets, ou l’administrateur, peuvent déposer des scripts.
Ces répertoires sont /etc/kernel/preinst.d/,
/etc/kernel/postinst.d/, /etc/kernel/prerm.d/,
/etc/kernel/postrm.d/, et /etc/kernel/preinst.d/<VERSION>/,
/etc/kernel/postinst.d/<VERSION>/,
/etc/kernel/prerm.d/<VERSION>/, /etc/kernel/postrm.d/<VERSION>/.
Si ces répertoires existent, le paquet kernel-image lancera le
programme run-parts sur ceux-ci, en passant en argument la
version en cours d’installation ou de suppression, durant la
phase correspondante (installation ou suppression). Avant
d’appeler ces scripts, la variable d’environnement STEM doit
être réglée avec le contenu de l’argument --stem (ou à sa valeur
par défaut, linux), et la variable KERNEL_PACKAGE_VERSION doit
contenir la version de kernel-package qui a créé ce paquet. Ces
scripts peuvent être appelés avec deux arguments, le premier
étant la version de l’image du noyau, et le second étant
lendroit où est rangé l’image proprement dite. Lorsque debconf
est lancé avant que le script ne soit appelé, ce dernier ne
devra pas générer de message de diagnostic sur la sortie
standard -- En effet, au moment où la post-installation appelle
db_stop, debconf ne rétablit pas la sortie standard, tous les
messages en sa direction disparaissent.
À l’installation, vous aurez la possibilité de lancer le
chargeur de démarrage LILO (ou des équivalents tels que loadlin,
SILO, QUIK, VMELILO, ZIPL, yaboot, PALO ou GRUB ), en créant un
fichier de configuration pour ces programmes de démarrage, si
nécessaire. À ce moment, vous aurez aussi la possibilité de
mettre ce nouveau noyau sur une disquette, en formatant la
disquette si nécessaire. En cas de suppression, le paquet
vérifie la version du noyau en cours d’exécution, et refuse
alors d’effacer le noyau en cours d’utilisation. Grub mérite une
mention particulière ici, puisque grub n’a pas besoin d’être
relancé après l’installation d’une image de noyau, et qu’une
modification automatisée du contenu du menu est suffisante pour
l’installation ou la suppression d’une image d’un noyau.
build Cette cible, utilisée par la cible kernel_image ci-dessus,
compile le noyau Linux.
modules
Cette cible vous permet de générer tous les modules et paquets
additionnels qui dépendent fortement de la version du noyau pour
laquelle ils ont été compilés, en même temps que vous
construisez votre image du noyau. Cette cible s’attend à trouver
les modules et paquets sous /usr/src/modules, et, pour chacun de
ces répertoires, se déplacera dans MODULE_LOC/x (MODULE_LOC
étant par défaut /usr/src/modules ), et lancera la règle kdist
du fichier debian.rules qui s’y trouve. Cette cible créera le(s)
paquet(s) Debian de(s) module(s), ainsi qu’un fichier tar
compressé et un fichier diff compressé, les md5sums
correspondants, générés par dpkg-genchanges, seront enregistrés
dans un fichier des modifications (changes). Ce fichier sera
signé avec la même identité que celle utilisée pour signer le
paquet du noyau. Cette option est utilisée par les responsables
qui déploient les paquets dans les archives de Debian.
modules_config
Cette cible permet de configurer tous les paquets de MODULE_LOC
qui pointent par défaut sur /usr/src/modules. À utiliser si vous
avez besoin de modifier manuellement certains points de la
configuration, ou si vous voulez compiler manuellement tous les
modules additionnels. À n’utiliser que si vous disposez déjà
d’un répertoire ./debian.
modules_image
Cette cible vous permet de construire tous les paquets de
MODULE_LOC qui pointent par défaut sur /usr/src/modules, mais
elle ne crée pas les fichiers sources ou diffs, ni ne crée ni ne
signe un fichier des modifications (un fichier « changes »).
C’est la seule option liée aux modules dont vous aurez besoin si
vous voulez juste compiler les modules additionnels pour leur
installation sur une ou plusieurs machines. Utilisée en général
en conjonction avec kernel_image, notamment si vous invoquez
aussi l’option append_to_version (afin d’éviter de faux messages
d’avertissement). À n’utiliser que si vous disposez déjà d’un
répertoire ./debian.
modules_clean
Cette cible vous permet de nettoyer tous les paquets de
MODULE_LOC qui pointent par défaut sur /usr/src/modules, ce qui
devrait être suffisant pour défaire tout ce qu’ont pu faire
toutes les autres cibles modules_truc. À n’utiliser que si vous
disposez déjà d’un répertoire ./debian.
configure
Cette cible lance configure (en fait config_target, défini par
--config qui pointe par défaut sur oldconfig ) assez tôt, de
sorte que vous puissiez éditer les fichiers créés par make
config dans le répertoire des sources du noyau, sans que
make-kpkg ne les écrase ensuite.
debian Cette cible crée le répertoire ./debian et patche éventuellement
le source. Cette cible est appelée par la cible configure. Vous
utiliserez cette cible pour patcher les sources, puis vous
lancerez l’étape de configuration manuellement afin de mettre à
jour le fichier de configuration avec toutes les nouvelles
options de configuration que les patches pourraient avoir
ajoutées.
libc-kheaders
C’est une cible spéciale pour les responsables de libc-dev, qui
peuvent s’en servir pour créer les paquets d’en-têtes dont la
libc a besoin. Notez qu’il est dangereux de créer un paquet de
libc-kheaders d’en-têtes différentes de celles avec lesquelles
la libc a été compilée. C’est une cause connue d’arrêts brutaux
du système. Consultez /usr/share/kernel-package/README.headers
pour plus d’informations. Créer et installer votre propre paquet
libc-kheaders peut endommager votre système, à moins que vous ne
soyez sûr de ce vous faites. Vous êtes prévenus.
VARIABLES D’ENVIRONNEMENT
KPKG_DEBUG, s’il est défini, demande à make-kpkg de cracher des
messages de mise au point (debug) concernant des fonctions du shell
exécutées en interne. Cela n’intéressera probablement personne, à part
ceux qui mettent au point make-kpkg. Les variables suivantes (décrites
plus haut) affectent make-kpkg : DEBIAN_REVISION_MANDATORY
APPEND_TO_VERSION VERSION_H_OK KPKG_ARCH CROSS_COMPILE KPKG_SUBARCH
KPKG_OVERLAY_DIR ARCH_IN_NAME INITRD SOURCE_CLEAN_HOOK MODULE_LOC
CONCURRENCY_LEVEL IGNORE_UPPERCASE_VERSION
FICHIERS
Outre les options de lancement, le fichier debian.rules lancé par
make-kpkg recherche également un fichier de configuration propre à
l’utilisateur ~/.kernel-pkg.conf. En cas d’absence de ce fichier, il
recherche un réglage par défaut pour tout le système dans le fichier
/etc/kernel-pkg.conf. La configuration par défaut permet le
remplacement pour tout le système du nom complet et du courriel de la
personne responsable de la maintenance des paquets du noyau sur le
site, mais les fichiers /etc/kernel-pkg.conf (ou ~/.kernel-pkg.conf)
sont en fait des bribes de Makefile, et toute directive valide peut y
être incluse. Note: La prudence est de mise avec ce fichier, puisque
vous pouvez changer complètement le comportement du make en modifiant
son contenu. Consultez le fichier
/usr/share/doc/kernel-package/Problems.gz pour connaître la liste des
problèmes recensés lors de la compilation des images du noyau. Un
tutoriel exhaustif et une documentation sont aussi disponibles dans
/usr/share/doc/kernel-package/README.gz et leurs lectures sont
recommandées avant l’utilisation de cet utilitaire.
VOIR AUSSI
kernel-pkg.conf(5), kernel-img.conf(5) Getopt::Long(3perl),
dpkg-deb(1), dpkg-source(1), make(1), le manuel des Programmeurs, le
manuel du make du GNU et la documentation complète du répertoire
/usr/share/doc/kernel-package.
AUTEUR
Cette page a été écrite par Manoj Srivastava, <srivasta@debian.org>,
pour le système Debian GNU/Linux.