Commit | Line | Data |
---|---|---|
1479465f GJ |
1 | .\" dpkg manual page - dpkg-buildflags(1) |
2 | .\" | |
3 | .\" Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org> | |
4 | .\" Copyright © 2011 Kees Cook <kees@debian.org> | |
5 | .\" Copyright © 2011-2015 Guillem Jover <guillem@debian.org> | |
6 | .\" | |
7 | .\" This is free software; you can redistribute it and/or modify | |
8 | .\" it under the terms of the GNU General Public License as published by | |
9 | .\" the Free Software Foundation; either version 2 of the License, or | |
10 | .\" (at your option) any later version. | |
11 | .\" | |
12 | .\" This is distributed in the hope that it will be useful, | |
13 | .\" but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | .\" GNU General Public License for more details. | |
16 | .\" | |
17 | .\" You should have received a copy of the GNU General Public License | |
18 | .\" along with this program. If not, see <https://www.gnu.org/licenses/>. | |
19 | . | |
20 | .\"******************************************************************* | |
21 | .\" | |
22 | .\" This file was generated with po4a. Translate the source file. | |
23 | .\" | |
24 | .\"******************************************************************* | |
25 | .TH dpkg\-buildflags 1 %RELEASE_DATE% %VERSION% dpkg\-suite | |
26 | .nh | |
27 | .SH NAAM | |
28 | dpkg\-buildflags \- geeft de bij pakketbouw te gebruiken bouwvlaggen terug | |
29 | . | |
30 | .SH OVERZICHT | |
31 | \fBdpkg\-buildflags\fP [\fIoptie\fP...] [\fIcommando\fP] | |
32 | . | |
33 | .SH BESCHRIJVING | |
34 | \fBdpkg\-buildflags\fP is gereedschap om de compilatievlaggen op te halen die | |
35 | tijdens het bouwen van Debian pakketten gebruikt moeten worden. | |
36 | . | |
37 | De standaardvlaggen worden gedefinieerd door de leverancier, maar ze kunnen | |
38 | op verschillende manieren uitgebreid/vervangen worden: | |
39 | .IP 1. | |
40 | voor het hele systeem met \fB%PKGCONFDIR%/buildflags.conf\fP; | |
41 | .IP 2. | |
42 | voor de huidige gebruiker met \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP, | |
43 | waarbij \fB$XDG_CONFIG_HOME\fP als standaardwaarde \fB$HOME/.config\fP heeft; | |
44 | .IP 3. | |
45 | tijdelijk door de gebruiker met omgevingsvariabelen (zie het onderdeel | |
46 | \fBOMGEVING\fP); | |
47 | .IP 4. | |
48 | dynamisch door de pakketonderhouder met omgevingsvariabelen die ingesteld | |
49 | worden via \fBdebian/rules\fP (zie het onderdeel \fBOMGEVING\fP). | |
50 | .P | |
51 | De configuratiebestanden kunnen vier types opdrachten bevatten: | |
52 | .TP | |
53 | \fBSET\fP\fI vlag waarde\fP | |
54 | Vervang de waarde van de vlag die \fIvlag\fP als naam heeft in waarde | |
55 | \fIwaarde\fP. | |
56 | .TP | |
57 | \fBSTRIP\fP\fI vlag waarde\fP | |
58 | Verwijder van de vlag die \fIvlag\fP als naam heeft alle bouwvlaggen die in | |
59 | \fIwaarde\fP opgesomd worden. | |
60 | .TP | |
61 | \fBAPPEND\fP\fI vlag waarde\fP | |
62 | Breid de vlag die \fIvlag\fP als naam heeft uit door er de opties aan toe te | |
63 | voegen die in \fIwaarde\fP opgegeven worden. Er wordt een spatie geplaatst voor | |
64 | de waarde die toegevoegd wordt, indien de huidige waarde van de vlag niet | |
65 | leeg is. | |
66 | .TP | |
67 | \fBPREPEND\fP\fI vlag waarde\fP | |
68 | Breid de vlag die \fIvlag\fP als naam heeft uit door er vooraan de opties aan | |
69 | toe te voegen die in \fIwaarde\fP opgegeven worden. Er wordt een spatie | |
70 | geplaatst achter de waarde die toegevoegd wordt, indien de huidige waarde | |
71 | van de vlag niet leeg is. | |
72 | .P | |
73 | De configuratiebestanden kunnen commentaar bevatten op regels die beginnen | |
74 | met een hekje (#). Ook lege regels worden genegeerd. | |
75 | .SH COMMANDO'S | |
76 | .TP | |
77 | \fB\-\-dump\fP | |
78 | Laat op standaarduitvoer alle compilatievlaggen en hun waarden zien. Dit | |
79 | geeft per regel één vlag en de waarde ervan weer met daartussenin een | |
80 | gelijkheidsteken (“\fIvlag\fP=\fIwaarde\fP”). Dit is de standaardactie. | |
81 | .TP | |
82 | \fB\-\-list\fP | |
83 | Geeft een lijst weer van vlaggen die door de huidige leverancier ondersteund | |
84 | wordt (één per regel). Zie het onderdeel \fBONDERSTEUNDE VLAGGEN\fP voor meer | |
85 | informatie daarover. | |
86 | .TP | |
87 | \fB\-\-status\fP | |
88 | Laat eventuele informatie zien die nuttig kan zijn om het gedrag te | |
89 | verklaren van \fBdpkg\-buildflags\fP (sinds dpkg 1.16.5): relevante | |
90 | omgevingsvariabelen, huidige leverancier, toestand van alle | |
91 | functievlaggen. Geef ook de resulterende compileervlaggen met hun oorsprong | |
92 | weer. | |
93 | ||
94 | Het is de bedoeling dat dit uitgevoerd wordt vanuit \fBdebian/rules\fP, zodat | |
95 | de bouwlog een duidelijk spoor van de gebruikte vlaggen kan bijhouden. Dit | |
96 | kan nuttig zijn om ermee verband houdende problemen te diagnosticeren. | |
97 | .TP | |
98 | \fB\-\-export=\fP\fIindeling\fP | |
99 | Geef op standaarduitvoer commando's weer die gebruikt kunnen worden om alle | |
100 | compilatievlaggen te exporteren ten behoeve van een specifiek | |
101 | gereedschap. Indien de waarde \fIindeling\fP niet opgegeven werd, wordt \fBsh\fP | |
102 | verondersteld. Enkel compilatievlaggen die met een hoofdletter beginnen | |
103 | worden opgenomen. Van de andere wordt aangenomen dat ze niet bruikbaar zijn | |
104 | voor de omgeving. Ondersteunde indelingen: | |
105 | .RS | |
106 | .TP | |
107 | \fBsh\fP | |
108 | Shell\-opdrachten om alle compilatievlaggen in de omgeving in te stellen en | |
109 | te exporteren. Er worden aanhalingstekens geplaatst rond de vlagwaarden | |
110 | waardoor de uitvoer gereed is om door een shell geëvalueerd te worden. | |
111 | .TP | |
112 | \fBcmdline\fP | |
113 | Argumenten om door te geven aan de commandoregel van een bouwprogramma om al | |
114 | de compilatievlaggen te gebruiken (sinds dpkg 1.17.0). De vlagwaarden worden | |
115 | volgens de shell\-syntaxis tussen haakjes geplaatst. | |
116 | .TP | |
117 | \fBconfigure\fP | |
118 | Dit is een verouderde alias voor \fBcmdline\fP. | |
119 | .TP | |
120 | \fBmake\fP | |
121 | Make\-opdrachten om alle compilatievlaggen in de omgeving in te stellen en te | |
122 | exporteren. De uitvoer kan naar een makefile\-fragment geschreven worden en | |
123 | geëvalueerd met behulp van een \fBinclude\fP\-opdracht. | |
124 | .RE | |
125 | .TP | |
126 | \fB\-\-get\fP\fI vlag\fP | |
127 | Geef de waarde van de vlag weer op de standaarduitvoer. Sluit af met 0 bij | |
128 | een gekende vlag en sluit anders af met 1. | |
129 | .TP | |
130 | \fB\-\-origin\fP\fI vlag\fP | |
131 | Geef de origine weer van de waarde die teruggegeven wordt door | |
132 | \fB\-\-get\fP. Sluit af met 0 bij een gekende vlag en sluit anders af met 1. De | |
133 | origine kan één van de volgende waarden hebben: | |
134 | .RS | |
135 | .TP | |
136 | \fBvendor\fP | |
137 | de originele vlag die door de leverancier ingesteld werd, wordt | |
138 | teruggegeven; | |
139 | .TP | |
140 | \fBsystem\fP | |
141 | de vlag werd ingesteld/gewijzigd door een systeemconfiguratie; | |
142 | .TP | |
143 | \fBuser\fP | |
144 | de vlag werd ingesteld/gewijzigd door een gebruikersspecifieke configuratie; | |
145 | .TP | |
146 | \fBenv\fP | |
147 | de vlag werd ingesteld/gewijzigd door een omgevingsspecifieke configuratie. | |
148 | .RE | |
149 | .TP | |
150 | \fB\-\-query\-features\fP\fI gebied\fP | |
151 | Geef de functionaliteit weer die voor een opgegeven gebied geactiveerd is | |
152 | (sinds dpkg 1.16.2). Momenteel worden door Debian en zijn derivaten enkel de | |
153 | gebieden \fBqa\fP, \fBreproducible\fP, \fBsanitize\fP en \fBhardening\fP erkend. Zie het | |
154 | onderdeel \fBFUNCTIONALITEITSGEBIEDEN\fP voor meer details. Sluit af met 0 als | |
155 | het gebied gekend is, anders met 1. | |
156 | .IP | |
157 | De uitvoer is in RFC822\-indeling met één sectie per functie. Bijvoorbeeld: | |
158 | .IP | |
159 | .nf | |
160 | Feature: pie | |
161 | Enabled: yes | |
162 | ||
163 | Feature: stackprotector | |
164 | Enabled: yes | |
165 | .fi | |
166 | .TP | |
167 | \fB\-\-help\fP | |
168 | Toon info over het gebruik en sluit af. | |
169 | .TP | |
170 | \fB\-\-version\fP | |
171 | Toon de versie en sluit af. | |
172 | . | |
173 | .SH "ONDERSTEUNDE VLAGGEN" | |
174 | .TP | |
175 | \fBCFLAGS\fP | |
176 | Opties voor de C\-compiler. De door de leverancier ingestelde standaardwaarde | |
177 | bestaat uit \fB\-g\fP en het standaardniveau van optimalisatie (gewoonlijk | |
178 | \fB\-O2\fP, of \fB\-O0\fP indien de omgevingsvariabele \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP | |
179 | aangeeft). | |
180 | .TP | |
181 | \fBCPPFLAGS\fP | |
182 | Opties voor de C\-preprocessor. Standaardwaarde: leeg. | |
183 | .TP | |
184 | \fBCXXFLAGS\fP | |
185 | Opties voor de C++ compiler. Hetzelfde als \fBCFLAGS\fP. | |
186 | .TP | |
187 | \fBOBJCFLAGS\fP | |
188 | Opties voor de Objective C compiler. Hetzelfde als \fBCFLAGS\fP. | |
189 | .TP | |
190 | \fBOBJCXXFLAGS\fP | |
191 | Opties voor de Objective C++ compiler. Hetzelfde als \fBCXXFLAGS\fP. | |
192 | .TP | |
193 | \fBGCJFLAGS\fP | |
194 | Opties voor de GNU Java compiler (gcj). Een subset van \fBCFLAGS\fP. | |
195 | .TP | |
196 | \fBFFLAGS\fP | |
197 | Opties voor de Fortran 77 compiler. Een subset van \fBCFLAGS\fP. | |
198 | .TP | |
199 | \fBFCFLAGS\fP | |
200 | Opties voor de Fortran 9x compiler. Hetzelfde als \fBFFLAGS\fP. | |
201 | .TP | |
202 | \fBLDFLAGS\fP | |
203 | Opties die aan de compiler doorgegeven worden bij het linken van uitvoerbare | |
204 | programma's en gedeelde objecten (indien de linker rechtstreeks aangeroepen | |
205 | wordt, dan moeten \fB\-Wl\fP en \fB,\fP van die opties verwijderd | |
206 | worden). Standaardwaarde: leeg. | |
207 | .PP | |
208 | In de toekomst kunnen nog andere vlaggen toegevoegd worden als daar behoefte | |
209 | aan ontstaat (bijvoorbeeld om andere talen te ondersteunen). | |
210 | . | |
211 | .SH FUNCTIONALITEITSGEBIEDEN | |
212 | .P | |
213 | Elke gebiedsfunctionaliteit kan in de gebiedswaarde van de | |
214 | omgevingsvariabelen \fBDEB_BUILD_OPTIONS\fP en \fBDEB_BUILD_MAINT_OPTIONS\fP | |
215 | ingeschakeld en uitgeschakeld worden met de schakelaars ‘\fB+\fP’ en ‘\fB\-\fP’. Om | |
216 | bijvoorbeeld de \fBhardening\fP\-functionaliteit “pie” te activeren en de | |
217 | functionaliteit “fortify” uit te schakelen, kunt u in \fBdebian/rules\fP het | |
218 | volgende doen: | |
219 | .P | |
220 | export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify | |
221 | .P | |
222 | De bijzondere functionaliteit \fBall\fP (geldig in elk gebied) kan gebruikt | |
223 | worden om gelijktijdig alle gebiedsfunctionaliteit te activeren of uit te | |
224 | schakelen. Alles uitschakelen in het gebied \fBhardening\fP en enkel “format” | |
225 | en “fortify” activeren kunt u dus doen met: | |
226 | .P | |
227 | export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify | |
228 | . | |
229 | .SS "qa (kwaliteitsbevordering)" | |
230 | Er kunnen verschillende compilatieopties (die hierna beschreven worden) | |
231 | gebruikt worden om problemen in de broncode of het bouwsysteem te helpen | |
232 | detecteren. | |
233 | .TP | |
234 | \fBbug\fP | |
235 | Deze instelling (die standaard uitgeschakeld is) voegt alle | |
236 | waarschuwingsopties toe die op een betrouwbare wijze problematische broncode | |
237 | opsporen. De waarschuwingen zijn fataal. De enige vlaggen die momenteel | |
238 | ondersteund worden zijn \fBCFLAGS\fP en \fBCXXFLAGS\fP waarbij de vlaggen | |
239 | ingesteld staan op \fB\-Werror=array\-bounds\fP, \fB\-Werror=clobbered\fP, | |
240 | \fB\-Werror=implicit\-function\-declaration\fP en | |
241 | \fB\-Werror=volatile\-register\-var\fP. | |
242 | . | |
243 | .TP | |
244 | \fBcanary\fP | |
245 | Deze instelling (die standaard uitgeschakeld is) voegt loze | |
246 | kanarievogelopties toe aan de bouwvlaggen, zodat in de bouwlogs nagekeken | |
247 | kan worden hoe de bouwvlaggen doorgegeven worden en zodat het eventueel | |
248 | ontbreken van normale bouwvlaginstellingen ontdekt kan worden. Momenteel | |
249 | zijn de enige ondersteunde vlaggen \fBCPPFLAGS\fP, \fBCFLAGS\fP, \fBOBJCFLAGS\fP, | |
250 | \fBCXXFLAGS\fP en \fBOBJCXXFLAGS\fP, waarbij die vlaggen als | |
251 | \fB\-D__DEB_CANARY_\fP\fIvlag\fP_\fIwillekeurige\-id\fP\fB__\fP ingesteld worden, en | |
252 | \fBLDFLAGS\fP dat ingesteld wordt op \fB\-Wl,\-z,deb\-canary\-\fP\fIwillekeurige\-id\fP. | |
253 | . | |
254 | .SS "sanitize (saneren)" | |
255 | Er kunnen verschillende compilatie\-opties (die hierna beschreven worden) | |
256 | gebruikt worden om te helpen bij het gezond houden van een resulterend | |
257 | binair pakket op het vlak van geheugenvervuiling, geheugenlekkage, | |
258 | geheugengebruik na vrijgave, dataraces bij threads en bugs door | |
259 | ongedefinieerd gedrag. | |
260 | .TP | |
261 | \fBaddress\fP | |
262 | Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=address\fP toe | |
263 | aan \fBLDFLAGS\fP en \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fP aan | |
264 | \fBCFLAGS\fP en aan \fBCXXFLAGS\fP. | |
265 | .TP | |
266 | \fBthread\fP | |
267 | Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=thread\fP toe aan | |
268 | \fBCFLAGS\fP, \fBCXXFLAGS\fP en \fBLDFLAGS\fP. | |
269 | .TP | |
270 | \fBleak\fP | |
271 | Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=leak\fP toe aan | |
272 | \fBLDFLAGS\fP. Ze wordt automatisch uitgeschakeld als ofwel de | |
273 | \fBaddress\fP\-functionaliteit of de \fBthread\fP\-functionaliteit geactiveerd is, | |
274 | aangezien die dit impliceren. | |
275 | .TP | |
276 | \fBundefined\fP | |
277 | Deze instelling (standaard uitgeschakeld) voegt \fB\-fsanitize=undefined\fP toe | |
278 | aan \fBCFLAGS\fP, \fBCXXFLAGS\fP en \fBLDFLAGS\fP. | |
279 | .SS "hardening (kwetsbaarheidsreductie)" | |
280 | Er kunnen verschillende compilatie\-opties (die hierna beschreven worden) | |
281 | gebruikt worden om te helpen bij het versterken van een resulterend binair | |
282 | pakket tegen geheugenvervuilingsaanvallen of om bijkomende | |
283 | waarschuwingsberichten te geven tijdens het compileren. Behalve wanneer | |
284 | hierna anders aangegeven is, worden deze opties standaard geactiveerd voor | |
285 | architecturen die ze ondersteunen. | |
286 | .TP | |
287 | \fBformat\fP | |
288 | Deze instelling (standaard geactiveerd) voegt \fB\-Wformat | |
289 | \-Werror=format\-security\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP en | |
290 | \fBOBJCXXFLAGS\fP. Dit zal waarschuwingen geven bij verkeerd gebruik van | |
291 | indelingstekenreeksen en zal mislukken als indelingsfuncties gebruikt worden | |
292 | op een manier die mogelijke veiligheidsproblemen tot gevolg kunnen | |
293 | hebben. Momenteel geeft dit een waarschuwing als een \fBprintf\fP\-functie of | |
294 | een \fBscanf\fP\-functie aangeroepen wordt met een indelingstekenreeks die geen | |
295 | letterlijke tekenreeks is en er ook geen indelingsargumenten opgegeven | |
296 | werden, zoals bij \fBprintf(foo);\fP in plaats van \fBprintf("%s", foo);\fP. Dit | |
297 | kan een veiligheidslek zijn als de indelingstekenreeks afkomstig was van | |
298 | onbetrouwbare invoer en ‘%n’ bevat. | |
299 | . | |
300 | .TP | |
301 | \fBfortify\fP | |
302 | Deze instelling (standaard geactiveerd) voegt \fB\-D_FORTIFY_SOURCE=2\fP toe aan | |
303 | \fBCPPFLAGS\fP. Tijdens het produceren van de code heeft de compiler een | |
304 | heleboel informatie over buffergroottes (waar mogelijk), en tracht een | |
305 | functieaanroep met een onveilige ongelimiteerde buffergrootte te vervangen | |
306 | door een functieaanroep met een gelimiteerde buffergrootte. Dit is in het | |
307 | bijzonder nuttig bij oude en slecht geschreven code. Daarnaast wordt het | |
308 | gebruik in het voor schrijven toegankelijk geheugen van | |
309 | indelingstekenreeksen die ‘%n’ bevatten, geblokkeerd. Indien een toepassing | |
310 | op een dergelijke indelingstekenreeks steunt, zal het er een alternatief | |
311 | voor moeten gebruiken. | |
312 | ||
313 | Merk op dat de code ook met \fB\-O1\fP of hoger gecompileerd moet worden opdat | |
314 | deze optie effect zou hebben. Indien de omgevingsvariabele | |
315 | \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP bevat, dan wordt ondersteuning voor \fBfortify\fP | |
316 | uitgeschakeld. Dit is te wijten aan nieuwe waarschuwingen die gegeven worden | |
317 | door glibc 2.16 en hoger. | |
318 | .TP | |
319 | \fBstackprotector\fP | |
320 | Deze instelling (standaard geactiveerd als stackprotectorstrong niet | |
321 | gebruikt wordt) voegt \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fP toe aan | |
322 | \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP | |
323 | en \fBFCFLAGS\fP. Dit voegt beveiligingscontroles tegen het overschrijven van | |
324 | de stack toe. Dit maakt dat bij veel mogelijke code\-injectieaanvallen | |
325 | afgebroken wordt. In het beste geval wordt op die manier een kwetsbaarheid | |
326 | voor code\-injectie omgebogen tot een denial\-of\-service (dienst niet | |
327 | beschikbaar) of een fictief probleem (afhankelijk van de toepassing). | |
328 | ||
329 | Deze functionaliteit vereist het linken van de code met glibc (of een andere | |
330 | aanbieder van \fB__stack_chk_fail\fP) en moet dus uitgeschakeld worden als er | |
331 | gebouwd wordt met \fB\-nostdlib\fP of \fB\-ffreestanding\fP of iets gelijkaardigs. | |
332 | . | |
333 | .TP | |
334 | \fBstackprotectorstrong\fP | |
335 | Deze instelling (standaard geactiveerd) voegt \fB\-fstack\-protector\-strong\fP | |
336 | toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, | |
337 | \fBFFLAGS\fP en \fBFCFLAGS\fP. Dit is een sterkere variant van \fBstackprotector\fP, | |
338 | maar zonder noemenswaardig prestatieverlies. | |
339 | ||
340 | Het uitzetten van \fBstackprotector\fP schakelt ook deze functionaliteit uit. | |
341 | ||
342 | Deze functionaliteit stelt dezelfde vereisten als \fBstackprotector\fP en heeft | |
343 | daarenboven ook gcc 4.9 of een recentere versie nodig. | |
344 | . | |
345 | .TP | |
346 | \fBrelro\fP | |
347 | Deze instelling (standaard geactiveerd) voegt \fB\-Wl,\-z,relro\fP toe aan | |
348 | \fBLDFLAGS\fP. Tijdens het laden van het programma moet de linker in | |
349 | verschillende ELF\-geheugensecties schrijven. Dit zet voor de programmalader | |
350 | een vlag zodat die deze secties alleen\-lezen maakt alvorens de controle over | |
351 | te dragen aan het programma. Het meest noemenswaardige effect is dat dit | |
352 | aanvallen door het overschrijven van de Global Offset Table (GOT) | |
353 | voorkomt. Indien deze optie uitgeschakeld wordt, wordt ook \fBbindnow\fP | |
354 | uitgezet. | |
355 | . | |
356 | .TP | |
357 | \fBbindnow\fP | |
358 | Deze instelling (standaard uitgeschakeld) voegt \fB\-Wl,\-z,now\fP toe aan | |
359 | \fBLDFLAGS\fP. Tijdens het laden van het programma worden alle dynamische | |
360 | symbolen omgezet, waardoor de volledige PLT (Procedure Linkage Table) als | |
361 | alleen lezen gemarkeerd kan worden (ten gevolge van \fBrelro\fP hiervoor). Deze | |
362 | optie kan niet aangezet worden als \fBrelro\fP niet geactiveerd is. | |
363 | . | |
364 | .TP | |
365 | \fBpie\fP | |
366 | Deze instelling (zonder standaardinstelling sinds dpkg 1.18.23 en door gcc | |
367 | standaard geïnjecteerd bij de Debian architecturen amd64, arm64, armel, | |
368 | armhf, i386, kfreebsd\-amd64, kfreebsd\-i386, mips, mipsel, mips64el, ppc64el, | |
369 | s390x, sparc en sparc64) voegt zo nodig de vereiste opties toe om PIE te | |
370 | activeren of te deactiveren. In geval van activering en door gcc | |
371 | geïnjecteerd, wordt er niets toegevoegd, In geval van activering en niet | |
372 | geïnjecteerd door gcc, wordt \fB\-fPIE\fP toegevoegd bij \fBCFLAGS\fP, \fBCXXFLAGS\fP, | |
373 | \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, en | |
374 | \fB\-fPIE \-pie\fP bij \fBLDFLAGS\fP. In geval van deactivering en geïnjecteerd door | |
375 | gcc wordt \fB\-fno\-PIE\fP toegevoegd bij \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, | |
376 | \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, en \fB\-fno\-PIE \-no\-pie\fP | |
377 | bij \fBLDFLAGS\fP. | |
378 | ||
379 | Position Independent Executable (PIE \- positie\-onafhankelijke programma's) | |
380 | zijn nodig om voordeel te halen uit Address Space Layout Randomization (ASLR | |
381 | \- de adresruimte rangschikken in toevallige volgorde), hetgeen door sommige | |
382 | kernelversies ondersteund wordt. Hoewel ASLR reeds voor datagebieden in de | |
383 | stack en de heap opgelegd kan worden (brk and mmap), moeten de codegebieden | |
384 | als positieonafhankelijk gecompileerd worden. Gedeelde bibliotheken doen dit | |
385 | reeds (\fB\-fPIC\fP), waardoor zij automatisch ASLR krijgen, maar binaire | |
386 | \&.text\-gebieden moeten als PIE gebouwd worden om ASLR te krijgen. Als dit | |
387 | gebeurt, worden aanvallen van het type ROP (Return Oriented Programming \- op | |
388 | terugkeerwaarde georiënteerd programmeren) veel moeilijker aangezien er geen | |
389 | statische locaties meer zijn die bij een aanval van geheugenvervuiling als | |
390 | springplank gebruikt kunnen worden. | |
391 | ||
392 | PIE is niet compatibel met \fB\-fPIC\fP, dus over het algemeen moet men | |
393 | voorzichtig zijn bij het bouwen van gedeelde objecten. Maar aangezien de | |
394 | PIE\-vlaggen die meegegeven worden geïnjecteerd worden via specs\-bestanden | |
395 | van gcc, zou het altijd veilig moeten zijn om ze onvoorwaardelijk in te | |
396 | stellen ongeacht het objecttype dat gecompileerd of gelinkt wordt. | |
397 | ||
398 | Statische bibliotheken kunnen door programma's of door andere gedeelde | |
399 | bibliotheken gebruikt worden. Afhankelijk van de gebruikte vlaggen bij het | |
400 | compileren van alle objecten in een statische bibliotheek, zullen deze | |
401 | bibliotheken door verschillende reeksen objecten gebruikt kunnen worden: | |
402 | ||
403 | .RS | |
404 | .TP | |
405 | geen | |
406 | Kan niet gelinkt worden aan een PIE\-programma, noch aan een gedeelde | |
407 | bibliotheek. | |
408 | .TP | |
409 | \fB\-fPIE\fP | |
410 | Kan gelinkt worden aan elk programma, maar niet aan een gedeelde bibliotheek | |
411 | (aanbevolen). | |
412 | .TP | |
413 | \fB\-fPIC\fP | |
414 | Kan gelinkt worden aan elk programma en elke gedeelde bibliotheek. | |
415 | .RE | |
416 | ||
417 | .IP | |
418 | Indien er een behoefte bestaat om deze vlaggen manueel in te stellen en de | |
419 | gcc specs\-injectie te overbruggen, moet u rekening houden met verschillende | |
420 | zaken. Het onvoorwaardelijk en expliciet doorgeven van \fB\-fPIE\fP, \fB\-fpie\fP of | |
421 | \fB\-pie\fP aan een bouwsysteem dat libtool gebruikt, is veilig aangezien deze | |
422 | vlaggen weggelaten worden bij het bouwen van gedeelde bibliotheken. Bij | |
423 | projecten waarin daarentegen zowel programma's als gedeelde bibliotheken | |
424 | gebouwd worden, moet u ervoor zorgen dat bij het bouwen van de gedeelde | |
425 | bibliotheken \fB\-fPIC\fP steeds als laatste doorgegeven wordt (waardoor het een | |
426 | eventuele voorafgaande \fB\-PIE\fP opheft) aan compilatievlaggen zoals \fBCFLAGS\fP | |
427 | en dat \fB\-shared\fP als laatste doorgegeven wordt (waardoor het een eventuele | |
428 | voorafgaande \fB\-pie\fP opheft) aan linkvlaggen zoals \fBLDFLAGS\fP. \fBOpmerking:\fP | |
429 | dit is niet nodig met het standaard specs\-mechanisme van gcc. | |
430 | ||
431 | .IP | |
432 | Aangezien PIE via een algemeen register geïmplementeerd wordt, kunnen | |
433 | bovendien bij sommige architecturen (maar niet meer bij i386 sinds de | |
434 | optimalisaties die in gcc >= 5 toegepast zijn) prestatieverminderingen | |
435 | tot 15% optreden bij zeer zware belasting met tekstsegmenten van | |
436 | toepassingen. De meeste belastingen hebben minder dan 1% | |
437 | prestatievermindering tot gevolg. Architecturen met meer algemene registers | |
438 | (bijv. amd64) vertonen niet zo een hoge terugval in de ergste gevallen. | |
439 | .SS "reproducible (reproduceerbaar)" | |
440 | De hierna behandelde compilatieopties kunnen gebruikt worden om de | |
441 | bouwreproduceerbaarheid te helpen verbeteren of om bijkomende | |
442 | waarschuwingsberichten af te leveren tijdens het compileren. Behalve wanneer | |
443 | het hierna aangegeven wordt, worden deze opties standaard geactiveerd voor | |
444 | architecturen die ze ondersteunen. | |
445 | .TP | |
446 | \fBtimeless\fP | |
447 | Deze instelling (standaard geactiveerd) voegt \fB\-Wdate\-time\fP toe bij | |
448 | \fBCPPFLAGS\fP. Dit leidt tot waarschuwingen als de macros \fB__TIME__\fP, | |
449 | \fB__DATE__\fP en \fB__TIMESTAMP__\fP gebruikt worden. | |
450 | . | |
451 | .TP | |
452 | \fBfixdebugpath\fP | |
453 | Deze instelling (standaard geactiveerd) voegt | |
454 | \fB\-fdebug\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP toe aan \fBCFLAGS\fP, \fBCXXFLAGS\fP, | |
455 | \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP en \fBFCFLAGS\fP, waarbij | |
456 | \fBBUILDPATH\fP ingesteld wordt op de basismap van het pakket dat gebouwd | |
457 | wordt. Dit heeft als effect dat het bouwpad verwijderd wordt van eventueel | |
458 | gegenereerde debug\-symbolen. | |
459 | . | |
460 | .SH OMGEVING | |
461 | Er zijn twee sets omgevingsvariabelen die dezelfde operaties uitvoeren. De | |
462 | eerste (DEB_\fIvlag\fP_\fIoperatie\fP) zou nooit gebruikt mogen worden binnen | |
463 | \fBdebian/rules\fP. Die is bedoeld voor eventuele gebruikers die het bronpakket | |
464 | opnieuw willen bouwen met andere bouwvlaggen. De tweede set | |
465 | (DEB_\fIvlag\fP_MAINT_\fIoperatie\fP) zou door pakketonderhouders enkel in | |
466 | \fBdebian/rules\fP gebruikt moeten worden om de resulterende bouwvlaggen aan te | |
467 | passen. | |
468 | .TP | |
469 | \fBDEB_\fP\fIvlag\fP\fB_SET\fP | |
470 | .TQ | |
471 | \fBDEB_\fP\fIvlag\fP\fB_MAINT_SET\fP | |
472 | Deze variabele kan gebruikt worden om de teruggegeven waarde voor de | |
473 | opgegeven vlag \fIvlag\fP af te dwingen. | |
474 | .TP | |
475 | \fBDEB_\fP\fIvlag\fP\fB_STRIP\fP | |
476 | .TQ | |
477 | \fBDEB_\fP\fIvlag\fP\fB_MAINT_STRIP\fP | |
478 | Deze variabele kan gebruikt worden om in een lijst met witruimte als | |
479 | scheidingsteken opties op te geven die weggehaald zullen worden uit de set | |
480 | vlaggen die teruggegeven wordt voor de opgegeven \fIvlag\fP. | |
481 | .TP | |
482 | \fBDEB_\fP\fIvlag\fP\fB_APPEND\fP | |
483 | .TQ | |
484 | \fBDEB_\fP\fIvlag\fP\fB_MAINT_APPEND\fP | |
485 | Deze variabele kan gebruikt worden om bijkomende opties toe te voegen aan de | |
486 | waarde die teruggegeven wordt voor de opgegeven \fIvlag\fP. | |
487 | .TP | |
488 | \fBDEB_\fP\fIvlag\fP\fB_PREPEND\fP | |
489 | .TQ | |
490 | \fBDEB_\fP\fIvlag\fP\fB_MAINT_PREPEND\fP | |
491 | Deze variabele kan gebruikt worden om vooraan bijkomende opties toe te | |
492 | voegen aan de waarde die teruggegeven wordt voor de opgegeven \fIvlag\fP. | |
493 | .TP | |
494 | \fBDEB_BUILD_OPTIONS\fP | |
495 | .TQ | |
496 | \fBDEB_BUILD_MAINT_OPTIONS\fP | |
497 | Deze variabelen kunnen door een gebruiker of een onderhouder gebruikt worden | |
498 | om diverse gebiedsfuncties die bouwvlaggen beïnvloeden, te activeren of uit | |
499 | te zetten. De variabele \fBDEB_BUILD_MAINT_OPTIONS\fP vervangt eventuele | |
500 | instellingen in de functionaliteitsgebieden \fBDEB_BUILD_OPTIONS\fP. Zie het | |
501 | onderdeel \fBFUNCTIONALITEITSGEBIEDEN\fP voor de details. | |
502 | .TP | |
503 | \fBDEB_VENDOR\fP | |
504 | Deze instelling definieert de huidige leverancier. Indien zij niet ingesteld | |
505 | is, zal gezocht worden naar de huidige leverancier door te gaan lezen in | |
506 | \fB%PKGCONFDIR%/origins/default\fP. | |
507 | .TP | |
508 | \fBDEB_BUILD_PATH\fP | |
509 | Deze variabele stelt in welk bouwpad (sinds dpkg 1.18.8) gebruikt moet | |
510 | worden bij functionaliteit zoals \fBfixdebugpath\fP waardoor die gesuperviseerd | |
511 | kan worden door het aanroepende programma. Momenteel is deze variabele | |
512 | Debian\- en derivaat\-specifiek. | |
513 | . | |
514 | .SH BESTANDEN | |
515 | .SS Configuratiebestanden | |
516 | .TP | |
517 | \fB%PKGCONFDIR%/buildflags.conf\fP | |
518 | Configuratiebestand dat voor het hele systeem geldt. | |
519 | .TP | |
520 | \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP of | |
521 | .TQ | |
522 | \fB$HOME/.config/dpkg/buildflags.conf\fP | |
523 | Configuratiebestand dat gebruikersafhankelijk is. | |
524 | .SS "Ondersteuning bij het maken van een pakket" | |
525 | .TP | |
526 | \fB%PKGDATADIR%/buildflags.mk\fP | |
527 | Makefile\-fragment dat alle vlaggen die door \fBdpkg\-buildflags\fP ondersteund | |
528 | worden, laadt in variabelen (en eventueel exporteert) (sinds dpkg 1.16.1). | |
529 | . | |
530 | .SH VOORBEELDEN | |
531 | Om in een makefile bouwvlaggen door te geven aan een bouwcommando: | |
532 | .PP | |
533 | .RS 4 | |
534 | .nf | |
535 | $(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline) | |
536 | ||
537 | \&./configure $(shell dpkg\-buildflags \-\-export=cmdline) | |
538 | .fi | |
539 | .RE | |
540 | .PP | |
541 | Om in een shell\-script of shell\-fragment bouwvlaggen in te stellen, kan | |
542 | \fBeval\fP gebruikt worden om de uitvoer te interpreteren van en de vlaggen | |
543 | naar de omgeving te exporteren: | |
544 | .PP | |
545 | .RS 4 | |
546 | .nf | |
547 | eval "$(dpkg\-buildflags \-\-export=sh)" && make | |
548 | .fi | |
549 | .RE | |
550 | .PP | |
551 | of om de positieparameters in te stellen die aan een commando doorgegeven | |
552 | moeten worden: | |
553 | .PP | |
554 | .RS 4 | |
555 | .nf | |
556 | eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)" | |
557 | for dir in a b c; do (cd $dir && ./configure "$@" && make); done | |
558 | .fi | |
559 | .RE | |
560 | . | |
561 | .SS "Het gebruik in debian/rules" | |
562 | Om de benodigde bouwvlaggen te bekomen die aan het bouwsysteem doorgegeven | |
563 | moeten worden, moet u vanuit het bestand \fBdebian/rules\fP \fBdpkg\-buildflags\fP | |
564 | aanroepen of \fBbuildflags.mk\fP invoegen. Merk op dat oudere versies van | |
565 | \fBdpkg\-buildpackage\fP (voor dpkg 1.16.1) deze vlaggen automatisch | |
566 | exporteerden. U zou hierop echter niet mogen betrouwen, aangezien dit het | |
567 | handmatig aanroepen van \fBdebian/rules\fP defect maakt. | |
568 | .PP | |
569 | Voor pakketten met een autoconf\-achtig bouwsysteem, kunt u de relevante | |
570 | opties rechtstreeks doorgeven aan configure of \fBmake\fP(1), zoals hiervoor | |
571 | geïllustreerd werd. | |
572 | .PP | |
573 | Voor andere bouwsystemen, of indien u een meer fijnmazige controle nodig | |
574 | heeft over welke vlaggen waar doorgegeven worden, kunt u \fB\-\-get\fP | |
575 | gebruiken. Of in de plaats daarvan kunt u \fBbuildflags.mk\fP invoegen, dat | |
576 | zorgt voor het aanroepen van \fBdpkg\-buildflags\fP en het opslaan van de | |
577 | bouwvlaggen in variabelen voor make. | |
578 | .PP | |
579 | Indien u alle bouwvlaggen naar de omgeving wenst te exporteren (waar ze door | |
580 | uw bouwsysteem opgepikt kunnen worden): | |
581 | .PP | |
582 | .RS 4 | |
583 | .nf | |
584 | DPKG_EXPORT_BUILDFLAGS = 1 | |
585 | include %PKGDATADIR%/buildflags.mk | |
586 | .fi | |
587 | .RE | |
588 | .PP | |
589 | Als u bijkomende controle wenst over wat geëxporteerd wordt, kunt u de | |
590 | variabelen handmatig exporteren (aangezien er standaard geen enkele | |
591 | geëxporteerd wordt): | |
592 | .PP | |
593 | .RS 4 | |
594 | .nf | |
595 | include %PKGDATADIR%/buildflags.mk | |
596 | export CPPFLAGS CFLAGS LDFLAGS | |
597 | .fi | |
598 | .RE | |
599 | .PP | |
600 | En u kunt de vlaggen natuurlijk ook handmatig doorgeven aan commando's: | |
601 | .PP | |
602 | .RS 4 | |
603 | .nf | |
604 | include %PKGDATADIR%/buildflags.mk | |
605 | build\-arch: | |
606 | \& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) | |
607 | .fi | |
608 | .RE |