716 lines
31 KiB
HTML
716 lines
31 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: dpkg-suite (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>NAAM</H2>
|
|
|
|
dpkg-buildflags - geeft de bij pakketbouw te gebruiken bouwvlaggen terug
|
|
<A NAME="lbAC"> </A>
|
|
<H2>OVERZICHT</H2>
|
|
|
|
<B>dpkg-buildflags</B> [<I>optie</I>...] [<I>commando</I>]
|
|
<A NAME="lbAD"> </A>
|
|
<H2>BESCHRIJVING</H2>
|
|
|
|
<B>dpkg-buildflags</B> is gereedschap om de compilatievlaggen op te halen die
|
|
tijdens het bouwen van Debian pakketten gebruikt moeten worden.
|
|
De standaardvlaggen worden gedefinieerd door de leverancier, maar ze kunnen
|
|
op verschillende manieren uitgebreid/vervangen worden:
|
|
<DL COMPACT>
|
|
<DT id="1">1.<DD>
|
|
voor het hele systeem met <B>/etc/dpkg/buildflags.conf</B>;
|
|
<DT id="2">2.<DD>
|
|
voor de huidige gebruiker met <B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B>,
|
|
waarbij <B>$XDG_CONFIG_HOME</B> als standaardwaarde <B>$HOME/.config</B> heeft;
|
|
<DT id="3">3.<DD>
|
|
tijdelijk door de gebruiker met omgevingsvariabelen (zie het onderdeel
|
|
<B>OMGEVING</B>);
|
|
<DT id="4">4.<DD>
|
|
dynamisch door de pakketonderhouder met omgevingsvariabelen die ingesteld
|
|
worden via <B>debian/rules</B> (zie het onderdeel <B>OMGEVING</B>).
|
|
</DL>
|
|
<P>
|
|
|
|
De configuratiebestanden kunnen vier types opdrachten bevatten:
|
|
<DL COMPACT>
|
|
<DT id="5"><B>SET</B><I> vlag waarde</I><DD>
|
|
Vervang de waarde van de vlag die <I>vlag</I> als naam heeft in waarde
|
|
<I>waarde</I>.
|
|
<DT id="6"><B>STRIP</B><I> vlag waarde</I><DD>
|
|
Verwijder van de vlag die <I>vlag</I> als naam heeft alle bouwvlaggen die in
|
|
<I>waarde</I> opgesomd worden.
|
|
<DT id="7"><B>APPEND</B><I> vlag waarde</I><DD>
|
|
Breid de vlag die <I>vlag</I> als naam heeft uit door er de opties aan toe te
|
|
voegen die in <I>waarde</I> opgegeven worden. Er wordt een spatie geplaatst voor
|
|
de waarde die toegevoegd wordt, indien de huidige waarde van de vlag niet
|
|
leeg is.
|
|
<DT id="8"><B>PREPEND</B><I> vlag waarde</I><DD>
|
|
Breid de vlag die <I>vlag</I> als naam heeft uit door er vooraan de opties aan
|
|
toe te voegen die in <I>waarde</I> opgegeven worden. Er wordt een spatie
|
|
geplaatst achter de waarde die toegevoegd wordt, indien de huidige waarde
|
|
van de vlag niet leeg is.
|
|
</DL>
|
|
<P>
|
|
|
|
De configuratiebestanden kunnen commentaar bevatten op regels die beginnen
|
|
met een hekje (#). Ook lege regels worden genegeerd.
|
|
<A NAME="lbAE"> </A>
|
|
<H2>COMMANDO'S</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="9"><B>--dump</B><DD>
|
|
Laat op standaarduitvoer alle compilatievlaggen en hun waarden zien. Dit
|
|
geeft per regel één vlag en de waarde ervan weer met daartussenin een
|
|
gelijkheidsteken ("<I>vlag</I>=<I>waarde</I>"). Dit is de standaardactie.
|
|
<DT id="10"><B>--list</B><DD>
|
|
Geeft een lijst weer van vlaggen die door de huidige leverancier ondersteund
|
|
wordt (één per regel). Zie het onderdeel <B>SUPPORTED FLAGS</B> (ondersteunde
|
|
vlaggen) voor meer informatie daarover.
|
|
<DT id="11"><B>--status</B><DD>
|
|
Laat eventuele informatie zien die nuttig kan zijn om het gedrag te
|
|
verklaren van <B>dpkg-buildflags</B> (sinds dpkg 1.16.5): relevante
|
|
omgevingsvariabelen, huidige leverancier, toestand van alle
|
|
functievlaggen. Geef ook de resulterende compileervlaggen met hun oorsprong
|
|
weer.
|
|
<P>
|
|
Het is de bedoeling dat dit uitgevoerd wordt vanuit <B>debian/rules</B>, zodat
|
|
de bouwlog een duidelijk spoor van de gebruikte vlaggen kan bijhouden. Dit
|
|
kan nuttig zijn om ermee verband houdende problemen te diagnosticeren.
|
|
<DT id="12"><B>--export=</B><I>indeling</I><DD>
|
|
Geef op standaarduitvoer commando's weer die gebruikt kunnen worden om alle
|
|
compilatievlaggen te exporteren ten behoeve van een specifiek
|
|
gereedschap. Indien de waarde <I>indeling</I> niet opgegeven werd, wordt <B>sh</B>
|
|
verondersteld. Enkel compilatievlaggen die met een hoofdletter beginnen
|
|
worden opgenomen. Van de andere wordt aangenomen dat ze niet bruikbaar zijn
|
|
voor de omgeving. Ondersteunde indelingen:
|
|
<DL COMPACT><DT id="13"><DD>
|
|
<DL COMPACT>
|
|
<DT id="14"><B>sh</B><DD>
|
|
Shell-opdrachten om alle compilatievlaggen in de omgeving in te stellen en
|
|
te exporteren. Er worden aanhalingstekens geplaatst rond de vlagwaarden
|
|
waardoor de uitvoer gereed is om door een shell geëvalueerd te worden.
|
|
<DT id="15"><B>cmdline</B><DD>
|
|
Argumenten om door te geven aan de commandoregel van een bouwprogramma om al
|
|
de compilatievlaggen te gebruiken (sinds dpkg 1.17.0). De vlagwaarden worden
|
|
volgens de shell-syntaxis tussen haakjes geplaatst.
|
|
<DT id="16"><B>configure</B><DD>
|
|
Dit is een verouderde alias voor <B>cmdline</B>.
|
|
<DT id="17"><B>make</B><DD>
|
|
Make-opdrachten om alle compilatievlaggen in de omgeving in te stellen en te
|
|
exporteren. De uitvoer kan naar een Makefile-fragment geschreven worden en
|
|
geëvalueerd met behulp van een <B>include</B>-opdracht.
|
|
</DL>
|
|
</DL>
|
|
|
|
<DT id="18"><B>--get</B><I> vlag</I><DD>
|
|
Geef de waarde van de vlag weer op de standaarduitvoer. Sluit af met 0 bij
|
|
een gekende vlag en sluit anders af met 1.
|
|
<DT id="19"><B>--origin</B><I> vlag</I><DD>
|
|
Geef de origine weer van de waarde die teruggegeven wordt door
|
|
<B>--get</B>. Sluit af met 0 bij een gekende vlag en sluit anders af met 1. De
|
|
origine kan één van de volgende waarden hebben:
|
|
<DL COMPACT><DT id="20"><DD>
|
|
<DL COMPACT>
|
|
<DT id="21"><B>vendor</B><DD>
|
|
de originele vlag die door de leverancier ingesteld werd, wordt
|
|
teruggegeven;
|
|
<DT id="22"><B>system</B><DD>
|
|
de vlag werd ingesteld/gewijzigd door een systeemconfiguratie;
|
|
<DT id="23"><B>user</B><DD>
|
|
de vlag werd ingesteld/gewijzigd door een gebruikersspecifieke configuratie;
|
|
<DT id="24"><B>env</B><DD>
|
|
de vlag werd ingesteld/gewijzigd door een omgevingsspecifieke configuratie.
|
|
</DL>
|
|
</DL>
|
|
|
|
<DT id="25"><B>--query</B><DD>
|
|
Laat alle informatie zien die nuttig kan zijn om het gedrag van het
|
|
programma te verklaren: huidige leverancier, relevante omgevingsvariabelen,
|
|
functiegebieden, toestand van alle functievlaggen en de compileervlaggen met
|
|
hun oorsprong (sinds dpkg 1.19.0).
|
|
<DT id="26"><DD>
|
|
Bijvoorbeeld:
|
|
<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> gebied</I><DD>
|
|
Geef de functies weer die voor een opgegeven gebied geactiveerd zijn (sinds
|
|
dpkg 1.16.2). Momenteel worden door Debian en zijn derivaten enkel de
|
|
gebieden <B>future</B>, <B>qa</B>, <B>reproducible</B>, <B>sanitize</B> en <B>hardening</B>
|
|
herkend. Zie het onderdeel <B>FUNCTIEGEBIEDEN</B> voor meer details. Sluit af
|
|
met 0 als het gebied gekend is, anders met 1.
|
|
<DT id="28"><DD>
|
|
De uitvoer is in RFC822-indeling met één sectie per functie. Bijvoorbeeld:
|
|
<DT id="29"><DD>
|
|
<PRE>
|
|
Feature: pie
|
|
Enabled: yes
|
|
|
|
Feature: stackprotector
|
|
Enabled: yes
|
|
</PRE>
|
|
|
|
<DT id="30"><B>--help</B><DD>
|
|
Toon info over het gebruik en sluit af.
|
|
<DT id="31"><B>--version</B><DD>
|
|
Toon de versie en sluit af.
|
|
</DL>
|
|
<A NAME="lbAF"> </A>
|
|
<H2>ONDERSTEUNDE VLAGGEN</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="32"><B>CFLAGS</B><DD>
|
|
Opties voor de C-compiler. De door de leverancier ingestelde standaardwaarde
|
|
bestaat uit <B>-g</B> en het standaardniveau van optimalisatie (gewoonlijk
|
|
<B>-O2</B>, of <B>-O0</B> indien de omgevingsvariabele <B>DEB_BUILD_OPTIONS</B> <I>noopt</I>
|
|
aangeeft).
|
|
<DT id="33"><B>CPPFLAGS</B><DD>
|
|
Opties voor de C-preprocessor. Standaardwaarde: leeg.
|
|
<DT id="34"><B>CXXFLAGS</B><DD>
|
|
Opties voor de C++ compiler. Hetzelfde als <B>CFLAGS</B>.
|
|
<DT id="35"><B>OBJCFLAGS</B><DD>
|
|
Opties voor de Objective C compiler. Hetzelfde als <B>CFLAGS</B>.
|
|
<DT id="36"><B>OBJCXXFLAGS</B><DD>
|
|
Opties voor de Objective C++ compiler. Hetzelfde als <B>CXXFLAGS</B>.
|
|
<DT id="37"><B>GCJFLAGS</B><DD>
|
|
Opties voor de GNU Java compiler (gcj). Een subset van <B>CFLAGS</B>.
|
|
<DT id="38"><B>FFLAGS</B><DD>
|
|
Opties voor de Fortran 77 compiler. Een subset van <B>CFLAGS</B>.
|
|
<DT id="39"><B>FCFLAGS</B><DD>
|
|
Opties voor de Fortran 9x compiler. Hetzelfde als <B>FFLAGS</B>.
|
|
<DT id="40"><B>LDFLAGS</B><DD>
|
|
Opties die aan de compiler doorgegeven worden bij het linken van uitvoerbare
|
|
programma's en gedeelde objecten (indien de linker rechtstreeks aangeroepen
|
|
wordt, dan moeten <B>-Wl</B> en <B>,</B> van die opties verwijderd
|
|
worden). Standaardwaarde: leeg.
|
|
</DL>
|
|
<P>
|
|
|
|
In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte
|
|
aan ontstaat (bijvoorbeeld om andere talen te ondersteunen).
|
|
<A NAME="lbAG"> </A>
|
|
<H2>FUNCTIEGEBIEDEN</H2>
|
|
|
|
<P>
|
|
|
|
Elke gebiedsfunctie kan in de gebiedswaarde van de omgevingsvariabelen
|
|
<B>DEB_BUILD_OPTIONS</B> en <B>DEB_BUILD_MAINT_OPTIONS</B> ingeschakeld en
|
|
uitgeschakeld worden met de schakelaars '<B>+</B>' en '<B>-</B>'. Om bijvoorbeeld de
|
|
<B>hardening</B>-functionaliteit "pie" te activeren en de functionaliteit
|
|
"fortify" uit te schakelen, kunt u in <B>debian/rules</B> het volgende doen:
|
|
<P>
|
|
|
|
<BR> export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
|
|
<P>
|
|
|
|
De bijzondere functie <B>all</B> (geldig in elk gebied) kan gebruikt worden om
|
|
gelijktijdig alle gebiedsfunctionaliteit te activeren of uit te
|
|
schakelen. Alles uitschakelen in het gebied <B>hardening</B> en enkel "format"
|
|
en "fortify" activeren kunt u dus doen met:
|
|
<P>
|
|
|
|
<BR> export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
|
|
<A NAME="lbAH"> </A>
|
|
<H3>future</H3>
|
|
|
|
Er kunnen verschillende compilatieopties (die hierna beschreven worden)
|
|
gebruikt worden om functies te activeren die standaard geactiveerd zouden
|
|
moeten zijn, maar dat niet zijn om redenen van terugwaartse compatibiliteit.
|
|
<DL COMPACT>
|
|
<DT id="41"><B>lfs</B><DD>
|
|
Deze instelling (standaard uitgezet) activeert ondersteuning voor grote
|
|
bestanden (Large File Support) op 32-bits architecturen waarvan de ABI
|
|
standaard geen LFS-ondersteuning biedt, door <B>-D_LARGEFILE_SOURCE
|
|
-D_FILE_OFFSET_BITS=64</B> toe te voegen aan <B>CPPFLAGS</B>.
|
|
</DL>
|
|
<A NAME="lbAI"> </A>
|
|
<H3>qa (kwaliteitsbevordering)</H3>
|
|
|
|
Er kunnen verschillende compilatieopties (die hierna beschreven worden)
|
|
gebruikt worden om problemen in de broncode of het bouwsysteem te helpen
|
|
detecteren.
|
|
<DL COMPACT>
|
|
<DT id="42"><B>bug</B><DD>
|
|
Deze instelling (die standaard uitgeschakeld is) voegt alle
|
|
waarschuwingsopties toe die op een betrouwbare wijze problematische broncode
|
|
opsporen. De waarschuwingen zijn fataal. De enige vlaggen die momenteel
|
|
ondersteund worden zijn <B>CFLAGS</B> en <B>CXXFLAGS</B> waarbij de vlaggen
|
|
ingesteld staan op <B>-Werror=array-bounds</B>, <B>-Werror=clobbered</B>,
|
|
<B>-Werror=implicit-function-declaration</B> en
|
|
<B>-Werror=volatile-register-var</B>.
|
|
<DT id="43"><B>canary</B><DD>
|
|
Deze instelling (die standaard uitgeschakeld is) voegt loze
|
|
kanarievogelopties toe aan de bouwvlaggen, zodat in de bouwlogs nagekeken
|
|
kan worden hoe de bouwvlaggen doorgegeven worden en zodat het eventueel
|
|
ontbreken van normale bouwvlaginstellingen ontdekt kan worden. Momenteel
|
|
zijn de enige ondersteunde vlaggen <B>CPPFLAGS</B>, <B>CFLAGS</B>, <B>OBJCFLAGS</B>,
|
|
<B>CXXFLAGS</B> en <B>OBJCXXFLAGS</B>, waarbij die vlaggen als
|
|
<B>-D__DEB_CANARY_</B><I>vlag</I>_<I>willekeurige-id</I><B>__</B> ingesteld worden, en
|
|
<B>LDFLAGS</B> dat ingesteld wordt op <B>-Wl,-z,deb-canary-</B><I>willekeurige-id</I>.
|
|
</DL>
|
|
<A NAME="lbAJ"> </A>
|
|
<H3>sanitize (saneren)</H3>
|
|
|
|
Er kunnen verschillende compilatie-opties (die hierna beschreven worden)
|
|
gebruikt worden om te helpen bij het gezond houden van een resulterend
|
|
binair pakket op het vlak van geheugenvervuiling, geheugenlekkage,
|
|
geheugengebruik na vrijgave, dataraces bij threads en bugs door
|
|
ongedefinieerd gedrag. <B>Noot</B>: deze opties zouden <B>niet</B> gebruikt mogen
|
|
worden voor een bouw voor productiedoeleinden, aangezien ze een verminderde
|
|
betrouwbaarheid bieden inzake codeconformiteit en de beveiliging en zelfs de
|
|
functionaliteit reduceren.
|
|
<DL COMPACT>
|
|
<DT id="44"><B>address</B><DD>
|
|
Deze instelling (standaard uitgeschakeld) voegt <B>-fsanitize=address</B> toe
|
|
aan <B>LDFLAGS</B> en <B>-fsanitize=address -fno-omit-frame-pointer</B> aan
|
|
<B>CFLAGS</B> en aan <B>CXXFLAGS</B>.
|
|
<DT id="45"><B>thread</B><DD>
|
|
Deze instelling (standaard uitgeschakeld) voegt <B>-fsanitize=thread</B> toe aan
|
|
<B>CFLAGS</B>, <B>CXXFLAGS</B> en <B>LDFLAGS</B>.
|
|
<DT id="46"><B>leak</B><DD>
|
|
Deze instelling (standaard uitgeschakeld) voegt <B>-fsanitize=leak</B> toe aan
|
|
<B>LDFLAGS</B>. Ze wordt automatisch uitgeschakeld als ofwel de
|
|
<B>address</B>-functionaliteit of de <B>thread</B>-functionaliteit geactiveerd is,
|
|
aangezien die dit impliceren.
|
|
<DT id="47"><B>undefined</B><DD>
|
|
Deze instelling (standaard uitgeschakeld) voegt <B>-fsanitize=undefined</B> toe
|
|
aan <B>CFLAGS</B>, <B>CXXFLAGS</B> en <B>LDFLAGS</B>.
|
|
</DL>
|
|
<A NAME="lbAK"> </A>
|
|
<H3>hardening (kwetsbaarheidsreductie)</H3>
|
|
|
|
Er kunnen verschillende compilatie-opties (die hierna beschreven worden)
|
|
gebruikt worden om te helpen bij het versterken van een resulterend binair
|
|
pakket tegen geheugenvervuilingsaanvallen of om bijkomende
|
|
waarschuwingsberichten te geven tijdens het compileren. Behalve wanneer
|
|
hierna anders aangegeven is, worden deze opties standaard geactiveerd voor
|
|
architecturen die ze ondersteunen.
|
|
<DL COMPACT>
|
|
<DT id="48"><B>format</B><DD>
|
|
Deze instelling (standaard geactiveerd) voegt <B>-Wformat
|
|
-Werror=format-security</B> toe aan <B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B> en
|
|
<B>OBJCXXFLAGS</B>. Dit zal waarschuwingen geven bij verkeerd gebruik van
|
|
indelingstekenreeksen en zal mislukken als indelingsfuncties gebruikt worden
|
|
op een manier die mogelijke veiligheidsproblemen tot gevolg kunnen
|
|
hebben. Momenteel geeft dit een waarschuwing als een <B>printf</B>-functie of
|
|
een <B>scanf</B>-functie aangeroepen wordt met een indelingstekenreeks die geen
|
|
letterlijke tekenreeks is en er ook geen indelingsargumenten opgegeven
|
|
werden, zoals bij <B>printf(foo);</B> in plaats van <B>printf("%s", foo);</B>. Dit
|
|
kan een veiligheidslek zijn als de indelingstekenreeks afkomstig was van
|
|
onbetrouwbare invoer en '%n' bevat.
|
|
<DT id="49"><B>fortify</B><DD>
|
|
Deze instelling (standaard geactiveerd) voegt <B>-D_FORTIFY_SOURCE=2</B> toe aan
|
|
<B>CPPFLAGS</B>. Tijdens het produceren van de code heeft de compiler een
|
|
heleboel informatie over buffergroottes (waar mogelijk), en tracht een
|
|
functieaanroep met een onveilige ongelimiteerde buffergrootte te vervangen
|
|
door een functieaanroep met een gelimiteerde buffergrootte. Dit is in het
|
|
bijzonder nuttig bij oude en slecht geschreven code. Daarnaast wordt het
|
|
gebruik in het voor schrijven toegankelijk geheugen van
|
|
indelingstekenreeksen die '%n' bevatten, geblokkeerd. Indien een toepassing
|
|
op een dergelijke indelingstekenreeks steunt, zal het er een alternatief
|
|
voor moeten gebruiken.
|
|
<P>
|
|
Merk op dat de code ook met <B>-O1</B> of hoger gecompileerd moet worden opdat
|
|
deze optie effect zou hebben. Indien de omgevingsvariabele
|
|
<B>DEB_BUILD_OPTIONS</B> <I>noopt</I> bevat, dan wordt ondersteuning voor <B>fortify</B>
|
|
uitgeschakeld. Dit is te wijten aan nieuwe waarschuwingen die gegeven worden
|
|
door glibc 2.16 en hoger.
|
|
<DT id="50"><B>stackprotector</B><DD>
|
|
Deze instelling (standaard geactiveerd als stackprotectorstrong niet
|
|
gebruikt wordt) voegt <B>-fstack-protector --param=ssp-buffer-size=4</B> toe aan
|
|
<B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B>
|
|
en <B>FCFLAGS</B>. Dit voegt beveiligingscontroles tegen het overschrijven van
|
|
de stack toe. Dit maakt dat bij veel mogelijke code-injectieaanvallen
|
|
afgebroken wordt. In het beste geval wordt op die manier een kwetsbaarheid
|
|
voor code-injectie omgebogen tot een denial-of-service (dienst niet
|
|
beschikbaar) of een fictief probleem (afhankelijk van de toepassing).
|
|
<P>
|
|
Deze functionaliteit vereist het linken van de code met glibc (of een andere
|
|
aanbieder van <B>__stack_chk_fail</B>) en moet dus uitgeschakeld worden als er
|
|
gebouwd wordt met <B>-nostdlib</B> of <B>-ffreestanding</B> of iets gelijkaardigs.
|
|
<DT id="51"><B>stackprotectorstrong</B><DD>
|
|
Deze instelling (standaard geactiveerd) voegt <B>-fstack-protector-strong</B>
|
|
toe aan <B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>,
|
|
<B>FFLAGS</B> en <B>FCFLAGS</B>. Dit is een sterkere variant van <B>stackprotector</B>,
|
|
maar zonder noemenswaardig prestatieverlies.
|
|
<P>
|
|
Het uitzetten van <B>stackprotector</B> schakelt ook deze functionaliteit uit.
|
|
<P>
|
|
Deze functionaliteit stelt dezelfde vereisten als <B>stackprotector</B> en heeft
|
|
daarenboven ook gcc 4.9 of een recentere versie nodig.
|
|
<DT id="52"><B>relro</B><DD>
|
|
Deze instelling (standaard geactiveerd) voegt <B>-Wl,-z,relro</B> toe aan
|
|
<B>LDFLAGS</B>. Tijdens het laden van het programma moet de linker in
|
|
verschillende ELF-geheugensecties schrijven. Dit zet voor de programmalader
|
|
een vlag zodat die deze secties alleen-lezen maakt alvorens de controle over
|
|
te dragen aan het programma. Het meest noemenswaardige effect is dat dit
|
|
aanvallen door het overschrijven van de Global Offset Table (GOT)
|
|
voorkomt. Indien deze optie uitgeschakeld wordt, wordt ook <B>bindnow</B>
|
|
uitgezet.
|
|
<DT id="53"><B>bindnow</B><DD>
|
|
Deze instelling (standaard uitgeschakeld) voegt <B>-Wl,-z,now</B> toe aan
|
|
<B>LDFLAGS</B>. Tijdens het laden van het programma worden alle dynamische
|
|
symbolen omgezet, waardoor de volledige PLT (Procedure Linkage Table) als
|
|
alleen lezen gemarkeerd kan worden (ten gevolge van <B>relro</B> hiervoor). Deze
|
|
optie kan niet aangezet worden als <B>relro</B> niet geactiveerd is.
|
|
<DT id="54"><B>pie</B><DD>
|
|
Deze instelling (zonder standaardinstelling sinds dpkg 1.18.23, aangezien
|
|
het nu standaard geactiveerd wordt door gcc op de Debian-architecturen
|
|
amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386,
|
|
mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc en
|
|
sparc64) voegt zo nodig de vereiste opties toe om PIE te activeren of te
|
|
deactiveren via gcc specs-bestanden, afhankelijk van het feit of gcc op die
|
|
architectuur de vlaggen zelf injecteert of niet. Indien de instelling
|
|
geactiveerd is en gcc de vlaggen injecteert, voegt ze niets toe. Indien de
|
|
instelling geactiveerd is en gcc de vlaggen niet injecteert, voegt ze
|
|
<B>-fPIE</B> toe (via <I>/usr/share/dpkg/pie-compiler.specs</I>) aan <B>CFLAGS</B>,
|
|
<B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> en
|
|
<B>FCFLAGS</B>, en <B>-fPIE -pie</B> (via <I>/usr/share/dpkg/pie-link.specs</I>) aan
|
|
<B>LDFLAGS</B>. Indien de instelling gedeactiveerd is en gcc de vlaggen
|
|
injecteert, voegt ze <B>-fno-PIE</B> toe (via
|
|
<I>/usr/share/dpkg/no-pie-compile.specs</I>) aan <B>CFLAGS</B>, <B>CXXFLAGS</B>,
|
|
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> en <B>FCFLAGS</B>, en
|
|
<B>-fno-PIE -no-pie</B> (via <I>/usr/share/dpkg/no-pie-link.specs</I>) aan <B>LDFLAGS</B>.
|
|
<P>
|
|
Position Independent Executable (PIE - positie-onafhankelijke programma's)
|
|
zijn nodig om voordeel te halen uit Address Space Layout Randomization (ASLR
|
|
- de adresruimte rangschikken in toevallige volgorde), hetgeen door sommige
|
|
kernelversies ondersteund wordt. Hoewel ASLR reeds voor datagebieden in de
|
|
stack en de heap opgelegd kan worden (brk and mmap), moeten de codegebieden
|
|
als positieonafhankelijk gecompileerd worden. Gedeelde bibliotheken doen dit
|
|
reeds (<B>-fPIC</B>), waardoor zij automatisch ASLR krijgen, maar binaire
|
|
.text-gebieden moeten als PIE gebouwd worden om ASLR te krijgen. Als dit
|
|
gebeurt, worden aanvallen van het type ROP (Return Oriented Programming - op
|
|
terugkeerwaarde georiënteerd programmeren) veel moeilijker aangezien er geen
|
|
statische locaties meer zijn die bij een aanval van geheugenvervuiling als
|
|
springplank gebruikt kunnen worden.
|
|
<P>
|
|
PIE is niet compatibel met <B>-fPIC</B>, dus over het algemeen moet men
|
|
voorzichtig zijn bij het bouwen van gedeelde objecten. Maar aangezien de
|
|
PIE-vlaggen die meegegeven worden geïnjecteerd worden via specs-bestanden
|
|
van gcc, zou het altijd veilig moeten zijn om ze onvoorwaardelijk in te
|
|
stellen ongeacht het objecttype dat gecompileerd of gelinkt wordt.
|
|
<P>
|
|
Statische bibliotheken kunnen door programma's of door andere gedeelde
|
|
bibliotheken gebruikt worden. Afhankelijk van de gebruikte vlaggen bij het
|
|
compileren van alle objecten in een statische bibliotheek, zullen deze
|
|
bibliotheken door verschillende reeksen objecten gebruikt kunnen worden:
|
|
<P>
|
|
<DL COMPACT><DT id="55"><DD>
|
|
<DL COMPACT>
|
|
<DT id="56">geen<DD>
|
|
Kan niet gelinkt worden aan een PIE-programma, noch aan een gedeelde
|
|
bibliotheek.
|
|
<DT id="57"><B>-fPIE</B><DD>
|
|
Kan gelinkt worden aan elk programma, maar niet aan een gedeelde bibliotheek
|
|
(aanbevolen).
|
|
<DT id="58"><B>-fPIC</B><DD>
|
|
Kan gelinkt worden aan elk programma en elke gedeelde bibliotheek.
|
|
</DL>
|
|
</DL>
|
|
|
|
<P>
|
|
<DT id="59"><DD>
|
|
Indien er een behoefte bestaat om deze vlaggen manueel in te stellen en de
|
|
gcc specs-injectie te overbruggen, moet u rekening houden met verschillende
|
|
zaken. Het onvoorwaardelijk en expliciet doorgeven van <B>-fPIE</B>, <B>-fpie</B> of
|
|
<B>-pie</B> aan een bouwsysteem dat libtool gebruikt, is veilig aangezien deze
|
|
vlaggen weggelaten worden bij het bouwen van gedeelde bibliotheken. Bij
|
|
projecten waarin daarentegen zowel programma's als gedeelde bibliotheken
|
|
gebouwd worden, moet u ervoor zorgen dat bij het bouwen van de gedeelde
|
|
bibliotheken <B>-fPIC</B> steeds als laatste doorgegeven wordt (waardoor het een
|
|
eventuele voorafgaande <B>-PIE</B> opheft) aan compilatievlaggen zoals <B>CFLAGS</B>
|
|
en dat <B>-shared</B> als laatste doorgegeven wordt (waardoor het een eventuele
|
|
voorafgaande <B>-pie</B> opheft) aan linkvlaggen zoals <B>LDFLAGS</B>. <B>Opmerking:</B>
|
|
dit is niet nodig met het standaard specs-mechanisme van gcc.
|
|
<P>
|
|
<DT id="60"><DD>
|
|
Aangezien PIE via een algemeen register geïmplementeerd wordt, kunnen
|
|
bovendien bij sommige architecturen (maar niet meer bij i386 sinds de
|
|
optimalisaties die in gcc >= 5 toegepast zijn) prestatieverminderingen
|
|
tot 15% optreden bij zeer zware belasting met tekstsegmenten van
|
|
toepassingen. De meeste belastingen hebben minder dan 1%
|
|
prestatievermindering tot gevolg. Architecturen met meer algemene registers
|
|
(bijv. amd64) vertonen niet zo een hoge terugval in de ergste gevallen.
|
|
</DL>
|
|
<A NAME="lbAL"> </A>
|
|
<H3>reproducible (reproduceerbaar)</H3>
|
|
|
|
De hierna behandelde compilatieopties kunnen gebruikt worden om de
|
|
bouwreproduceerbaarheid te helpen verbeteren of om bijkomende
|
|
waarschuwingsberichten af te leveren tijdens het compileren. Behalve wanneer
|
|
het hierna aangegeven wordt, worden deze opties standaard geactiveerd voor
|
|
architecturen die ze ondersteunen.
|
|
<DL COMPACT>
|
|
<DT id="61"><B>timeless</B><DD>
|
|
Deze instelling (standaard geactiveerd) voegt <B>-Wdate-time</B> toe bij
|
|
<B>CPPFLAGS</B>. Dit leidt tot waarschuwingen als de macros <B>__TIME__</B>,
|
|
<B>__DATE__</B> en <B>__TIMESTAMP__</B> gebruikt worden.
|
|
<DT id="62"><B>fixfilepath</B><DD>
|
|
Deze instelling (standaard gedeactiveerd) voegt
|
|
<B>-ffile-prefix-map=</B><I>BUILDPATH</I><B>=.</B> toe aan <B>CFLAGS</B>, <B>CXXFLAGS</B>,
|
|
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> en <B>FCFLAGS</B>, waarbij
|
|
<B>BUILDPATH</B> ingesteld wordt op de basismap van het pakket dat gebouwd
|
|
wordt. Dit heeft als effect dat het bouwpad verwijderd wordt van eventueel
|
|
gegenereerde bestanden.
|
|
<P>
|
|
Indien zowel <B>fixdebugpath</B> als <B>fixfilepath</B> ingesteld zijn, heeft deze
|
|
laatste optie voorrang, omdat het een superset is van de eerste.
|
|
<DT id="63"><B>fixdebugpath</B><DD>
|
|
Deze instelling (standaard geactiveerd) voegt
|
|
<B>-fdebug-prefix-map=</B><I>BUILDPATH</I><B>=.</B> toe aan <B>CFLAGS</B>, <B>CXXFLAGS</B>,
|
|
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> en <B>FCFLAGS</B>, waarbij
|
|
<B>BUILDPATH</B> ingesteld wordt op de basismap van het pakket dat gebouwd
|
|
wordt. Dit heeft als effect dat het bouwpad verwijderd wordt van eventueel
|
|
gegenereerde debug-symbolen.
|
|
</DL>
|
|
<A NAME="lbAM"> </A>
|
|
<H2>OMGEVING</H2>
|
|
|
|
Er zijn twee sets omgevingsvariabelen die dezelfde operaties uitvoeren. De
|
|
eerste (DEB_<I>vlag</I>_<I>operatie</I>) zou nooit gebruikt mogen worden binnen
|
|
<B>debian/rules</B>. Die is bedoeld voor eventuele gebruikers die het bronpakket
|
|
opnieuw willen bouwen met andere bouwvlaggen. De tweede set
|
|
(DEB_<I>vlag</I>_MAINT_<I>operatie</I>) zou door pakketonderhouders enkel in
|
|
<B>debian/rules</B> gebruikt moeten worden om de resulterende bouwvlaggen aan te
|
|
passen.
|
|
<DL COMPACT>
|
|
<DT id="64"><B>DEB_</B><I>vlag</I><B>_SET</B><DD>
|
|
|
|
<B>DEB_</B><I>vlag</I><B>_MAINT_SET</B>
|
|
Deze variabele kan gebruikt worden om de teruggegeven waarde voor de
|
|
opgegeven vlag <I>vlag</I> af te dwingen.
|
|
<DT id="65"><B>DEB_</B><I>vlag</I><B>_STRIP</B><DD>
|
|
|
|
<B>DEB_</B><I>vlag</I><B>_MAINT_STRIP</B>
|
|
Deze variabele kan gebruikt worden om in een lijst met witruimte als
|
|
scheidingsteken opties op te geven die weggehaald zullen worden uit de set
|
|
vlaggen die teruggegeven wordt voor de opgegeven <I>vlag</I>.
|
|
<DT id="66"><B>DEB_</B><I>vlag</I><B>_APPEND</B><DD>
|
|
|
|
<B>DEB_</B><I>vlag</I><B>_MAINT_APPEND</B>
|
|
Deze variabele kan gebruikt worden om bijkomende opties toe te voegen aan de
|
|
waarde die teruggegeven wordt voor de opgegeven <I>vlag</I>.
|
|
<DT id="67"><B>DEB_</B><I>vlag</I><B>_PREPEND</B><DD>
|
|
|
|
<B>DEB_</B><I>vlag</I><B>_MAINT_PREPEND</B>
|
|
Deze variabele kan gebruikt worden om vooraan bijkomende opties toe te
|
|
voegen aan de waarde die teruggegeven wordt voor de opgegeven <I>vlag</I>.
|
|
<DT id="68"><B>DEB_BUILD_OPTIONS</B><DD>
|
|
|
|
<B>DEB_BUILD_MAINT_OPTIONS</B>
|
|
Deze variabelen kunnen door een gebruiker of een onderhouder gebruikt worden
|
|
om diverse gebiedsfuncties die bouwvlaggen beïnvloeden, te activeren of uit
|
|
te zetten. De variabele <B>DEB_BUILD_MAINT_OPTIONS</B> vervangt eventuele
|
|
instellingen in de functionaliteitsgebieden <B>DEB_BUILD_OPTIONS</B>. Zie het
|
|
onderdeel <B>FUNCTIONALITEITSGEBIEDEN</B> voor de details.
|
|
<DT id="69"><B>DEB_VENDOR</B><DD>
|
|
Deze instelling definieert de huidige leverancier. Indien zij niet ingesteld
|
|
is, zal gezocht worden naar de huidige leverancier door te gaan lezen in
|
|
<B>/etc/dpkg/origins/default</B>.
|
|
<DT id="70"><B>DEB_BUILD_PATH</B><DD>
|
|
Deze variabele stelt in welk bouwpad (sinds dpkg 1.18.8) gebruikt moet
|
|
worden bij functionaliteit zoals <B>fixdebugpath</B> waardoor die gesuperviseerd
|
|
kan worden door het aanroepende programma. Momenteel is deze variabele
|
|
Debian- en derivaat-specifiek.
|
|
<DT id="71"><B>DPKG_COLORS</B><DD>
|
|
Stelt de kleurmodus in (sinds dpkg 1.18.5). Waarden die momenteel gebruikt
|
|
mogen worden zijn: <B>auto</B> (standaard), <B>always</B> en <B>never</B>.
|
|
<DT id="72"><B>DPKG_NLS</B><DD>
|
|
Indien dit ingesteld is, zal het gebruikt worden om te beslissen over het
|
|
activeren van moedertaalondersteuning, ook gekend als
|
|
internationaliseringsondersteuning (of i18n) (sinds dpkg 1.19.0). Geldige
|
|
waarden zijn: <B>0</B> and <B>1</B> (standaard).
|
|
</DL>
|
|
<A NAME="lbAN"> </A>
|
|
<H2>BESTANDEN</H2>
|
|
|
|
<A NAME="lbAO"> </A>
|
|
<H3>Configuratiebestanden</H3>
|
|
|
|
<DL COMPACT>
|
|
<DT id="73"><B>/etc/dpkg/buildflags.conf</B><DD>
|
|
Configuratiebestand dat voor het hele systeem geldt.
|
|
<DT id="74"><B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B> of <DD>
|
|
|
|
<B>$HOME/.config/dpkg/buildflags.conf</B>
|
|
Configuratiebestand dat gebruikersafhankelijk is.
|
|
</DL>
|
|
<A NAME="lbAP"> </A>
|
|
<H3>Ondersteuning bij het maken van een pakket</H3>
|
|
|
|
<DL COMPACT>
|
|
<DT id="75"><B>/usr/share/dpkg/buildflags.mk</B><DD>
|
|
Makefile-fragment dat alle vlaggen die door <B>dpkg-buildflags</B> ondersteund
|
|
worden, laadt in variabelen (en eventueel exporteert) (sinds dpkg 1.16.1).
|
|
</DL>
|
|
<A NAME="lbAQ"> </A>
|
|
<H2>VOORBEELDEN</H2>
|
|
|
|
Om in een Makefile bouwvlaggen door te geven aan een bouwcommando:
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="76"><DD>
|
|
<PRE>
|
|
$(MAKE) $(shell dpkg-buildflags --export=cmdline)
|
|
|
|
./configure $(shell dpkg-buildflags --export=cmdline)
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Om in een shell-script of shell-fragment bouwvlaggen in te stellen, kan
|
|
<B>eval</B> gebruikt worden om de uitvoer te interpreteren van en de vlaggen
|
|
naar de omgeving te exporteren:
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="77"><DD>
|
|
<PRE>
|
|
eval "$(dpkg-buildflags --export=sh)" && make
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
of om de positieparameters in te stellen die aan een commando doorgegeven
|
|
moeten worden:
|
|
<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>Het gebruik in debian/rules</H3>
|
|
|
|
Om de benodigde bouwvlaggen te bekomen die aan het bouwsysteem doorgegeven
|
|
moeten worden, moet u vanuit het bestand <B>debian/rules</B> <B>dpkg-buildflags</B>
|
|
aanroepen of <B>buildflags.mk</B> invoegen. Merk op dat oudere versies van
|
|
<B>dpkg-buildpackage</B> (voor dpkg 1.16.1) deze vlaggen automatisch
|
|
exporteerden. U zou hierop echter niet mogen betrouwen, aangezien dit het
|
|
handmatig aanroepen van <B>debian/rules</B> defect maakt.
|
|
<P>
|
|
|
|
Voor pakketten met een autoconf-achtig bouwsysteem, kunt u de relevante
|
|
opties rechtstreeks doorgeven aan configure of <B><A HREF="/cgi-bin/man/man2html?1+make">make</A></B>(1), zoals hiervoor
|
|
geïllustreerd werd.
|
|
<P>
|
|
|
|
Voor andere bouwsystemen, of indien u een meer fijnmazige controle nodig
|
|
heeft over welke vlaggen waar doorgegeven worden, kunt u <B>--get</B>
|
|
gebruiken. Of in de plaats daarvan kunt u <B>buildflags.mk</B> invoegen, dat
|
|
zorgt voor het aanroepen van <B>dpkg-buildflags</B> en het opslaan van de
|
|
bouwvlaggen in variabelen voor make.
|
|
<P>
|
|
|
|
Indien u alle bouwvlaggen naar de omgeving wenst te exporteren (waar ze door
|
|
uw bouwsysteem opgepikt kunnen worden):
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="79"><DD>
|
|
<PRE>
|
|
DPKG_EXPORT_BUILDFLAGS = 1
|
|
include /usr/share/dpkg/buildflags.mk
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Als u bijkomende controle wenst over wat geëxporteerd wordt, kunt u de
|
|
variabelen handmatig exporteren (aangezien er standaard geen enkele
|
|
geëxporteerd wordt):
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="80"><DD>
|
|
<PRE>
|
|
include /usr/share/dpkg/buildflags.mk
|
|
export CPPFLAGS CFLAGS LDFLAGS
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
En u kunt de vlaggen natuurlijk ook handmatig doorgeven aan commando's:
|
|
<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>
|
|
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="82"><A HREF="#lbAB">NAAM</A><DD>
|
|
<DT id="83"><A HREF="#lbAC">OVERZICHT</A><DD>
|
|
<DT id="84"><A HREF="#lbAD">BESCHRIJVING</A><DD>
|
|
<DT id="85"><A HREF="#lbAE">COMMANDO'S</A><DD>
|
|
<DT id="86"><A HREF="#lbAF">ONDERSTEUNDE VLAGGEN</A><DD>
|
|
<DT id="87"><A HREF="#lbAG">FUNCTIEGEBIEDEN</A><DD>
|
|
<DL>
|
|
<DT id="88"><A HREF="#lbAH">future</A><DD>
|
|
<DT id="89"><A HREF="#lbAI">qa (kwaliteitsbevordering)</A><DD>
|
|
<DT id="90"><A HREF="#lbAJ">sanitize (saneren)</A><DD>
|
|
<DT id="91"><A HREF="#lbAK">hardening (kwetsbaarheidsreductie)</A><DD>
|
|
<DT id="92"><A HREF="#lbAL">reproducible (reproduceerbaar)</A><DD>
|
|
</DL>
|
|
<DT id="93"><A HREF="#lbAM">OMGEVING</A><DD>
|
|
<DT id="94"><A HREF="#lbAN">BESTANDEN</A><DD>
|
|
<DL>
|
|
<DT id="95"><A HREF="#lbAO">Configuratiebestanden</A><DD>
|
|
<DT id="96"><A HREF="#lbAP">Ondersteuning bij het maken van een pakket</A><DD>
|
|
</DL>
|
|
<DT id="97"><A HREF="#lbAQ">VOORBEELDEN</A><DD>
|
|
<DL>
|
|
<DT id="98"><A HREF="#lbAR">Het gebruik in debian/rules</A><DD>
|
|
</DL>
|
|
</DL>
|
|
<HR>
|
|
This document was created by
|
|
<A HREF="/cgi-bin/man/man2html">man2html</A>,
|
|
using the manual pages.<BR>
|
|
Time: 00:06:19 GMT, March 31, 2021
|
|
</BODY>
|
|
</HTML>
|