727 lines
35 KiB
HTML
727 lines
35 KiB
HTML
|
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<HTML><HEAD><TITLE>Man page of dpkg-buildflags</TITLE>
|
|
</HEAD><BODY>
|
|
<H1>dpkg-buildflags</H1>
|
|
Section: suite dpkg (1)<BR>Updated: 2020-03-23<BR><A HREF="#index">Index</A>
|
|
<A HREF="/cgi-bin/man/man2html">Return to Main Contents</A><HR>
|
|
|
|
|
|
<A NAME="lbAB"> </A>
|
|
<H2>NOM</H2>
|
|
|
|
dpkg-buildflags - Renvoie les options de compilation à utiliser pour la
|
|
construction du paquet
|
|
<A NAME="lbAC"> </A>
|
|
<H2>SYNOPSIS</H2>
|
|
|
|
<B>dpkg-buildflags</B> [<I>option</I>...] [<I>commande</I>]
|
|
<A NAME="lbAD"> </A>
|
|
<H2>DESCRIPTION</H2>
|
|
|
|
<B>dpkg-buildflags</B> est un script qui permet de récupérer les options de
|
|
compilation à utiliser pour la construction d'un paquet.
|
|
Les drapeaux par défaut sont définis par le distributeur mais peuvent être
|
|
étendus ou remplacés de plusieurs façons :
|
|
<DL COMPACT>
|
|
<DT id="1">1.<DD>
|
|
pour tout le système avec <B>/etc/dpkg/buildflags.conf</B> ;
|
|
<DT id="2">2.<DD>
|
|
pour l'utilisateur courant avec <B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B> où
|
|
la valeur par défaut de <B>$XDG_CONFIG_HOME</B> est <B>$HOME/.config</B> ;
|
|
<DT id="3">3.<DD>
|
|
temporairement par l'utilisateur avec des variables d'environnement (voir
|
|
<B>VARIABLES D'ENVIRONNEMENT</B>) ;
|
|
<DT id="4">4.<DD>
|
|
dynamiquement par le responsable du paquet avec des variables
|
|
d'environnement à l'aide de <B>debian/rules</B> (voir <B>VARIABLES
|
|
D'ENVIRONNEMENT</B>).
|
|
</DL>
|
|
<P>
|
|
|
|
Les fichiers de configuration peuvent contenir quatre types de directives :
|
|
<DL COMPACT>
|
|
<DT id="5"><B>SET</B><I> drapeau valeur</I><DD>
|
|
Remplace le drapeau <I>drapeau</I> par la valeur <I>valeur</I>.
|
|
<DT id="6"><B>STRIP</B><I> drapeau valeur</I><DD>
|
|
Retire du drapeau <I>drapeau</I> tous les drapeaux de construction listés dans
|
|
<I>valeur</I>.
|
|
<DT id="7"><B>APPEND</B><I> drapeau valeur</I><DD>
|
|
Étend le drapeau <I>drapeau</I> avec les options indiquées dans <I>valeur</I>. Une
|
|
espace est ajoutée au début de ce qui est ajouté si la valeur actuelle du
|
|
drapeau n'est pas vide.
|
|
<DT id="8"><B>PREPEND</B><I> drapeau valeur</I><DD>
|
|
Préfixe le drapeau <I>drapeau</I> avec les options indiquées dans <I>valeur</I>. Une
|
|
espace est ajoutée au début de ce qui est ajouté si la valeur actuelle du
|
|
drapeau n'est pas vide.
|
|
</DL>
|
|
<P>
|
|
|
|
Les fichiers de configuration peuvent contenir des commentaires sur les
|
|
lignes commençant par un dièse (#). Les lignes vides sont également
|
|
ignorées.
|
|
<A NAME="lbAE"> </A>
|
|
<H2>COMMANDES</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="9"><B>--dump</B><DD>
|
|
Affiche sur la sortie standard tous les drapeaux de compilation et leurs
|
|
valeurs. Un drapeau par ligne est affiché, suivi de sa valeur, séparée par
|
|
le caractère « égal » (« <I>drapeau</I>=<I>valeur</I> »). Il s'agit de l'action par
|
|
défaut.
|
|
<DT id="10"><B>--list</B><DD>
|
|
Affiche la liste des drapeaux gérés par le distributeur actuel (un par
|
|
ligne). Voir la section <B>DRAPEAUX GÉRÉS</B> pour plus d'informations sur
|
|
chacun d'eux.
|
|
<DT id="11"><B>--status</B><DD>
|
|
Affiche toute information utile pour expliquer le comportement de
|
|
<B>dpkg-buildflags</B> (depuis dpkg 1.16.5) : variables d'environnement,
|
|
distributeur actuel, état de tous les drapeaux de fonctionnalités. Affiche
|
|
également les drapeaux de compilation résultants ainsi que leur origine.
|
|
<P>
|
|
Cette option est destinée à être utilisée depuis <B>debian/rules</B>, afin de
|
|
garder dans le journal de construction une trace claire des drapeaux de
|
|
compilation utilisés. Cela peut être utile pour diagnostiquer des problèmes
|
|
qui y seraient liés.
|
|
<DT id="12"><B>--export=</B><I>format</I><DD>
|
|
Affiche sur la sortie standard les commandes qui permettent d'exporter tous
|
|
les drapeaux de compilation pour un outil particulier. Si <I>format</I> n'est
|
|
pas spécifié, sa valeur est <B>sh</B>. Seuls les drapeaux de compilation
|
|
commençant par une majuscule sont inclus, les autres étant supposés
|
|
inadaptés à l'environnement. Formats pris en charge :
|
|
<DL COMPACT><DT id="13"><DD>
|
|
<DL COMPACT>
|
|
<DT id="14"><B>sh</B><DD>
|
|
Commandes shell pour définir et exporter tous les drapeaux de compilation
|
|
dans l'environnement. Les valeurs drapeau sont protégées et ainsi la sortie
|
|
est prête à être évaluée par un shell.
|
|
<DT id="15"><B>cmdline</B><DD>
|
|
Arguments à passer à la ligne de commande d'un programme de construction
|
|
pour utiliser tous les drapeaux de compilation (depuis dpkg 1.17.0). Les
|
|
valeurs drapeau sont protégées dans la syntaxe du shell.
|
|
<DT id="16"><B>configure</B><DD>
|
|
C'est un ancien alias pour <B>cmdline</B>.
|
|
<DT id="17"><B>make</B><DD>
|
|
Directives de make pour définir et exporter tous les drapeaux de compilation
|
|
dans l'environnement. La sortie peut être écrite dans un fragment de
|
|
Makefile et évaluée en utilisant une directive <B>include</B>.
|
|
</DL>
|
|
</DL>
|
|
|
|
<DT id="18"><B>--get</B><I> drapeau</I><DD>
|
|
Affiche la valeur de ce drapeau sur la sortie standard. Retourne un code de
|
|
sortie <B>0</B> si le drapeau est connu et <B>1</B> s'il est inconnu.
|
|
<DT id="19"><B>--origin</B><I> drapeau</I><DD>
|
|
Affiche l'origine de la valeur renvoyée par <B>--get</B>. Retourne un code de
|
|
sortie <B>0</B> si le drapeau est connu et <B>1</B> s'il est inconnu. L'origine est
|
|
une des valeurs suivantes :
|
|
<DL COMPACT><DT id="20"><DD>
|
|
<DL COMPACT>
|
|
<DT id="21"><B>vendor</B><DD>
|
|
le drapeau défini à l'origine par le distributeur est renvoyé ;
|
|
<DT id="22"><B>system</B><DD>
|
|
le drapeau est placé ou modifié par un réglage système ;
|
|
<DT id="23"><B>user</B><DD>
|
|
le drapeau est placé ou modifié par une configuration spécifique à
|
|
l'utilisateur ;
|
|
<DT id="24"><B>env</B><DD>
|
|
le drapeau est placé ou modifié par une configuration spécifique dans
|
|
l'environnement.
|
|
</DL>
|
|
</DL>
|
|
|
|
<DT id="25"><B>--query</B><DD>
|
|
Affiche toute information utile pour expliquer le comportement du
|
|
programme : distributeur actuel, variables d'environnement, domaines des
|
|
fonctionnalités, état de tous les drapeaux de fonctionnalités. Affiche
|
|
également les drapeaux de compilation résultants ainsi que leur origine
|
|
(depuis dpkg 1.19.0).
|
|
<DT id="26"><DD>
|
|
Par exemple :
|
|
<PRE>
|
|
Vendor: Debian
|
|
Environment:
|
|
DEB_CFLAGS_SET=-O0 -Wall
|
|
|
|
Area: qa
|
|
Features:
|
|
bug=no
|
|
canary=no
|
|
|
|
Area: reproducible
|
|
Features:
|
|
timeless=no
|
|
|
|
Flag: CFLAGS
|
|
Value: -O0 -Wall
|
|
Origin: env
|
|
|
|
Flag: CPPFLAGS
|
|
Value: -D_FORTIFY_SOURCE=2
|
|
Origin: vendor
|
|
</PRE>
|
|
|
|
<DT id="27"><B>--query-features</B><I> domaine</I><DD>
|
|
Affiche les fonctionnalités activées pour un domaine donné (depuis
|
|
dpkg 1.16.2). Les seuls domaines reconnus actuellement sur Debian et ses
|
|
dérivés sont <B>future</B>, <B>qa</B>, <B>reproducible</B>, <B>sanitize</B> et <B>hardening</B>,
|
|
voir la section <B>ZONES D'OPTION</B> pour plus de détails. Retourne un code de
|
|
sortie <B>0</B> si le domaine est connu et <B>1</B> s'il est inconnu.
|
|
<DT id="28"><DD>
|
|
L'affichage est dans le format RFC822, avec une section par
|
|
fonctionnalité. Par exemple :
|
|
<DT id="29"><DD>
|
|
<PRE>
|
|
Feature: pie
|
|
Enabled: yes
|
|
|
|
Feature: stackprotector
|
|
Enabled: yes
|
|
</PRE>
|
|
|
|
<DT id="30"><B>--help</B><DD>
|
|
Affiche un message d'aide puis quitte.
|
|
<DT id="31"><B>--version</B><DD>
|
|
Affiche le numéro de version puis quitte.
|
|
</DL>
|
|
<A NAME="lbAF"> </A>
|
|
<H2>DRAPEAUX GÉRÉS</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="32"><B>CFLAGS</B><DD>
|
|
Options du compilateur C. La valeur par défaut définie par le distributeur
|
|
comporte <B>-g</B> et le niveau d'optimisation par défaut (<B>-O2</B> en général, ou
|
|
<B>-O0</B> si la variable d'environnement <B>DEB_BUILD_OPTIONS</B> contient
|
|
<I>noopt</I>).
|
|
<DT id="33"><B>CPPFLAGS</B><DD>
|
|
Options du préprocesseur C. Valeur par défaut : aucune.
|
|
<DT id="34"><B>CXXFLAGS</B><DD>
|
|
Options du compilateur C++. Analogue à <B>CFLAGS</B>.
|
|
<DT id="35"><B>OBJCFLAGS</B><DD>
|
|
Options du compilateur Objective C. Analogue à <B>CFLAGS</B>.
|
|
<DT id="36"><B>OBJCXXFLAGS</B><DD>
|
|
Options du compilateur Objective C++. Analogue à <B>CXXFLAGS</B>.
|
|
<DT id="37"><B>GCJFLAGS</B><DD>
|
|
Options du compilateur Java GNU (gcj). Un sous-ensemble de <B>CFLAGS</B>.
|
|
<DT id="38"><B>FFLAGS</B><DD>
|
|
Options du compilateur Fortran 77. Un sous-ensemble de <B>CFLAGS</B>.
|
|
<DT id="39"><B>FCFLAGS</B><DD>
|
|
Options du compilateur Fortran 9x. Analogue à <B>FFLAGS</B>.
|
|
<DT id="40"><B>LDFLAGS</B><DD>
|
|
Options passées au compilateur lors du processus de liaison des exécutables
|
|
ou des objets partagés (si le linker est appelé directement, alors <B>-Wl</B> et
|
|
<B>,</B> doivent être retirés de ces options). Valeur par défaut : aucune.
|
|
</DL>
|
|
<P>
|
|
|
|
De nouveaux drapeaux pourront être ajoutés si besoin est (par exemple pour
|
|
la prise en charge de nouveaux langages).
|
|
<A NAME="lbAG"> </A>
|
|
<H2>ZONES D'OPTION</H2>
|
|
|
|
<P>
|
|
|
|
Chaque option de zone peut être activée ou désactivée avec les valeurs
|
|
<B>DEB_BUILD_OPTIONS</B> et <B>DEB_BUIL_MAINT_OPTIONS</B> de l'espace de variables
|
|
d'environnement grâce aux modificateurs « <B>+</B> » et « <B>-</B> ». Par exemple,
|
|
pour activer l'option <B>hardening</B> « pie » et désactiver l'option
|
|
« fortify », il est possible d'indiquer cela dans <B>debian/rules</B> :
|
|
<P>
|
|
|
|
<BR> export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
|
|
<P>
|
|
|
|
L'option spéciale <B>all</B> (valable dans toutes les zones) peut être utilisée
|
|
pour activer ou désactiver toutes les options de la zone à la fois. Ainsi,
|
|
tout désactiver dans la zone <B>hardening</B> en n'activant que « format » et
|
|
« fortify » peut être réalisé avec :
|
|
<P>
|
|
|
|
<BR> export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
|
|
<A NAME="lbAH"> </A>
|
|
<H3>future</H3>
|
|
|
|
Plusieurs options de compilation (détaillées ci-dessous) peuvent être
|
|
utilisées pour activer des fonctionnalités qui devraient être activées par
|
|
défaut, mais ne peuvent pas l'être pour des raisons de compatibilité avec
|
|
les versions précédentes.
|
|
<DL COMPACT>
|
|
<DT id="41"><B>lfs</B><DD>
|
|
Ce paramètre (désactivé par défaut) active la prise en charge des gros
|
|
fichiers (LFS) sur les architectures 32 bits où l'ABI n'inclut pas LFS par
|
|
défaut, en ajoutant <B>-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64</B> à
|
|
<B>CPPFLAGS</B>.
|
|
</DL>
|
|
<A NAME="lbAI"> </A>
|
|
<H3>qa</H3>
|
|
|
|
Plusieurs options de compilation (détaillées ci-dessous) peuvent être
|
|
utilisées pour détecter des problèmes dans le code source ou dans le système
|
|
de construction.
|
|
<DL COMPACT>
|
|
<DT id="42"><B>bug</B><DD>
|
|
Ce paramètre (désactivé par défaut) ajoute toutes les options
|
|
d'avertissement détectant de façon fiable du code source problématique. Les
|
|
avertissements sont fatals. Les seuls drapeaux actuellement gérés sont
|
|
<B>CFLAGS</B> et <B>CXXFLAGS</B> avec des drapeaux définis à
|
|
<B>-Werror=array-bounds</B>, <B>-Werror=clobbered</B>,
|
|
<B>-Werror=implicit-function-declaration</B> et
|
|
<B>-Werror=volatile-register-var</B>.
|
|
<DT id="43"><B>canary</B><DD>
|
|
Ce paramètre (désactivé par défaut) ajoute des options détectrices
|
|
« canary » factices aux drapeaux de construction de telle sorte que les
|
|
rapports de compilation permettront de vérifier la façon dont ces drapeaux
|
|
se propagent et de repérer toute omission des paramètres de drapeaux
|
|
habituels. Les drapeaux actuellement pris en charge sont <B>CPPFLAGS</B>,
|
|
<B>CFLAGS</B>, <B>OBJCFLAGS</B>, <B>CXXFLAGS</B> ainsi que <B>OBJCXXFLAGS</B>, avec les
|
|
drapeaux définis à <B>-D__DEB_CANARY_</B><I>flag</I>_<I>random-id</I><B>__</B>, et
|
|
<B>LDFLAGS</B> paramétré à <B>-Wl,-z,deb-canary-</B><I>random-id</I>.
|
|
</DL>
|
|
<A NAME="lbAJ"> </A>
|
|
<H3>sanitize</H3>
|
|
|
|
Plusieurs options de compilation (détaillées ci-dessous) peuvent être
|
|
utilisées pour aider à nettoyer le binaire compilé face aux corruptions de
|
|
la mémoire, aux fuites de mémoire, à l'utilisation de mémoire après
|
|
libération et à des bogues au comportement indéfini. <B>Note</B> : ces options
|
|
ne devraient pas être utilisées pour des constructions en production car
|
|
elles peuvent réduire la fiabilité du code, réduire la sécurité ou même les
|
|
fonctionnalités.
|
|
<DL COMPACT>
|
|
<DT id="44"><B>address</B><DD>
|
|
Ce paramètre (désactivé par défaut) ajoute <B>-fsanitize=address</B> à
|
|
<B>LDFLAGS</B> et <B>-fsanitize=address -fno-omit-frame-pointer</B> à <B>CFLAGS</B> et
|
|
<B>CXXFLAGS</B>.
|
|
<DT id="45"><B>thread</B><DD>
|
|
Ce paramètre (désactivé par défaut) ajoute <B>-fsanitize=thread</B> à <B>CFLAGS</B>,
|
|
<B>CXXFLAGS</B> et <B>LDFLAGS</B>.
|
|
<DT id="46"><B>leak</B><DD>
|
|
Ce paramètre (désactivé par défaut) ajoute <B>-fsanitize=leak</B> à
|
|
<B>LDFLAGS</B>. Il est automatiquement désactivé si les fonctions <B>address</B> ou
|
|
<B>thread</B> sont activées, parce qu'elles l'impliquent.
|
|
<DT id="47"><B>undefined</B><DD>
|
|
Ce paramètre (désactivé par défaut) ajoute <B>-fsanitize=undefined</B> à
|
|
<B>CFLAGS</B>, <B>CXXFLAGS</B> et <B>LDFLAGS</B>.
|
|
</DL>
|
|
<A NAME="lbAK"> </A>
|
|
<H3>compilation renforcée</H3>
|
|
|
|
Plusieurs options de compilation (détaillées ci-dessous) peuvent être
|
|
utilisées pour accroître la résistance du binaire compilé face aux attaques
|
|
par corruption de la mémoire ou fournir des messages d'avertissement
|
|
supplémentaires lors de la compilation. Sauf mention contraire (voir
|
|
ci-dessous), ces options sont activées par défaut pour les architectures qui
|
|
les gèrent.
|
|
<DL COMPACT>
|
|
<DT id="48"><B>format</B><DD>
|
|
Ce réglage, activé par défaut, ajoute <B>-Wformat -Werror=format-security</B> à
|
|
<B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B> et <B>OBJCXXFLAGS</B>. Cela provoquera
|
|
l'avertissement en cas d'utilisation de chaînes de formatage incorrectes et
|
|
échouera si les fonctions de formatage sont utilisées d'une façon qui
|
|
présente des risques pour la sécurité. Actuellement, ce réglage crée des
|
|
avertissements pour les appels des fonctions <B>printf</B> et <B>scanf</B> lorsque
|
|
la chaîne de formatage n'est pas une chaîne littérale et qu'aucun paramètre
|
|
de formatage n'est utilisé (par exemple dans <B>printf(foo);</B> au lieu de <B>
|
|
printf("%s", foo);</B>. Ce type de syntaxe peut créer un problème de sécurité
|
|
si la chaîne de formatage vient d'une source non sûre et contient « %n ».
|
|
<DT id="49"><B>fortify</B><DD>
|
|
Ce réglage, activé par défaut, ajoute <B>-D_FORTIFY_SOURCE=2</B> à
|
|
<B>CPPFLAGS</B>. Lors de la création du code, le compilateur connaît un nombre
|
|
important d'informations relatives aux tailles de tampons (quand c'est
|
|
possible) et tente alors de remplacer des appels de fonctions avec une
|
|
taille illimitée de tampons, peu sûrs, par des appels avec des tampons de
|
|
taille limitée. Cette fonctionnalité est particulièrement utile pour du code
|
|
ancien et mal écrit. De plus, les chaînes de formatage dans la mémoire
|
|
accessible en écriture qui contiennent « %n » sont bloquées. Si une
|
|
application dépend de telles chaînes de formatage, un contournement devra
|
|
être mis en place.
|
|
<P>
|
|
Veuillez noter que pour que cette option fasse effet, la source devra aussi
|
|
être compilée avec <B>-O1</B> ou plus. Si la variable d'environnement
|
|
<B>DEB_BUILD_OPTIONS</B> contient <I>noopt</I>, la prise en charge de <B>fortify</B>
|
|
sera désactivée du fait des nouveaux avertissements émis par glibc
|
|
version 2.16 et ultérieure.
|
|
<DT id="50"><B>stackprotector</B><DD>
|
|
Ce réglage (activé par défaut si stackprotectorstrong n'est pas employé),
|
|
ajoute <B>-fstack-protector --param=ssp-buffer-size=4</B> à <B>CFLAGS</B>,
|
|
<B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et
|
|
<B>FCFLAGS</B>. Il ajoute des contrôles liés aux réécritures de piles. Cela
|
|
conduit des tentatives d'attaques par injection de code à terminer en
|
|
échec. Dans le meilleur des cas, cette protection transforme une
|
|
vulnérabilité d'injection de code en déni de service ou en non-problème
|
|
(selon les applications).
|
|
<P>
|
|
Cette fonctionnalité impose de lier le code à glibc (ou toute autre
|
|
bibliothèque fournissant <B>__stack_chk_fail</B>) et doit donc être désactivée
|
|
lorsque le code est construit avec <B>-nostdlib</B>, <B>-ffreestanding</B> ou
|
|
équivalents.
|
|
<DT id="51"><B>stackprotectorstrong</B><DD>
|
|
Ce réglage, activé par défaut, ajoute <B>-fstack-protector-strong</B> à
|
|
<B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B>
|
|
et <B>FCFLAGS</B>. Il s'agit d'une version renforcée de <B>stackprotector</B> qui
|
|
n'affecte pas les performances de manière importante.
|
|
<P>
|
|
Désactiver <B>stackprotector</B> désactive également ce paramètre.
|
|
<P>
|
|
Cette fonctionnalité a les même exigences que <B>stackprotector</B>, en plus de
|
|
nécessiter gcc 4.9 ou plus récent.
|
|
<DT id="52"><B>relro</B><DD>
|
|
Ce réglage, activé par défaut, ajoute <B>-Wl,-z,relro</B> à <B>LDFLAGS</B>. Lors du
|
|
chargement du programme, plusieurs parties de la mémoire ELF doivent être
|
|
écrites par l'éditeur de liens. Ce réglage indique au chargeur de mettre ces
|
|
sections en lecture seule avant de rendre le contrôle au
|
|
programme. L'utilisation habituelle de ce réglage est la protection contre
|
|
les attaques par réécriture GOT. Si cette option est désactivée, l'option
|
|
<B>bindnow</B> sera également désactivée.
|
|
<DT id="53"><B>bindnow</B><DD>
|
|
Ce réglage, désactivé par défaut, ajoute <B>-Wl,-z,now</B> à <B>LDFLAGS</B>. Lors du
|
|
chargement du programme, tous les symboles dynamiques sont résolus, ce qui
|
|
permet au PLT (Procedure Linkage Table) entier d'être en lecture seule (du
|
|
fait du réglage <B>relro</B> ci-dessus). Cette option ne peut être activée si
|
|
<B>relro</B> ne l'est pas.
|
|
<DT id="54"><B>pie</B><DD>
|
|
Ce réglage (sans option globale par défaut depuis dpkg 1.18.23, parce qu'il
|
|
est maintenant activé par défaut par gcc dans les architectures Debian
|
|
amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386,
|
|
mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc et
|
|
sparc64) ajoute les options requises pour activer ou désactiver PIE
|
|
(exécutable indépendant de l'emplacement) au moyen des fichiers de
|
|
spécifications de gcc, si nécessaire, selon que gcc injecte sur cette
|
|
architecture les drapeaux par lui-même ou non. Si le réglage est activé et
|
|
que gcc injecte les drapeaux, il n'ajoute rien. Si le réglage est activé et
|
|
que gcc n'injecte pas les drapeaux, il ajoute <B>-fPIE</B> (au moyen de
|
|
<I>/usr/share/dpkg/pie-compiler.specs</I>) à <B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>,
|
|
<B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B>, et <B>-fPIE -pie</B> (au
|
|
moyen de <I>/usr/share/dpkg/pie-link.specs</I>) à <B>LDFLAGS</B>. Si le réglage est
|
|
désactivé et que gcc injecte les drapeaux, il ajoute <B>-fno-PIE</B> (au moyen
|
|
de <I>/usr/share/dpkg/no-pie-compile.specs</I>) à <B>CFLAGS</B>, <B>CXXFLAGS</B>,
|
|
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B>, et
|
|
<B>-fno-PIE -no-pie</B> (au moyen de <I>/usr/share/dpkg/no-pie-link.specs</I>) à
|
|
<B>LDFLAGS</B>.
|
|
<P>
|
|
Les exécutables à position indépendante (« Position Independent
|
|
Executable ») permettent d'utiliser la randomisation de l'organisation de
|
|
l'espace d'adressage (ASLR : « Address Space Layout Randomization »), qui
|
|
est gérée par certaines versions du noyau. Bien que ASLR puisse déjà être
|
|
mise en œuvre pour les zones de données dans la pile et le tampon (brk et
|
|
mmap), les zones de codes doivent être compilées comme indépendantes de la
|
|
position. Les bibliothèques partagées font déjà cela (<B>-fPIC</B>) ce qui
|
|
permet automatiquement d'utiliser ASLR. Par contre les régions .text
|
|
binaires doivent être construites en mode PIE pour mettre en œuvre ASLR. Une
|
|
fois cela réalisé, les attaques ROP (« Return Oriented Programming »)
|
|
deviennent plus difficiles car il n'existe pas d'emplacement statique d'où
|
|
rebondir pendant une attaque par corruption de la mémoire.
|
|
<P>
|
|
PIE n'est pas compatible avec <B>fPIC</B>, aussi, en général, des précautions
|
|
doivent être prises lors de la construction d'objets partagés. Mais comme
|
|
les drapeaux PIE émis sont injectés par des fichiers de spécifications de
|
|
gcc, il devrait toujours être sûr de les définir sans condition
|
|
indépendamment du type d'objet en train d'être compilé ou lié.
|
|
<P>
|
|
Les bibliothèques statiques peuvent être utilisées par des programmes ou
|
|
d'autres bibliothèques partagées. Selon les drapeaux utilisés pour compiler
|
|
tous les objets d'une bibliothèque statique, ces bibliothèques seront
|
|
utilisables par divers ensembles d'objets :
|
|
<P>
|
|
<DL COMPACT><DT id="55"><DD>
|
|
<DL COMPACT>
|
|
<DT id="56"><B>none</B><DD>
|
|
Ne peut être lié ni à un programme PIE, ni à une bibliothèque partagée.
|
|
<DT id="57"><B>-fPIE</B><DD>
|
|
Peut être lié à tout programme, mais pas à une bibliothèque partagée
|
|
(recommandé).
|
|
<DT id="58"><B>-fPIC</B><DD>
|
|
Peut être lié à tout programme et toute bibliothèque partagée.
|
|
</DL>
|
|
</DL>
|
|
|
|
<P>
|
|
<DT id="59"><DD>
|
|
S'il est nécessaire de régler ces drapeaux manuellement, en contournant
|
|
l'injonction des spécifications de gcc, il y a plusieurs choses à prendre en
|
|
compte. Le passage sans condition et de façon explicite de <B>-fPIE</B>,
|
|
<B>-fpie</B> ou <B>-pie</B> à un système de construction en utilisant libtool est
|
|
sûr dans la mesure où ces drapeaux seront retirés lors de la construction de
|
|
bibliothèques partagées. Sinon, sur les projets qui construisent à la fois
|
|
des programmes et des bibliothèques partagées, il faudrait s'assurer que,
|
|
lors de la construction des bibliothèques partagées, <B>-fPIC</B> soit toujours
|
|
passé en dernier aux drapeaux de compilation tels que <B>CFLAGS</B> (de sorte
|
|
qu'il remplace tout <B>-PIE</B> antérieur), et que <B>-shared</B> soit passé en
|
|
dernier aux drapeaux de création de lien tels que <B>LDFLAGS</B> (de sorte qu'il
|
|
remplace tout <B>-pie</B> antérieur). <B>Note</B> : Cela ne devrait pas être
|
|
nécessaire avec les mécanismes de spécification de gcc par défaut.
|
|
<P>
|
|
<DT id="60"><DD>
|
|
De plus, comme la protection PIE est mise en œuvre à l'aide d'un registre
|
|
global, certaines architectures privées de registre (mais plus i386 depuis
|
|
les optimisations mises en œuvre dans gcc >= 5) peuvent souffrir de
|
|
pertes de performances allant jusqu'à 15 % sur des charges d'applications
|
|
utilisant largement les segments de texte ; le plus souvent, cette perte de
|
|
performances n'excédera pas 1 %. Pour des architectures offrant plus de
|
|
registres globaux (par exemple amd64), cette pénalisation n'existe
|
|
pratiquement pas.
|
|
</DL>
|
|
<A NAME="lbAL"> </A>
|
|
<H3>reproductible</H3>
|
|
|
|
Les options de compilation (détaillées ci-dessous) peuvent aider à améliorer
|
|
la reproductibilité de la construction ou fournir des messages
|
|
d'avertissement supplémentaires lors de la compilation. Sauf mention
|
|
contraire (voir ci-dessous), ces options sont activées par défaut pour les
|
|
architectures qui les gèrent.
|
|
<DL COMPACT>
|
|
<DT id="61"><B>timeless</B><DD>
|
|
Ce paramètre, activé par défaut, ajoute <B>-Wdate-time</B> à <B>CPPFLAGS</B>. Cela
|
|
provoquera des avertissements quand les macros <B>__TIME__</B>, <B>__DATE__</B> et
|
|
<B>__TIMESTAMP__</B> sont utilisées.
|
|
<DT id="62"><B>fixfilepath</B><DD>
|
|
Ce paramètre, désactivé par défaut, ajoute
|
|
<B>-ffile-prefix-map=</B><I>BUILDPATH</I><B>=.</B> à <B>CFLAGS</B>, <B>CXXFLAGS</B>,
|
|
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B> où
|
|
<B>BUILDPATH</B> est fixé sur le répertoire de plus haut niveau du paquet en
|
|
construction. Cela a pour effet de retirer le chemin de construction de tout
|
|
fichier généré.
|
|
<P>
|
|
Si à la fois <B>fixdebugpath</B> et <B>fixfilepath</B> sont définis, cette option a
|
|
la priorité parce c'est un sur-ensemble du premier.
|
|
<DT id="63"><B>fixdebugpath</B><DD>
|
|
Ce réglage, activé par défaut, ajoute
|
|
<B>-fdebug-prefix-map=</B><I>BUILDPATH</I><B>=.</B> à <B>CFLAGS</B>, <B>CXXFLAGS</B>,
|
|
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> et <B>FCFLAGS</B> où
|
|
<B>BUILDPATH</B> est fixé sur le répertoire de plus haut niveau du paquet en
|
|
construction. Cela a pour effet de retirer le chemin de construction de tous
|
|
les symboles de débogage générés.
|
|
</DL>
|
|
<A NAME="lbAM"> </A>
|
|
<H2>ENVIRONNEMENT</H2>
|
|
|
|
Deux jeux de variables d'environnement effectuent les mêmes opérations. Le
|
|
premier (DEB_<I>drapeau</I>_<I>opération</I>) ne devrait jamais être utilisé depuis
|
|
<B>debian/rules</B>. Il est destiné aux utilisateurs souhaitant recompiler le
|
|
paquet source avec des drapeaux de compilation modifiés. Le second
|
|
(DEB_<I>drapeau</I>_MAINT_<I>opération</I>) ne doit être utilisé que dans
|
|
<B>debian/rules</B> par les responsables de paquets pour modifier les drapeaux
|
|
de compilation concernés.
|
|
<DL COMPACT>
|
|
<DT id="64"><B>DEB_</B><I>drapeau</I><B>_SET</B><DD>
|
|
|
|
<B>DEB_</B><I>drapeau</I><B>_MAINT_SET</B>
|
|
Cette variable permet de forcer la valeur renvoyée pour le <I>drapeau</I>
|
|
indiqué.
|
|
<DT id="65"><B>DEB_</B><I>drapeau</I><B>_STRIP</B><DD>
|
|
|
|
<B>DEB_</B><I>drapeau</I><B>_MAINT_STRIP</B>
|
|
Cette variable peut être utilisée pour fournir une liste d'options (séparées
|
|
par des espaces) qui seront retirées du jeu de drapeaux renvoyé pour le
|
|
<I>drapeau</I> indiqué.
|
|
<DT id="66"><B>DEB_</B><I>drapeau</I><B>_APPEND</B><DD>
|
|
|
|
<B>DEB_</B><I>drapeau</I><B>_MAINT_APPEND</B>
|
|
Cette variable permet d'ajouter des options à la valeur renvoyée pour le
|
|
<I>drapeau</I> indiqué.
|
|
<DT id="67"><B>DEB_</B><I>drapeau</I><B>_PREPEND</B><DD>
|
|
|
|
<B>DEB_</B><I>drapeau</I><B>_MAINT_PREPEND</B>
|
|
Cette variable permet de préfixer la valeur renvoyée pour le <I>drapeau</I>
|
|
indiqué par des options supplémentaires.
|
|
<DT id="68"><B>DEB_BUILD_OPTIONS</B><DD>
|
|
|
|
<B>DEB_BUILD_MAINT_OPTIONS</B>
|
|
Ces variables peuvent être utilisées par un utilisateur ou un responsable de
|
|
paquet pour activer ou désactiver différentes options de zone qui affectent
|
|
les drapeaux de construction. La variable <B>DEB_BUILD_MAINT_OPTIONS</B>
|
|
outrepasse tous les paramètres de la zone d'options
|
|
<B>DEB_BUILD_OPTIONS</B>. Voir la section <B>ZONES D'OPTION</B> pour plus de
|
|
détails.
|
|
<DT id="69"><B>DEB_VENDOR</B><DD>
|
|
Ce réglage définit l'éditeur (« vendor ») actuel. Si cette valeur est vide,
|
|
le contenu du fichier <B>/etc/dpkg/origins/default</B> est utilisé.
|
|
<DT id="70"><B>DEB_BUILD_PATH</B><DD>
|
|
Cette variable configure le chemin de construction (depuis dpkg 1.18.8) à
|
|
utiliser avec des fonctions telles que <B>fixdebugpath</B> de telle sorte
|
|
qu'elles soient contrôlées par l'appelant. Cette variable est actuellement
|
|
spécifique à Debian et à ses dérivés.
|
|
<DT id="71"><B>DPKG_COLORS</B><DD>
|
|
Définit le mode de couleur (depuis dpkg 1.18.5). Les valeurs actuellement
|
|
acceptées sont <B>auto</B> (par défaut), <B>always</B> et <B>never</B>.
|
|
<DT id="72"><B>DPKG_NLS</B><DD>
|
|
Si cette variable est définie, elle sera utilisée pour décider l'activation
|
|
de la prise en charge des langues (NLS - Native Language Support), connu
|
|
aussi comme la gestion de l'internationalisation (ou i18n) (depuis
|
|
dpkg 1.19.0). Les valeurs permises sont : <B>0</B> et <B>1</B> (par défaut).
|
|
</DL>
|
|
<A NAME="lbAN"> </A>
|
|
<H2>FICHIERS</H2>
|
|
|
|
<A NAME="lbAO"> </A>
|
|
<H3>Fichiers de configuration.</H3>
|
|
|
|
<DL COMPACT>
|
|
<DT id="73"><B>/etc/dpkg/buildflags.conf</B><DD>
|
|
Fichier de configuration pour l'ensemble du système.
|
|
<DT id="74"><B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B> ou <DD>
|
|
|
|
<B>$HOME/.config/dpkg/buildflags.conf</B>
|
|
Fichier de configuration propre à l'utilisateur
|
|
</DL>
|
|
<A NAME="lbAP"> </A>
|
|
<H3>Gestion de l'empaquetage</H3>
|
|
|
|
<DL COMPACT>
|
|
<DT id="75"><B>/usr/share/dpkg/buildflags.mk</B><DD>
|
|
Fragment de fichier Makefile qui chargera (et facultativement exportera)
|
|
dans les variables (depuis dpkg 1.16.1) tous les drapeaux pris en charge par
|
|
<B>dpkg-buildflags</B>.
|
|
</DL>
|
|
<A NAME="lbAQ"> </A>
|
|
<H2>EXEMPLES</H2>
|
|
|
|
Pour passer des drapeaux de compilation à une commande de compilation dans
|
|
un Makefile :
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="76"><DD>
|
|
<PRE>
|
|
$(MAKE) $(shell dpkg-buildflags --export=cmdline)
|
|
|
|
./configure $(shell dpkg-buildflags --export=cmdline)
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Pour définir les drapeaux de compilation dans un script shell ou un fragment
|
|
de shell, on peut utiliser <B>eval</B> pour interpréter la sortie et exporter
|
|
les drapeaux dans l'environnement :
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="77"><DD>
|
|
<PRE>
|
|
eval "$(dpkg-buildflags --export=sh)" && make
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
ou définir les paramètres de position à passer à la commande :
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="78"><DD>
|
|
<PRE>
|
|
eval "set -- $(dpkg-buildflags --export=cmdline)"
|
|
for dir in a b c; do (cd $dir && ./configure "$@" && make); done
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<A NAME="lbAR"> </A>
|
|
<H3>Utilisation dans debian/rules</H3>
|
|
|
|
Il faut appeler <B>dpkg-buildflags</B> ou inclure <B>buildflags.mk</B> à partir du
|
|
fichier <B>debian/rules</B> pour obtenir les drapeaux de compilation nécessaires
|
|
à passer au système de construction. Veuillez noter que les anciennes
|
|
versions de <B>dpkg-buildpackage</B> (antérieures à dpkg 1.16.1) exportaient ces
|
|
drapeaux automatiquement. Néanmoins, il est déconseillé de dépendre de ce
|
|
comportement parce qu'il casse l'appel manuel de <B>debian/rules</B>.
|
|
<P>
|
|
|
|
Pour les paquets avec des systèmes de construction du style autoconf, il est
|
|
possible de passer les options appropriées à configure ou <B><A HREF="/cgi-bin/man/man2html?1+make">make</A></B>(1)
|
|
directement, comme vu ci-dessus.
|
|
<P>
|
|
|
|
Pour d'autres systèmes de construction ou si on souhaite un contrôle
|
|
extrêmement précis sur le choix et la position où sont passés les drapeaux,
|
|
<B>--get</B> peut être utilisé. Autrement, il est possible d'inclure
|
|
<B>buildflags.mk</B> qui s'occupe de l'appel de <B>dpkg-buildflags</B> et du
|
|
placement des drapeaux de compilation dans les variables de make.
|
|
<P>
|
|
|
|
Si vous voulez exporter tous les drapeaux de compilation dans
|
|
l'environnement (où le système de construction peut les récupérer) :
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="79"><DD>
|
|
<PRE>
|
|
DPKG_EXPORT_BUILDFLAGS = 1
|
|
include /usr/share/dpkg/buildflags.mk
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Pour un contrôle supplémentaire sur ce qui est exporté, vous pouvez exporter
|
|
manuellement les variables (puisque aucune n'est exportée par défaut) :
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="80"><DD>
|
|
<PRE>
|
|
include /usr/share/dpkg/buildflags.mk
|
|
export CPPFLAGS CFLAGS LDFLAGS
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Et enfin, vous pouvez bien sûr passer manuellement les drapeaux aux
|
|
commandes :
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="81"><DD>
|
|
<PRE>
|
|
include /usr/share/dpkg/buildflags.mk
|
|
build-arch:
|
|
$(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<A NAME="lbAS"> </A>
|
|
<H2>TRADUCTION</H2>
|
|
|
|
Ariel VARDI <<A HREF="mailto:ariel.vardi@freesbee.fr">ariel.vardi@freesbee.fr</A>>, 2002.
|
|
Philippe Batailler, 2006.
|
|
Nicolas François, 2006.
|
|
Veuillez signaler toute erreur à <<A HREF="mailto:debian-l10n-french@lists.debian.org">debian-l10n-french@lists.debian.org</A>>.
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="82"><A HREF="#lbAB">NOM</A><DD>
|
|
<DT id="83"><A HREF="#lbAC">SYNOPSIS</A><DD>
|
|
<DT id="84"><A HREF="#lbAD">DESCRIPTION</A><DD>
|
|
<DT id="85"><A HREF="#lbAE">COMMANDES</A><DD>
|
|
<DT id="86"><A HREF="#lbAF">DRAPEAUX GÉRÉS</A><DD>
|
|
<DT id="87"><A HREF="#lbAG">ZONES D'OPTION</A><DD>
|
|
<DL>
|
|
<DT id="88"><A HREF="#lbAH">future</A><DD>
|
|
<DT id="89"><A HREF="#lbAI">qa</A><DD>
|
|
<DT id="90"><A HREF="#lbAJ">sanitize</A><DD>
|
|
<DT id="91"><A HREF="#lbAK">compilation renforcée</A><DD>
|
|
<DT id="92"><A HREF="#lbAL">reproductible</A><DD>
|
|
</DL>
|
|
<DT id="93"><A HREF="#lbAM">ENVIRONNEMENT</A><DD>
|
|
<DT id="94"><A HREF="#lbAN">FICHIERS</A><DD>
|
|
<DL>
|
|
<DT id="95"><A HREF="#lbAO">Fichiers de configuration.</A><DD>
|
|
<DT id="96"><A HREF="#lbAP">Gestion de l'empaquetage</A><DD>
|
|
</DL>
|
|
<DT id="97"><A HREF="#lbAQ">EXEMPLES</A><DD>
|
|
<DL>
|
|
<DT id="98"><A HREF="#lbAR">Utilisation dans debian/rules</A><DD>
|
|
</DL>
|
|
<DT id="99"><A HREF="#lbAS">TRADUCTION</A><DD>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:05:01 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|