.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "dpkg-buildflags 1" .TH dpkg-buildflags 1 "2022-09-01" "1.20.12" "dpkg suite" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NOM" .IX Header "NOM" dpkg-buildflags \- Renvoie les options de compilation \(`a utiliser pour la construction du paquet .SH "SYNOPSIS" .IX Header "SYNOPSIS" \&\fBdpkg-buildflags\fR [\fIoption\fR...] [\fIcommande\fR] .SH "DESCRIPTION" .IX Header "DESCRIPTION" \&\fBdpkg-buildflags\fR est un script qui permet de r\('ecup\('erer les options de compilation \(`a utiliser pour la construction d'un paquet. .PP Les drapeaux par d\('efaut sont d\('efinis par le distributeur mais peuvent \(^etre \('etendus ou remplac\('es de plusieurs fa\(,cons : .IP "1." 4 pour tout le syst\(`eme avec \fB/etc/dpkg/buildflags.conf\fR ; .IP "2." 4 pour l'utilisateur courant avec \fB\f(CB$XDG_CONFIG_HOME\fB/dpkg/buildflags.conf\fR o\(`u la valeur par d\('efaut de \fB\f(CB$XDG_CONFIG_HOME\fB\fR est \fB\f(CB$HOME\fB/.config\fR ; .IP "3." 4 temporairement par l'utilisateur avec des variables d'environnement (voir \&\fB\s-1VARIABLES D\s0'\s-1ENVIRONNEMENT\s0) ;\fR .IP "4." 4 dynamiquement par le responsable du paquet avec des variables d'environnement \(`a l'aide de \fBdebian/rules\fR (voir \fB\s-1VARIABLES D\s0'\s-1ENVIRONNEMENT\s0\fR). .PP Les fichiers de configuration peuvent contenir quatre types de directives : .IP "\fB\s-1SET\s0\fR \fIdrapeau valeur\fR" 4 .IX Item "SET drapeau valeur" Remplace le drapeau \fIdrapeau\fR par la valeur \fIvaleur\fR. .IP "\fB\s-1STRIP\s0\fR \fIdrapeau valeur\fR" 4 .IX Item "STRIP drapeau valeur" Retire du drapeau \fIdrapeau\fR tous les drapeaux de construction list\('es dans \&\fIvaleur\fR. .IP "\fB\s-1APPEND\s0\fR \fIdrapeau valeur\fR" 4 .IX Item "APPEND drapeau valeur" \('Etend le drapeau \fIdrapeau\fR avec les options indiqu\('ees dans \fIvaleur\fR. Une espace est ajout\('ee au d\('ebut de ce qui est ajout\('e si la valeur actuelle du drapeau n'est pas vide. .IP "\fB\s-1PREPEND\s0\fR \fIdrapeau valeur\fR" 4 .IX Item "PREPEND drapeau valeur" Pr\('efixe le drapeau \fIdrapeau\fR avec les options indiqu\('ees dans \fIvaleur\fR. Une espace est ajout\('ee au d\('ebut de ce qui est ajout\('e si la valeur actuelle du drapeau n'est pas vide. .PP Les fichiers de configuration peuvent contenir des commentaires sur les lignes commen\(,cant par un di\(`ese (#). Les lignes vides sont \('egalement ignor\('ees. .SH "COMMANDES" .IX Header "COMMANDES" .IP "\fB\-\-dump\fR" 4 .IX Item "--dump" Affiche sur la sortie standard tous les drapeaux de compilation et leurs valeurs. Un drapeau par ligne est affich\('e, suivi de sa valeur, s\('epar\('ee par le caract\(`ere \(Fo \('egal \(Fc (\(Fo \fIdrapeau\fR=\fIvaleur\fR \(Fc). Il s'agit de l'action par d\('efaut. .IP "\fB\-\-list\fR" 4 .IX Item "--list" Affiche la liste des drapeaux g\('er\('es par le distributeur actuel (un par ligne). Voir la section \fB\s-1DRAPEAUX\s0 G\('ER\('ES\fR pour plus d'informations sur chacun d'eux. .IP "\fB\-\-status\fR" 4 .IX Item "--status" Affiche toute information utile pour expliquer le comportement de \&\fBdpkg-buildflags\fR (depuis dpkg 1.16.5) : variables d'environnement, distributeur actuel, \('etat de tous les drapeaux de fonctionnalit\('es. Affiche \('egalement les drapeaux de compilation r\('esultants ainsi que leur origine. .Sp Cette option est destin\('ee \(`a \(^etre utilis\('ee depuis \fBdebian/rules\fR, afin de garder dans le journal de construction une trace claire des drapeaux de compilation utilis\('es. Cela peut \(^etre utile pour diagnostiquer des probl\(`emes qui y seraient li\('es. .IP "\fB\-\-export=\fR\fIformat\fR" 4 .IX Item "--export=format" Affiche sur la sortie standard les commandes qui permettent d'exporter tous les drapeaux de compilation pour un outil particulier. Si \fIformat\fR n'est pas sp\('ecifi\('e, sa valeur est \fBsh\fR. Seuls les drapeaux de compilation commen\(,cant par une majuscule sont inclus, les autres \('etant suppos\('es inadapt\('es \(`a l'environnement. Formats pris en charge : .RS 4 .IP "\fBsh\fR" 4 .IX Item "sh" Commandes shell pour d\('efinir et exporter tous les drapeaux de compilation dans l'environnement. Les valeurs drapeau sont prot\('eg\('ees et ainsi la sortie est pr\(^ete \(`a \(^etre \('evalu\('ee par un shell. .IP "\fBcmdline\fR" 4 .IX Item "cmdline" Arguments \(`a passer \(`a 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\('eg\('ees dans la syntaxe du shell. .IP "\fBconfigure\fR" 4 .IX Item "configure" C'est un ancien alias pour \fBcmdline\fR. .IP "\fBmake\fR" 4 .IX Item "make" Directives de make pour d\('efinir et exporter tous les drapeaux de compilation dans l'environnement. La sortie peut \(^etre \('ecrite dans un fragment de Makefile et \('evalu\('ee en utilisant une directive \fBinclude\fR. .RE .RS 4 .RE .IP "\fB\-\-get\fR \fIdrapeau\fR" 4 .IX Item "--get drapeau" Affiche la valeur de ce drapeau sur la sortie standard. Retourne un code de sortie \fB0\fR si le drapeau est connu et \fB1\fR s'il est inconnu. .IP "\fB\-\-origin\fR \fIdrapeau\fR" 4 .IX Item "--origin drapeau" Affiche l'origine de la valeur renvoy\('ee par \fB\-\-get\fR. Retourne un code de sortie \fB0\fR si le drapeau est connu et \fB1\fR s'il est inconnu. L'origine est une des valeurs suivantes : .RS 4 .IP "\fBvendor\fR" 4 .IX Item "vendor" le drapeau d\('efini \(`a l'origine par le distributeur est renvoy\('e ; .IP "\fBsystem\fR" 4 .IX Item "system" le drapeau est plac\('e ou modifi\('e par un r\('eglage syst\(`eme ; .IP "\fBuser\fR" 4 .IX Item "user" le drapeau est plac\('e ou modifi\('e par une configuration sp\('ecifique \(`a l'utilisateur ; .IP "\fBenv\fR" 4 .IX Item "env" le drapeau est plac\('e ou modifi\('e par une configuration sp\('ecifique dans l'environnement. .RE .RS 4 .RE .IP "\fB\-\-query\fR" 4 .IX Item "--query" Affiche toute information utile pour expliquer le comportement du programme : distributeur actuel, variables d'environnement, domaines des fonctionnalit\('es, \('etat de tous les drapeaux de fonctionnalit\('es. Affiche \('egalement les drapeaux de compilation r\('esultants ainsi que leur origine (depuis dpkg 1.19.0). .Sp Par exemple : .Sp .Vb 3 \& 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 .Ve .IP "\fB\-\-query\-features\fR \fIdomaine\fR" 4 .IX Item "--query-features domaine" Affiche les fonctionnalit\('es activ\('ees pour un domaine donn\('e (depuis dpkg 1.16.2). Les seuls domaines reconnus actuellement sur Debian et ses d\('eriv\('es sont \fBfuture\fR, \fBqa\fR, \fBreproducible\fR, \fBsanitize\fR et \fBhardening\fR, voir la section \fB\s-1ZONES D\s0'\s-1OPTION\s0\fR pour plus de d\('etails. Retourne un code de sortie \fB0\fR si le domaine est connu et \fB1\fR s'il est inconnu. .Sp L'affichage est dans le format \s-1RFC822,\s0 avec une section par fonctionnalit\('e. Par exemple : .Sp .Vb 2 \& Feature: pie \& Enabled: yes \& \& Feature: stackprotector \& Enabled: yes .Ve .IP "\fB\-\-help\fR" 4 .IX Item "--help" Affiche un message d'aide puis quitte. .IP "\fB\-\-version\fR" 4 .IX Item "--version" Affiche le num\('ero de version puis quitte. .SH "DRAPEAUX G\('ER\('ES" .IX Header "DRAPEAUX G\('ER\('ES" .IP "\fB\s-1CFLAGS\s0\fR" 4 .IX Item "CFLAGS" Options du compilateur C. La valeur par d\('efaut d\('efinie par le distributeur comporte \fB\-g\fR et le niveau d'optimisation par d\('efaut (\fB\-O2\fR en g\('en\('eral, ou \&\fB\-O0\fR si la variable d'environnement \fB\s-1DEB_BUILD_OPTIONS\s0\fR contient \&\fInoopt\fR). .IP "\fB\s-1CPPFLAGS\s0\fR" 4 .IX Item "CPPFLAGS" Options du pr\('eprocesseur C. Valeur par d\('efaut : aucune. .IP "\fB\s-1CXXFLAGS\s0\fR" 4 .IX Item "CXXFLAGS" Options du compilateur \*(C+. Analogue \(`a \fB\s-1CFLAGS\s0\fR. .IP "\fB\s-1OBJCFLAGS\s0\fR" 4 .IX Item "OBJCFLAGS" Options du compilateur Objective C. Analogue \(`a \fB\s-1CFLAGS\s0\fR. .IP "\fB\s-1OBJCXXFLAGS\s0\fR" 4 .IX Item "OBJCXXFLAGS" Options du compilateur Objective \*(C+. Analogue \(`a \fB\s-1CXXFLAGS\s0\fR. .IP "\fB\s-1GCJFLAGS\s0\fR" 4 .IX Item "GCJFLAGS" Options du compilateur Java \s-1GNU\s0 (gcj). Un sous-ensemble de \fB\s-1CFLAGS\s0\fR. .IP "\fB\s-1DFLAGS\s0\fR" 4 .IX Item "DFLAGS" Options for the D compiler (ldc or gdc). Since dpkg 1.20.6. .IP "\fB\s-1FFLAGS\s0\fR" 4 .IX Item "FFLAGS" Options du compilateur Fortran 77. Un sous-ensemble de \fB\s-1CFLAGS\s0\fR. .IP "\fB\s-1FCFLAGS\s0\fR" 4 .IX Item "FCFLAGS" Options du compilateur Fortran 9x. Analogue \(`a \fB\s-1FFLAGS\s0\fR. .IP "\fB\s-1LDFLAGS\s0\fR" 4 .IX Item "LDFLAGS" Options pass\('ees au compilateur lors du processus de liaison des ex\('ecutables ou des objets partag\('es (si le linker est appel\('e directement, alors \fB\-Wl\fR et \&\fB,\fR doivent \(^etre retir\('es de ces options). Valeur par d\('efaut : aucune. .PP De nouveaux drapeaux pourront \(^etre ajout\('es si besoin est (par exemple pour la prise en charge de nouveaux langages). .SH "ZONES D'OPTION" .IX Header "ZONES D'OPTION" Chaque option de zone peut \(^etre activ\('ee ou d\('esactiv\('ee avec les valeurs \&\fB\s-1DEB_BUILD_OPTIONS\s0\fR et \fB\s-1DEB_BUIL_MAINT_OPTIONS\s0\fR de l'espace de variables d'environnement gr\(^ace aux modificateurs \(Fo \fB+\fR \(Fc et \(Fo \fB\-\fR \(Fc. Par exemple, pour activer l'option \fBhardening\fR \(Fo pie \(Fc et d\('esactiver l'option \(Fo fortify \(Fc, il est possible d'indiquer cela dans \fBdebian/rules\fR : .PP .Vb 1 \& export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify .Ve .PP L'option sp\('eciale \fBall\fR (valable dans toutes les zones) peut \(^etre utilis\('ee pour activer ou d\('esactiver toutes les options de la zone \(`a la fois. Ainsi, tout d\('esactiver dans la zone \fBhardening\fR en n'activant que \(Fo format \(Fc et \(Fo fortify \(Fc peut \(^etre r\('ealis\('e avec : .PP .Vb 1 \& export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify .Ve .SS "future" .IX Subsection "future" Plusieurs options de compilation (d\('etaill\('ees ci-dessous) peuvent \(^etre utilis\('ees pour activer des fonctionnalit\('es qui devraient \(^etre activ\('ees par d\('efaut, mais ne peuvent pas l'\(^etre pour des raisons de compatibilit\('e avec les versions pr\('ec\('edentes. .IP "\fBlfs\fR" 4 .IX Item "lfs" Ce param\(`etre (d\('esactiv\('e par d\('efaut) active la prise en charge des gros fichiers (\s-1LFS\s0) sur les architectures 32 bits o\(`u l'\s-1ABI\s0 n'inclut pas \s-1LFS\s0 par d\('efaut, en ajoutant \fB\-D_LARGEFILE_SOURCE \-D_FILE_OFFSET_BITS=64\fR \(`a \&\fB\s-1CPPFLAGS\s0\fR. .SS "qa" .IX Subsection "qa" Plusieurs options de compilation (d\('etaill\('ees ci-dessous) peuvent \(^etre utilis\('ees pour d\('etecter des probl\(`emes dans le code source ou dans le syst\(`eme de construction. .IP "\fBbug\fR" 4 .IX Item "bug" Ce param\(`etre (d\('esactiv\('e par d\('efaut) ajoute toutes les options d'avertissement d\('etectant de fa\(,con fiable du code source probl\('ematique. Les avertissements sont fatals. Les seuls drapeaux actuellement g\('er\('es sont \&\fB\s-1CFLAGS\s0\fR et \fB\s-1CXXFLAGS\s0\fR avec des drapeaux d\('efinis \(`a \&\fB\-Werror=array\-bounds\fR, \fB\-Werror=clobbered\fR, \&\fB\-Werror=implicit\-function\-declaration\fR et \&\fB\-Werror=volatile\-register\-var\fR. .IP "\fBcanary\fR" 4 .IX Item "canary" Ce param\(`etre (d\('esactiv\('e par d\('efaut) ajoute des options d\('etectrices \(Fo canary \(Fc factices aux drapeaux de construction de telle sorte que les rapports de compilation permettront de v\('erifier la fa\(,con dont ces drapeaux se propagent et de rep\('erer toute omission des param\(`etres de drapeaux habituels. Les drapeaux actuellement pris en charge sont \fB\s-1CPPFLAGS\s0\fR, \&\fB\s-1CFLAGS\s0\fR, \fB\s-1OBJCFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR ainsi que \fB\s-1OBJCXXFLAGS\s0\fR, avec les drapeaux d\('efinis \(`a \fB\-D_\|_DEB_CANARY_\fR\fIflag\fR_\fIrandom-id\fR\fB_\|_\fR, et \&\fB\s-1LDFLAGS\s0\fR param\('etr\('e \(`a \fB\-Wl,\-z,deb\-canary\-\fR\fIrandom-id\fR. .SS "sanitize" .IX Subsection "sanitize" Plusieurs options de compilation (d\('etaill\('ees ci-dessous) peuvent \(^etre utilis\('ees pour aider \(`a nettoyer le binaire compil\('e face aux corruptions de la m\('emoire, aux fuites de m\('emoire, \(`a l'utilisation de m\('emoire apr\(`es lib\('eration et \(`a des bogues au comportement ind\('efini. \fBNote\fR : ces options ne devraient pas \(^etre utilis\('ees pour des constructions en production car elles peuvent r\('eduire la fiabilit\('e du code, r\('eduire la s\('ecurit\('e ou m\(^eme les fonctionnalit\('es. .IP "\fBaddress\fR" 4 .IX Item "address" Ce param\(`etre (d\('esactiv\('e par d\('efaut) ajoute \fB\-fsanitize=address\fR \(`a \&\fB\s-1LDFLAGS\s0\fR et \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fR \(`a \fB\s-1CFLAGS\s0\fR et \&\fB\s-1CXXFLAGS\s0\fR. .IP "\fBthread\fR" 4 .IX Item "thread" Ce param\(`etre (d\('esactiv\('e par d\('efaut) ajoute \fB\-fsanitize=thread\fR \(`a \fB\s-1CFLAGS\s0\fR, \&\fB\s-1CXXFLAGS\s0\fR et \fB\s-1LDFLAGS\s0\fR. .IP "\fBleak\fR" 4 .IX Item "leak" Ce param\(`etre (d\('esactiv\('e par d\('efaut) ajoute \fB\-fsanitize=leak\fR \(`a \&\fB\s-1LDFLAGS\s0\fR. Il est automatiquement d\('esactiv\('e si les fonctions \fBaddress\fR ou \&\fBthread\fR sont activ\('ees, parce qu'elles l'impliquent. .IP "\fBundefined\fR" 4 .IX Item "undefined" Ce param\(`etre (d\('esactiv\('e par d\('efaut) ajoute \fB\-fsanitize=undefined\fR \(`a \&\fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR et \fB\s-1LDFLAGS\s0\fR. .SS "compilation renforc\('ee" .IX Subsection "compilation renforc\('ee" Plusieurs options de compilation (d\('etaill\('ees ci-dessous) peuvent \(^etre utilis\('ees pour accro\(^itre la r\('esistance du binaire compil\('e face aux attaques par corruption de la m\('emoire ou fournir des messages d'avertissement suppl\('ementaires lors de la compilation. Sauf mention contraire (voir ci-dessous), ces options sont activ\('ees par d\('efaut pour les architectures qui les g\(`erent. .IP "\fBformat\fR" 4 .IX Item "format" Ce r\('eglage, activ\('e par d\('efaut, ajoute \fB\-Wformat \-Werror=format\-security\fR \(`a \&\fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR, \fB\s-1OBJCFLAGS\s0\fR et \fB\s-1OBJCXXFLAGS\s0\fR. Cela provoquera l'avertissement en cas d'utilisation de cha\(^ines de formatage incorrectes et \('echouera si les fonctions de formatage sont utilis\('ees d'une fa\(,con qui pr\('esente des risques pour la s\('ecurit\('e. Actuellement, ce r\('eglage cr\('ee des avertissements pour les appels des fonctions \fBprintf\fR et \fBscanf\fR lorsque la cha\(^ine de formatage n'est pas une cha\(^ine litt\('erale et qu'aucun param\(`etre de formatage n'est utilis\('e (par exemple dans \fBprintf(foo);\fR au lieu de \&\fBprintf(\*(L"%s\*(R", foo);\fR. Ce type de syntaxe peut cr\('eer un probl\(`eme de s\('ecurit\('e si la cha\(^ine de formatage vient d'une source non s\(^ure et contient \(Fo \f(CW%n\fR \(Fc. .IP "\fBfortify\fR" 4 .IX Item "fortify" Ce r\('eglage, activ\('e par d\('efaut, ajoute \fB\-D_FORTIFY_SOURCE=2\fR \(`a \&\fB\s-1CPPFLAGS\s0\fR. Lors de la cr\('eation du code, le compilateur conna\(^it 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\('ee de tampons, peu s\(^urs, par des appels avec des tampons de taille limit\('ee. Cette fonctionnalit\('e est particuli\(`erement utile pour du code ancien et mal \('ecrit. De plus, les cha\(^ines de formatage dans la m\('emoire accessible en \('ecriture qui contiennent \(Fo \f(CW%n\fR \(Fc sont bloqu\('ees. Si une application d\('epend de telles cha\(^ines de formatage, un contournement devra \(^etre mis en place. .Sp Veuillez noter que pour que cette option fasse effet, le source devra aussi \(^etre compil\('ee avec \fB\-O1\fR ou plus. Si la variable d'environnement \&\fB\s-1DEB_BUILD_OPTIONS\s0\fR contient \fInoopt\fR, la prise en charge de \fBfortify\fR sera d\('esactiv\('ee du fait des nouveaux avertissements \('emis par la glibc version 2.16 et ult\('erieure. .IP "\fBstackprotector\fR" 4 .IX Item "stackprotector" Ce r\('eglage (activ\('e par d\('efaut si stackprotectorstrong n'est pas employ\('e), ajoute \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fR \(`a \fB\s-1CFLAGS\s0\fR, \&\fB\s-1CXXFLAGS\s0\fR, \fB\s-1OBJCFLAGS\s0\fR, \fB\s-1OBJCXXFLAGS\s0\fR, \fB\s-1GCJFLAGS\s0\fR, \fB\s-1FFLAGS\s0\fR et \&\fB\s-1FCFLAGS\s0\fR. Il ajoute des contr\(^oles li\('es aux r\('e\('ecritures de piles. Cela conduit des tentatives d'attaques par injection de code \(`a terminer en \('echec. Dans le meilleur des cas, cette protection transforme une vuln\('erabilit\('e d'injection de code en d\('eni de service ou en non\-probl\(`eme (selon les applications). .Sp Cette fonctionnalit\('e impose de lier le code \(`a la glibc (ou toute autre biblioth\(`eque fournissant \fB_\|_stack_chk_fail\fR) et doit donc \(^etre d\('esactiv\('ee lorsque le code est construit avec \fB\-nostdlib\fR, \fB\-ffreestanding\fR ou \('equivalents. .IP "\fBstackprotectorstrong\fR" 4 .IX Item "stackprotectorstrong" Ce r\('eglage, activ\('e par d\('efaut, ajoute \fB\-fstack\-protector\-strong\fR \(`a \&\fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR, \fB\s-1OBJCFLAGS\s0\fR, \fB\s-1OBJCXXFLAGS\s0\fR, \fB\s-1GCJFLAGS\s0\fR, \fB\s-1FFLAGS\s0\fR et \fB\s-1FCFLAGS\s0\fR. Il s'agit d'une version renforc\('ee de \fBstackprotector\fR qui n'affecte pas les performances de mani\(`ere importante. .Sp D\('esactiver \fBstackprotector\fR d\('esactive \('egalement ce param\(`etre. .Sp Cette fonctionnalit\('e a les m\(^eme exigences que \fBstackprotector\fR, en plus de n\('ecessiter gcc 4.9 ou plus r\('ecent. .IP "\fBrelro\fR" 4 .IX Item "relro" Ce r\('eglage, activ\('e par d\('efaut, ajoute \fB\-Wl,\-z,relro\fR \(`a \fB\s-1LDFLAGS\s0\fR. Lors du chargement du programme, plusieurs parties de la m\('emoire \s-1ELF\s0 doivent \(^etre \('ecrites par l'\('editeur de liens. Ce r\('eglage indique au chargeur de mettre ces sections en lecture seule avant de rendre le contr\(^ole au programme. L'utilisation habituelle de ce r\('eglage est la protection contre les attaques par r\('e\('ecriture \s-1GOT.\s0 Si cette option est d\('esactiv\('ee, l'option \&\fBbindnow\fR sera \('egalement d\('esactiv\('ee. .IP "\fBbindnow\fR" 4 .IX Item "bindnow" Ce r\('eglage, d\('esactiv\('e par d\('efaut, ajoute \fB\-Wl,\-z,now\fR \(`a \fB\s-1LDFLAGS\s0\fR. Lors du chargement du programme, tous les symboles dynamiques sont r\('esolus, ce qui permet au \s-1PLT\s0 (Procedure Linkage Table) entier d'\(^etre en lecture seule (du fait du r\('eglage \fBrelro\fR ci-dessus). Cette option ne peut \(^etre activ\('ee si \&\fBrelro\fR ne l'est pas. .IP "\fBpie\fR" 4 .IX Item "pie" Ce r\('eglage (sans option globale par d\('efaut depuis dpkg 1.18.23, parce qu'il est maintenant activ\('e par d\('efaut 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\('esactiver \s-1PIE\s0 (ex\('ecutable ind\('ependant de l'emplacement) au moyen des fichiers de sp\('ecifications de gcc, si n\('ecessaire, selon que gcc injecte sur cette architecture les drapeaux par lui\-m\(^eme ou non. Si le r\('eglage est activ\('e et que gcc injecte les drapeaux, il n'ajoute rien. Si le r\('eglage est activ\('e et que gcc n'injecte pas les drapeaux, il ajoute \fB\-fPIE\fR (au moyen de \&\fI/usr/share/dpkg/pie\-compiler.specs\fR) \(`a \fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR, \fB\s-1OBJCFLAGS\s0\fR, \&\fB\s-1OBJCXXFLAGS\s0\fR, \fB\s-1GCJFLAGS\s0\fR, \fB\s-1FFLAGS\s0\fR et \fB\s-1FCFLAGS\s0\fR, et \fB\-fPIE \-pie\fR (au moyen de \fI/usr/share/dpkg/pie\-link.specs\fR) \(`a \fB\s-1LDFLAGS\s0\fR. Si le r\('eglage est d\('esactiv\('e et que gcc injecte les drapeaux, il ajoute \fB\-fno\-PIE\fR (au moyen de \fI/usr/share/dpkg/no\-pie\-compile.specs\fR) \(`a \fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR, \&\fB\s-1OBJCFLAGS\s0\fR, \fB\s-1OBJCXXFLAGS\s0\fR, \fB\s-1GCJFLAGS\s0\fR, \fB\s-1FFLAGS\s0\fR et \fB\s-1FCFLAGS\s0\fR, et \&\fB\-fno\-PIE \-no\-pie\fR (au moyen de \fI/usr/share/dpkg/no\-pie\-link.specs\fR) \(`a \&\fB\s-1LDFLAGS\s0\fR. .Sp Les ex\('ecutables \(`a position ind\('ependante (\(Fo Position Independent Executable \(Fc) permettent d'utiliser la randomisation de l'organisation de l'espace d'adressage (\s-1ASLR :\s0 \(Fo Address Space Layout Randomization \(Fc), qui est g\('er\('ee par certaines versions du noyau. Bien que \s-1ASLR\s0 puisse d\('ej\(`a \(^etre mise en \(oeuvre pour les zones de donn\('ees dans la pile et le tampon (brk et mmap), les zones de codes doivent \(^etre compil\('ees comme ind\('ependantes de la position. Les biblioth\(`eques partag\('ees font d\('ej\(`a cela (\fB\-fPIC\fR) ce qui permet automatiquement d'utiliser \s-1ASLR.\s0 Par contre les r\('egions .text binaires doivent \(^etre construites en mode \s-1PIE\s0 pour mettre en \(oeuvre \s-1ASLR.\s0 Une fois cela r\('ealis\('e, les attaques \s-1ROP\s0 (\(Fo Return Oriented Programming \(Fc) deviennent plus difficiles car il n'existe pas d'emplacement statique d'o\(`u rebondir pendant une attaque par corruption de la m\('emoire. .Sp \&\s-1PIE\s0 n'est pas compatible avec \fBfPIC\fR, aussi, en g\('en\('eral, des pr\('ecautions doivent \(^etre prises lors de la construction d'objets partag\('es. Mais comme les drapeaux \s-1PIE\s0 \('emis sont inject\('es par des fichiers de sp\('ecifications de gcc, il devrait toujours \(^etre s\(^ur de les d\('efinir sans condition ind\('ependamment du type d'objet en train d'\(^etre compil\('e ou li\('e. .Sp Les biblioth\(`eques statiques peuvent \(^etre utilis\('ees par des programmes ou d'autres biblioth\(`eques partag\('ees. Selon les drapeaux utilis\('es pour compiler tous les objets d'une biblioth\(`eque statique, ces biblioth\(`eques seront utilisables par divers ensembles d'objets : .RS 4 .IP "\fBnone\fR" 4 .IX Item "none" Ne peut \(^etre li\('e ni \(`a un programme \s-1PIE,\s0 ni \(`a une biblioth\(`eque partag\('ee. .IP "\fB\-fPIE\fR" 4 .IX Item "-fPIE" Peut \(^etre li\('e \(`a tout programme, mais pas \(`a une biblioth\(`eque partag\('ee (recommand\('e). .IP "\fB\-fPIC\fR" 4 .IX Item "-fPIC" Peut \(^etre li\('e \(`a tout programme et toute biblioth\(`eque partag\('ee. .RE .RS 4 .Sp S'il est n\('ecessaire de r\('egler ces drapeaux manuellement, en contournant l'injonction des sp\('ecifications de gcc, il y a plusieurs choses \(`a prendre en compte. Le passage sans condition et de fa\(,con explicite de \fB\-fPIE\fR, \&\fB\-fpie\fR ou \fB\-pie\fR \(`a un syst\(`eme de construction en utilisant libtool est s\(^ur dans la mesure o\(`u ces drapeaux seront retir\('es lors de la construction de biblioth\(`eques partag\('ees. Sinon, sur les projets qui construisent \(`a la fois des programmes et des biblioth\(`eques partag\('ees, il faudrait s'assurer que, lors de la construction des biblioth\(`eques partag\('ees, \fB\-fPIC\fR soit toujours pass\('e en dernier aux drapeaux de compilation tels que \fB\s-1CFLAGS\s0\fR (de sorte qu'il remplace tout \fB\-PIE\fR ant\('erieur), et que \fB\-shared\fR soit pass\('e en dernier aux drapeaux de cr\('eation de lien tels que \fB\s-1LDFLAGS\s0\fR (de sorte qu'il remplace tout \fB\-pie\fR ant\('erieur). \fBNote\fR : Cela ne devrait pas \(^etre n\('ecessaire avec les m\('ecanismes de sp\('ecification de gcc par d\('efaut. .Sp De plus, comme la protection \s-1PIE\s0 est mise en \(oeuvre \(`a l'aide d'un registre global, certaines architectures priv\('ees de registre (mais plus i386 depuis les optimisations mises en \(oeuvre dans gcc >= 5) peuvent souffrir de pertes de performances allant jusqu'\(`a 15 % sur des charges d'applications utilisant largement les segments de texte ; le plus souvent, cette perte de performances n\(cqexc\('edera pas 1 %. Pour des architectures offrant plus de registres globaux (par exemple amd64), cette p\('enalisation n'existe pratiquement pas. .RE .SS "reproductible" .IX Subsection "reproductible" Les options de compilation (d\('etaill\('ees ci-dessous) peuvent aider \(`a am\('eliorer la reproductibilit\('e de la construction ou fournir des messages d'avertissement suppl\('ementaires lors de la compilation. Sauf mention contraire (voir ci-dessous), ces options sont activ\('ees par d\('efaut pour les architectures qui les g\(`erent. .IP "\fBtimeless\fR" 4 .IX Item "timeless" Ce param\(`etre, activ\('e par d\('efaut, ajoute \fB\-Wdate\-time\fR \(`a \fB\s-1CPPFLAGS\s0\fR. Cela provoquera des avertissements quand les macros \fB_\|_TIME_\|_\fR, \fB_\|_DATE_\|_\fR et \&\fB_\|_TIMESTAMP_\|_\fR sont utilis\('ees. .IP "\fBfixfilepath\fR" 4 .IX Item "fixfilepath" This setting (enabled by default) adds \&\fB\-ffile\-prefix\-map=\fR\fI\s-1BUILDPATH\s0\fR\fB=.\fR to \fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR, \&\fB\s-1OBJCFLAGS\s0\fR, \fB\s-1OBJCXXFLAGS\s0\fR, \fB\s-1GCJFLAGS\s0\fR, \fB\s-1FFLAGS\s0\fR and \fB\s-1FCFLAGS\s0\fR where \&\fB\s-1BUILDPATH\s0\fR is set to the top-level directory of the package being built. This has the effect of removing the build path from any generated file. .Sp Si \(`a la fois \fBfixdebugpath\fR et \fBfixfilepath\fR sont d\('efinis, cette option a la priorit\('e parce c'est un sur-ensemble du premier. .IP "\fBfixdebugpath\fR" 4 .IX Item "fixdebugpath" Ce r\('eglage, activ\('e par d\('efaut, ajoute \&\fB\-fdebug\-prefix\-map=\fR\fI\s-1BUILDPATH\s0\fR\fB=.\fR \(`a \fB\s-1CFLAGS\s0\fR, \fB\s-1CXXFLAGS\s0\fR, \&\fB\s-1OBJCFLAGS\s0\fR, \fB\s-1OBJCXXFLAGS\s0\fR, \fB\s-1GCJFLAGS\s0\fR, \fB\s-1FFLAGS\s0\fR et \fB\s-1FCFLAGS\s0\fR o\(`u \&\fB\s-1BUILDPATH\s0\fR est fix\('e sur le r\('epertoire de plus haut niveau du paquet en construction. Cela a pour effet de retirer le chemin de construction de tous les symboles de d\('ebogage g\('en\('er\('es. .SH "ENVIRONNEMENT" .IX Header "ENVIRONNEMENT" Deux jeux de variables d'environnement effectuent les m\(^emes op\('erations. Le premier (\s-1DEB_\s0\fIdrapeau\fR_\fIop\('eration\fR) ne devrait jamais \(^etre utilis\('e depuis \&\fBdebian/rules\fR. Il est destin\('e aux utilisateurs souhaitant recompiler le paquet source avec des drapeaux de compilation modifi\('es. Le second (\s-1DEB_\s0\fIdrapeau\fR_MAINT_\fIop\('eration\fR) ne doit \(^etre utilis\('e que dans \&\fBdebian/rules\fR par les responsables de paquets pour modifier les drapeaux de compilation concern\('es. .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_SET\fR" 4 .IX Item "DEB_drapeau_SET" .PD 0 .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_MAINT_SET\fR" 4 .IX Item "DEB_drapeau_MAINT_SET" .PD Cette variable permet de forcer la valeur renvoy\('ee pour le \fIdrapeau\fR indiqu\('e. .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_STRIP\fR" 4 .IX Item "DEB_drapeau_STRIP" .PD 0 .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_MAINT_STRIP\fR" 4 .IX Item "DEB_drapeau_MAINT_STRIP" .PD Cette variable peut \(^etre utilis\('ee pour fournir une liste d'options (s\('epar\('ees par des espaces) qui seront retir\('ees du jeu de drapeaux renvoy\('e pour le \&\fIdrapeau\fR indiqu\('e. .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_APPEND\fR" 4 .IX Item "DEB_drapeau_APPEND" .PD 0 .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_MAINT_APPEND\fR" 4 .IX Item "DEB_drapeau_MAINT_APPEND" .PD Cette variable permet d'ajouter des options \(`a la valeur renvoy\('ee pour le \&\fIdrapeau\fR indiqu\('e. .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_PREPEND\fR" 4 .IX Item "DEB_drapeau_PREPEND" .PD 0 .IP "\fB\s-1DEB_\s0\fR\fIdrapeau\fR\fB_MAINT_PREPEND\fR" 4 .IX Item "DEB_drapeau_MAINT_PREPEND" .PD Cette variable permet de pr\('efixer la valeur renvoy\('ee pour le \fIdrapeau\fR indiqu\('e par des options suppl\('ementaires. .IP "\fB\s-1DEB_BUILD_OPTIONS\s0\fR" 4 .IX Item "DEB_BUILD_OPTIONS" .PD 0 .IP "\fB\s-1DEB_BUILD_MAINT_OPTIONS\s0\fR" 4 .IX Item "DEB_BUILD_MAINT_OPTIONS" .PD Ces variables peuvent \(^etre utilis\('ees par un utilisateur ou un responsable de paquet pour activer ou d\('esactiver diff\('erentes options de zone qui affectent les drapeaux de construction. La variable \fB\s-1DEB_BUILD_MAINT_OPTIONS\s0\fR outrepasse tous les param\(`etres de la zone d'options \&\fB\s-1DEB_BUILD_OPTIONS\s0\fR. Voir la section \fB\s-1ZONES D\s0'\s-1OPTION\s0\fR pour plus de d\('etails. .IP "\fB\s-1DEB_VENDOR\s0\fR" 4 .IX Item "DEB_VENDOR" Ce r\('eglage d\('efinit l'\('editeur (\(Fo vendor \(Fc) actuel. Si cette valeur est vide, le contenu du fichier \fB/etc/dpkg/origins/default\fR est utilis\('e. .IP "\fB\s-1DEB_BUILD_PATH\s0\fR" 4 .IX Item "DEB_BUILD_PATH" Cette variable configure le chemin de construction (depuis dpkg 1.18.8) \(`a utiliser avec des fonctions telles que \fBfixdebugpath\fR de telle sorte qu'elles soient contr\(^ol\('ees par l'appelant. Cette variable est actuellement sp\('ecifique \(`a Debian et \(`a ses d\('eriv\('es. .IP "\fB\s-1DPKG_COLORS\s0\fR" 4 .IX Item "DPKG_COLORS" D\('efinit le mode de couleur (depuis dpkg 1.18.5). Les valeurs actuellement accept\('ees sont \fBauto\fR (par d\('efaut), \fBalways\fR et \fBnever\fR. .IP "\fB\s-1DPKG_NLS\s0\fR" 4 .IX Item "DPKG_NLS" Si cette variable est d\('efinie, elle sera utilis\('ee pour d\('ecider l'activation de la prise en charge des langues (\s-1NLS\s0 \(en Native Language Support), connu aussi comme la gestion de l'internationalisation (ou i18n) (depuis dpkg 1.19.0). Les valeurs permises sont : \fB0\fR et \fB1\fR (par d\('efaut). .SH "FICHIERS" .IX Header "FICHIERS" .SS "Fichiers de configuration." .IX Subsection "Fichiers de configuration." .IP "\fB/etc/dpkg/buildflags.conf\fR" 4 .IX Item "/etc/dpkg/buildflags.conf" Fichier de configuration pour l'ensemble du syst\(`eme. .IP "\fB\f(CB$XDG_CONFIG_HOME\fB/dpkg/buildflags.conf\fR or" 4 .IX Item "$XDG_CONFIG_HOME/dpkg/buildflags.conf or" .PD 0 .IP "\fB\f(CB$HOME\fB/.config/dpkg/buildflags.conf\fR" 4 .IX Item "$HOME/.config/dpkg/buildflags.conf" .PD Fichier de configuration propre \(`a l'utilisateur .SS "Gestion de l'empaquetage" .IX Subsection "Gestion de l'empaquetage" .IP "\fB/usr/share/dpkg/buildflags.mk\fR" 4 .IX Item "/usr/share/dpkg/buildflags.mk" Fragment de fichier Makefile qui chargera (et facultativement exportera) dans les variables (depuis dpkg 1.16.1) tous les drapeaux pris en charge par \&\fBdpkg-buildflags\fR. .SH "EXEMPLES" .IX Header "EXEMPLES" Pour passer des drapeaux de compilation \(`a une commande de compilation dans un Makefile : .Sp .Vb 1 \& $(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline) \& \& ./configure $(shell dpkg\-buildflags \-\-export=cmdline) .Ve .PP Pour d\('efinir les drapeaux de compilation dans un script shell ou un fragment de shell, on peut utiliser \fBeval\fR pour interpr\('eter la sortie et exporter les drapeaux dans l'environnement : .Sp .Vb 1 \& eval "$(dpkg\-buildflags \-\-export=sh)" && make .Ve .PP ou d\('efinir les param\(`etres de position \(`a passer \(`a la commande : .Sp .Vb 2 \& eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)" \& for dir in a b c; do (cd $dir && ./configure "$@" && make); done .Ve .SS "Utilisation dans debian/rules" .IX Subsection "Utilisation dans debian/rules" Il faut appeler \fBdpkg-buildflags\fR ou inclure \fBbuildflags.mk\fR \(`a partir du fichier \fBdebian/rules\fR pour obtenir les drapeaux de compilation n\('ecessaires \(`a passer au syst\(`eme de construction. Veuillez noter que les anciennes versions de \fBdpkg-buildpackage\fR (ant\('erieures \(`a dpkg 1.16.1) exportaient ces drapeaux automatiquement. N\('eanmoins, il est d\('econseill\('e de d\('ependre de ce comportement parce qu'il casse l'appel manuel de \fBdebian/rules\fR. .PP Pour les paquets avec des syst\(`emes de construction du style autoconf, il est possible de passer les options appropri\('ees \(`a configure ou \fBmake\fR(1) directement, comme vu ci-dessus. .PP Pour d'autres syst\(`emes de construction ou si on souhaite un contr\(^ole extr\(^emement pr\('ecis sur le choix et la position o\(`u sont pass\('es les drapeaux, \&\fB\-\-get\fR peut \(^etre utilis\('e. Autrement, il est possible d'inclure \&\fBbuildflags.mk\fR qui s'occupe de l'appel de \fBdpkg-buildflags\fR et du placement des drapeaux de compilation dans les variables de make. .PP Si vous voulez exporter tous les drapeaux de compilation dans l'environnement (o\(`u le syst\(`eme de construction peut les r\('ecup\('erer) : .Sp .Vb 2 \& DPKG_EXPORT_BUILDFLAGS = 1 \& include /usr/share/dpkg/buildflags.mk .Ve .PP Pour un contr\(^ole suppl\('ementaire sur ce qui est export\('e, vous pouvez exporter manuellement les variables (puisque aucune n'est export\('ee par d\('efaut) : .Sp .Vb 2 \& include /usr/share/dpkg/buildflags.mk \& export CPPFLAGS CFLAGS LDFLAGS .Ve .PP Et enfin, vous pouvez bien s\(^ur passer manuellement les drapeaux aux commandes : .Sp .Vb 3 \& include /usr/share/dpkg/buildflags.mk \& build\-arch: \& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) .Ve .SH "TRADUCTION" .IX Header "TRADUCTION" Ariel \s-1VARDI\s0 , 2002. Philippe Batailler, 2006. Nicolas Fran\(,cois, 2006. Veuillez signaler toute erreur \(`a .