dpkg (1.18.25) stretch; urgency=medium
[dpkg] / man / de / dpkg-buildflags.man
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\-Programmsammlung
26 .nh
27 .SH BEZEICHNUNG
28 dpkg\-buildflags \- liefert Bauschalter zum Einsatz beim Paketbau
29 .
30 .SH ÜBERSICHT
31 \fBdpkg\-buildflags\fP [\fIOption\fP …] [\fIBefehl\fP]
32 .
33 .SH BESCHREIBUNG
34 \fBdpkg\-buildflags\fP ist ein Werkzeug, das zum Abfragen der zu verwendenden
35 Kompilierungsschalter für den Bau von Debian\-Paketen eingesetzt wird.
36 .
37 Die Standardschalter werden vom Lieferanten definiert, sie können auf
38 mehrere Arten erweitert/überschrieben werden:
39 .IP 1.
40 systemweit mit \fB%PKGCONFDIR%/buildflags.conf\fP
41 .IP 2.
42 für den aktuellen Benutzer mit \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP,
43 wobei \fB$XDG_CONFIG_HOME\fP standardmäßig auf \fB$HOME/.config\fP gesetzt ist
44 .IP 3.
45 temporär durch den Benutzer mittels Umgebungsvariablen (siehe Abschnitt
46 \fBUMGEBUNG\fP)
47 .IP 4.
48 dynamisch durch den Paketverwalter mittels Umgebungsvariablen, die über
49 \fBdebian/rules\fP gesetzt wurden (siehe Abschnitt \fBUMGEBUNG\fP)
50 .P
51 Die Konfigurationsdateien können vier Arten von Direktiven enthalten:
52 .TP
53 \fBSET\fP\fI Schalter Wert\fP
54 Überschreibt den Schalter namens \fISchalter\fP, um den Wert \fIWert\fP zu
55 erhalten.
56 .TP
57 \fBSTRIP\fP\fI Schalter Wert\fP
58 Aus dem Schalter namens \fISchalter\fP alle in \fIWert\fP aufgeführten Bauschalter
59 entfernen
60 .TP
61 \fBAPPEND\fP\fI Schalter Wert\fP
62 Erweitert den Schalter namens \fISchalter\fP durch Anhängen der in \fIWert\fP
63 angegebenen Optionen. Ein Leerzeichen wird vor den angehängten Wert
64 vorangestellt, falls der derzeitige Wert nicht leer ist.
65 .TP
66 \fBPREPEND\fP\fI Schalter Wert\fP
67 Erweitert den Schalter namens \fISchalter\fP durch Voranstellen der in \fIWert\fP
68 angegebenen Optionen. Ein Leerzeichen wird hinter den vorangestellten Wert
69 angehängt, falls der derzeitige Wert nicht leer ist.
70 .P
71 Die Konfigurationsdateien können Kommentare auf Zeilen enthalten, die mit
72 einer Raute (#) beginnen. Leere Zeilen werden auch ignoriert.
73 .SH BEFEHLE
74 .TP
75 \fB\-\-dump\fP
76 Auf der Standardausgabe alle Kompilierschalter und ihre Werte ausgeben. Es
77 wird ein Schalter pro Zeile ausgegeben, wobei der Werte durch ein
78 Gleichheitszeichen („\fISchalter\fP=\fIWert\fP“) abgetrennt wird. Dies ist die
79 Standardaktion.
80 .TP
81 \fB\-\-list\fP
82 Gibt die Liste der vom aktuellen Lieferanten unterstützen Schalter (eine pro
83 Zeile) aus. Lesen Sie den Abschnitt \fBUNTERSTÜTZTE SCHALTER\fP für weitere
84 Informationen über sie.
85 .TP
86 \fB\-\-status\fP
87 Alle Informationen anzeigen, die zum Verständnis des Verhaltens von
88 \fBdpkg\-buildflags\fP nützlich sein können (seit Dpkg 1.16.5): relevante
89 Umgebungsvariablen, aktueller Lieferant, Zustand der Funktionsschalter. Auch
90 die entstehenden Compiler\-Schalter mit ihrem Ursprung werden ausgeben.
91
92 Dies ist zur Ausführung in \fBdebian/rules\fP gedacht, so dass das Bauprotokoll
93 einen klaren Nachweis der verwandten Bauschalter enthält. Dies kann zur
94 Diagnose von Problemen in Zusammenhang mit diesen nützlich sein.
95 .TP
96 \fB\-\-export=\fP\fIFormat\fP
97 Auf der Standardausgabe Befehle ausgeben, die dazu verwandt werden können,
98 alle Kompilierschalter für bestimmte Werkzeuge zu exportieren. Falls der
99 Wert von \fIFormat\fP nicht angegeben wird, wird \fBsh\fP angenommen. Nur
100 Kompilierschalter, die mit einem Großbuchstaben beginnen, werden
101 aufgenommen. Bei allen anderen wird angenommen, dass sie für die Umgebung
102 nicht geeignet sind. Unterstützte Formate:
103 .RS
104 .TP
105 \fBsh\fP
106 Shell\-Befehle, um alle Kompilierungsschalter in der Umgebung zu setzen und
107 zu exportieren. Die Schalterwerte werden maskiert, so dass die Ausgabe für
108 Auswertung durch eine Shell bereit ist.
109 .TP
110 \fBcmdline\fP
111 Argumente, die an die Befehlszeile eines Bauprogrammes übergeben werden, um
112 alle Übersetzungsschalter zu verwenden (seit Dpkg 1.17.0). Die Schalterwerte
113 werden in Shell\-Syntax maskiert.
114 .TP
115 \fBconfigured\fP (konfiguriert)
116 Dies ist ein historischer Alias für \fBcmdline\fP.
117 .TP
118 \fBmake\fP
119 Make\-Direktiven, um alle Kompilierungsschalter in der Umgebung zu setzen und
120 zu exportieren. Die Ausgabe kann in ein Makefile\-Fragment geschrieben und
121 mit einer \fBinclude\fP\-Direktive ausgewertet werden.
122 .RE
123 .TP
124 \fB\-\-get\fP\fI Schalter\fP
125 Gibt den Wert des Schalters auf der Standardausgabe aus. Beendet sich mit 0,
126 falls der Schalter bekannt ist, andernfalls mit 1.
127 .TP
128 \fB\-\-origin\fP\fI Schalter\fP
129 Gibt den Ursprung des von \fB\-\-get\fP gelieferten Werts aus. Beendet sich mit
130 0, falls der Schalter bekannt ist, andernfalls mit 1. Der Ursprung kann
131 einer der folgenden Werte sein:
132 .RS
133 .TP
134 \fBvendor\fP
135 der ursprünglich vom Lieferanten gesetzte Schalter wird zurückgeliefert
136 .TP
137 \fBsystem\fP
138 der Schalter wurde durch eine systemweite Konfiguration gesetzt/verändert
139 .TP
140 \fBuser\fP
141 der Schalter wurde durch eine benutzerspezifische Konfiguration
142 gesetzt/verändert
143 .TP
144 \fBenv\fP
145 der Schalter wurde durch eine umgebungsspezifische Konfiguration
146 gesetzt/verändert
147 .RE
148 .TP
149 \fB\-\-query\-features\fP\fI Bereich\fP
150 Gibt die Funktionalitäten, die für den übergebenen Bereich aktiviert sind,
151 aus (seit Dpkg 1.16.2). Die einzigen unter Debian und abgeleiteten
152 Distributionen derzeit erkannten Bereiche sind \fBqa\fP, \fBreproducible\fP,
153 \fBsanitize\fP und \fBhardening\fP. Lesen Sie den Abschnitt
154 \fBFUNKTIONALITÄTSBEREICHE\fP für weitere Details. Beendet sich mit 0, falls
155 der Bereich bekannt ist, andernfalls mit 1.
156 .IP
157 Das Ausgabeformat ist im RFC822\-Format, mit einem Abschnitt pro
158 Funktionalität. Beispiel:
159 .IP
160 .nf
161 Feature: pie
162 Enabled: yes
163
164 Feature: stackprotector
165 Enabled: yes
166 .fi
167 .TP
168 \fB\-\-help\fP
169 Zeige den Bedienungshinweis und beende.
170 .TP
171 \fB\-\-version\fP
172 Gebe die Version aus und beende sich.
173 .
174 .SH "UNTERSTÜTZTE SCHALTER"
175 .TP
176 \fBCFLAGS\fP
177 Optionen für den C\-Compiler. Der vom Lieferanten gesetzte Standardwert
178 enthält \fI\-g\fP und die Standard Optimierungsstufe (normalerweise \fI\-O2\fP oder
179 \fB\-O0\fP, falls die Umgebungsvariable \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP definiert.
180 .TP
181 \fBCPPFLAGS\fP
182 Optionen für den C\-Präprozessor. Standardwert: leer
183 .TP
184 \fBCXXFLAGS\fP
185 Optionen für den C++\-Compiler. Identisch zu \fBCFLAGS\fP.
186 .TP
187 \fBOBJCFLAGS\fP
188 Optionen für den Objective\-C\-Compiler. Identisch zu \fBCFLAGS\fP.
189 .TP
190 \fBOBJCXXFLAGS\fP
191 Optionen für den Objective\-C++\-Compiler. Identisch zu \fBCXXFLAGS\fP.
192 .TP
193 \fBGCJFLAGS\fP
194 Optionen für den GNU\-Java\-Compiler (gcj). Eine Untermenge von \fBCFLAGS\fP.
195 .TP
196 \fBFFLAGS\fP
197 Optionen für den Fortran\-77\-Compiler. Eine Untermenge von \fBCFLAGS\fP.
198 .TP
199 \fBFCFLAGS\fP
200 Optionen für den Fortran\-9x\-Compiler. Identisch zu \fBFFLAGS\fP.
201 .TP
202 \fBLDFLAGS\fP
203 Optionen die beim Linken von Programmen oder Laufzeitbibliotheken an den
204 Compiler weitergegeben werden (falls der Linker direkt aufgerufen wird,
205 müssen \fB\-Wl\fP und \fB,\fP aus diesen Optionen entfernt werden). Standardmäßig
206 leer.
207 .PP
208 Neue Schalter können in Zukunft hinzugefügt werden, falls die Notwendigkeit
209 aufkommt (beispielsweise, um weitere Sprachen zu unterstützen).
210 .
211 .SH FUNKTIONALITÄTSBEREICHE
212 .P
213 Jede Bereichsfunktionalität kann durch den entsprechenden Bereichswert in
214 den Umgebungsvariablen \fBDEB_BUILD_OPTIONS\fP und \fBDEB_BUILD_MAINT_OPTIONS\fP
215 mit den ‚\fB+\fP’\- und ‚\fB\-\fP’\-Schaltern aktiviert und deaktiviert werden. Soll
216 beispielsweise für \fBhardening\fP die „pie“\-Funktionalität aktiviert und die
217 „fortify“\-Funktionalität deaktiviert werden, können Sie Folgendes in
218 \fBdebian/rules\fP verwenden:
219 .P
220 export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify
221 .P
222 Die spezielle Funktionalität \fBall\fP (in allen Bereichen gültig) kann dazu
223 verwandt werden, alle Bereichsfunktionalitäten auf einmal zu aktivieren oder
224 zu deaktiveren. Um daher alles im Bereich \fBhardening\fP zu deaktiveren und
225 nur „format“ und „fortify“ zu aktiveren, kann Folgendes eingesetzt werden:
226 .P
227 export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify
228 .
229 .SS QS
230 Mehrere Optionen zur Kompilierung (Details weiter unten) können verwandt
231 werden, um dabei zu helfen, Probleme im Quellcode oder im Bausystem zu
232 erkennen.
233 .TP
234 \fBbug\fP
235 Diese Einstellung (standardmäßig deaktiviert) fügt Warnoptionen hinzu, die
236 zuverlässig problematischen Quellcode erkennen. Diese Warnungen sind
237 fatal. Die einzigen derzeit unterstützten Schalter sind \fBCFLAGS\fP und
238 \fBCXXFLAGS\fP, wobei die Schalter auf \fB\-Werror=array\-bounds\fP,
239 \fB\-Werror=clobbered\fP, \fB\-Werror=implicit\-function\-declaration\fP und
240 \fB\-Werror=volatile\-register\-var\fP gesetzt werden.
241 .
242 .TP
243 \fBcanary\fP
244 Diese Einstellung (standardmäßig deaktiviert) fügt
245 Pseudo\-Kanarienvögel\-Optionen zu den Bauschaltern hinzu, so dass die
246 Bauprotokolle überprüft werden können, wie die Bauschalter sich
247 fortpflanzen. Dies erlaubt, Auslassungen in den normalen
248 Bauschaltereinstellungen zu finden. Derzeit werden nur die Schalter
249 \fBCPPFLAGS\fP, \fBCFLAGS\fP, \fBOBJCFLAGS\fP, \fBCXXFLAGS\fP und \fBOBJCXXFLAGS\fP
250 unterstützt, wobei die Schalter auf
251 \fB\-D__DEB_CANARY_\fP\fISchalter\fP_\fIZufallskennung\fP\fB__\fP gesetzt werden, und
252 \fBLDFLAGS\fP, das auf \fB\-Wl,\-z,deb\-canary\-\fP\fIZufallskennung\fP gesetzt wird.
253 .
254 .SS Bereinigung
255 Mehrere Kompilierzeit\-Optionen (weiter unten beschrieben) können dazu
256 verwandt werden, ein erstelltes Programm vor Speicherverfälschungsangriffen
257 Speicherlecks, Verwendung nach Freigabe, Daten\-Zugriffswettläufen (»races«)
258 in Threads und Fehlern durch undefiniertes Verhalten zu bereinigen.
259 .TP
260 \fBaddress\fP
261 Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=address\fP zu
262 \fBLDFLAGS\fP und \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fP zu \fBCFLAGS\fP
263 und \fBCXXFLAGS\fP hinzu.
264 .TP
265 \fBthread\fP
266 Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=thread\fP zu
267 \fBCFLAGS\fP, \fBCXXFLAGS\fP und \fBLDFLAGS\fP hinzu.
268 .TP
269 \fBleak\fP
270 Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=leak\fP zu
271 \fBLDFLAGS\fP hinzu. Sie wird automatisch deaktiviert, falls entweder die
272 Funktionalitäten \fBaddress\fP oder \fBthread\fP aktiviert werden, da diese sie
273 einschließen.
274 .TP
275 \fBundefined\fP
276 Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=undefined\fP
277 zu \fBCFLAGS\fP, \fBCXXFLAGS\fP und \fBLDFLAGS\fP hinzu.
278 .SS Härtung
279 Mehrere Kompilierzeit\-Optionen (weiter unten beschrieben) können dazu
280 verwandt werden, ein erstelltes Programm gegen Speicherverfälschungsangriffe
281 zu härten, oder zusätzliche Warnungsmeldungen während der Übersetzung
282 auszugeben. Sie werden für Architekturen, die diese unterstützen,
283 standardmäßig aktiviert; die Ausnahmen sind unten angegeben.
284 .TP
285 \fBformat\fP
286 Diese Einstellung (standardmäßig aktiviert) fügt \fB\-Wformat
287 \-Werror=format\-security\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP
288 und \fBOBJCXXFLAGS\fP hinzu. Damit wird über inkorrekte
289 Formatzeichenkettenverwendungen gewarnt und zu einem Fehler führen, wenn
290 Formatfunktionen deart verwandt werden, dass daraus ein mögliches
291 Sicherheitsproblem werden könnte. Derzeit warnt dies über Aufrufe auf
292 \fBprintf\fP\- und \fBscanf\fP\-Funktionen, bei denen die Formatzeichenkette nicht
293 eine reine Zeichenkette ist und es keine Formatargumente gibt, wie in
294 \fBprintf(foo);\fP statt \fBprintf("%s", foo);\fP. Dies könnte ein
295 Sicherheitsproblem sein, falls die Formatzeichenkette aus einer
296 unvertrauenswürdigen Eingabe stammt und ‚%n’ enthält.
297 .
298 .TP
299 \fBfortify\fP
300 Diese Einstellung (standardmäßig aktiviert) fügt \fB\-D_FORTIFY_SOURCE=2\fP zu
301 \fBCPPFLAGS\fP hinzu. Während der Code\-Erstellung hat der Compiler umfangreiche
302 Informationen über Puffergrößen (wo möglich) und versucht, unsichere
303 unbegrenzte Pufferfunktionsaufrufe durch längenbegrenzte zu ersetzen. Das
304 ist besonders für alten, verkramten Code nützlich. Zusätzlich werden
305 Formatzeichenketten in schreibbarem Speicher, die ‚%n’ enthalten,
306 blockiert. Falls eine Anwendung von solchen Formatzeichenketten abhängt,
307 müssen dafür andere Lösungsmöglichkeiten gefunden werden.
308
309 Beachten Sie, dass die Quellen auch mit \fB\-O1\fP oder höher übersetzt werden
310 müssen, damit diese Option einen Effekt hat. Falls die Umgebungsvariable
311 \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP enthält, dann wird die Unterstützung von
312 \fBfortify\fP aufgrund neuer Warnungen von Glibc 2.16 und neuer deaktiviert.
313 .TP
314 \fBstackprotector\fP
315 Diese Einstellung (standardmäßig aktiviert falls stackprotectorstrong nicht
316 verwandt wird) fügt \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fP zu
317 \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP
318 und \fBFCFLAGS\fP hinzu. Dies fügt Sicherheitsprüfungen gegen die
319 Überschreibung des Stapelspeichers (Stacks) hinzu. Damit werden viele
320 mögliche Code\-Einfügeangriffe zu Abbruchsituationen. Im besten Fall werden
321 damit Code\-Einfügungsangriffe zu Diensteverweigerungsangriffen oder zu
322 keinen Problemen (abhängig von der Anwendung).
323
324 Diese Funktionalität benötigt das Linken mit Glibc (oder einem anderen
325 Anbieter von \fB__stack_chk_fail\fP). Sie muss daher deaktiviert werden, wenn
326 mit \fB\-nostdlib\fP oder \fB\-ffreestanding\fP oder Ähnlichem gebaut wird.
327 .
328 .TP
329 \fBstackprotectorstrong\fP
330 Diese Einstellung (standardmäßig aktiviert) fügt \fB\-fstack\-protector\-strong\fP
331 zu \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP,
332 \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu. Dies ist eine stärkere Variante von
333 \fBstackprotector\fP allerdings ohne signifikante Einbußen bei der Leistung.
334
335 Deaktivierung von \fBstackprotector\fP deaktiviert auch diese Einstellung.
336
337 Diese Funktionalität stellt die gleichen Anforderungen wie \fBstackprotector\fP
338 und benötigt zusätzlich Gcc 4.9 oder neuer.
339 .
340 .TP
341 \fBrelro\fP
342 Diese Einstellung (standardmäßig aktiviert) fügt \fB\-Wl,\-z,relro\fP zu
343 \fBLDFLAGS\fP hinzu. Während des Ladens des Programms müssen mehrere
344 ELF\-Speicherabschnitte vom Binder (Linker) geschrieben werden. Diese
345 Einstellung signalisiert dem Ladeprogramm, diese Abschnitte in
346 nur\-Lese\-Zugriff zu ändern, bevor die Steuerung an das Programm übergeben
347 wird. Insbesondere verhindert dies GOT\-Überschreibeangriffe. Falls diese
348 Option deaktiviert ist, wird auch \fBbindnow\fP deaktiviert.
349 .
350 .TP
351 \fBbindnow\fP
352 Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-Wl,\-z,now\fP zu
353 \fBLDFLAGS\fP hinzu. Während des Ladens des Programms werden alle dynamischen
354 Symbole aufgelöst, womit das gesamte PLT nur\-lesend markiert werden kann
355 (aufgrund von \fBrelro\fP oben). Diese Option kann nicht aktiviert werden,
356 falls \fBrelro\fP nicht aktiviert ist.
357 .
358 .TP
359 \fBpie\fP
360 Diese Einstellung (seit Dpkg 1.18.13 ohne Vorgabe und standardmäßig von GCC
361 auf den Debian\-Architekturen Amd64, Arm64, Armel, Armhf, I386,
362 Kfreebsd\-amd64, Kfreebsd\-i386, Mips, Mipsel, Mips64el, PPC64el, S390x, Sparc
363 und Sparc64 hinzugefügt) fügt die benötigten Optionen mittels
364 GCC\-Spec\-Dateien hinzu, falls sie zum Aktivieren oder Deaktivieren von PIE
365 benötigt werden. Falls aktiviert und von GCC hinzugefügt, ergänzt
366 nichts. Wenn aktiviert und nicht von GCC hinzugefügt, fügt \fB\-fPIE\fP zu
367 \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP
368 und \fBFCFLAGS\fP hinzu und \fB\-fPIE \-pie\fP zu \fBLDFLAGS\fP. Wenn deaktiviert und
369 von GCC hinzugefügt, fügt \fB\-fno\-PIE\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP,
370 \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu
371 und \fB\-fno\-PIE \-no\-pie\fP zu \fBLDFLAGS\fP.
372
373 »Position Independent Executable« (positionsunabhängige Programme) werden
374 benötigt, um »Address Space Layout Randomization« (Bereitstellung eines
375 zufälligen Adressbereichlayouts) auszunutzen, der von einigen
376 Kernelversionen bereitgestellt wird. Während ASLR bereits für Datenbereiche
377 auf dem Stapel (Stack) und Heap erzwungen werden kann (brk und mmap), müssen
378 die Codebereiche positionsunabhängig übersetzt werden. Laufzeitbibliotheken
379 machen dies bereits (\fB\-fPIC\fP), so dass sie ASLR automatisch erhalten, aber
380 Programm\-.text\-Regionen müssen mit PIE gebaut werden, um ASLR zu
381 erhalten. Wenn dies passiert, sind ROP\- (Return Oriented Programming)
382 Angriffe sehr viel schwerer durchzuführen, da es keine statischen Orte mehr
383 gibt, zu denen während eines Speicherverfälschungsangriffs hingesprungen
384 werden könnte.
385
386 PIE ist nicht mit \fB\-fPIC\fP kompatibel, daher muss im Allgemeinen Vorsicht
387 beim Bau von Laufzeitbibliotheksobjekten walten gelassen werden. Da aber der
388 ausgegebene PIE\-Schalter mittels GCC\-Spezifikationsdateien hinzugefügt wird,
389 sollte es immer sicher sein, sie bedingungslos zu setzen, unabhängig von dem
390 Objekttyp, der übersetzt oder gelinkt wird.
391
392 Statische Bibliotheken können von jedem Programm und anderen statischen
393 Bibliotheken benutzt werden. Abhängig von den zum Kompilieren aller Objekte
394 innerhalb einer statischen Bibliothek verwandten Schaltern können diese
395 Bibliotheken von verschiedenen Gruppen von Objekten verwandt werden:
396
397 .RS
398 .TP
399 keine
400 Kann weder in ein PIE\-Programm noch in eine Laufzeitbibliothek gelinkt
401 werden.
402 .TP
403 \fB\-fPIE\fP
404 Kann in jedes Programm, aber nicht in eine Laufzeitbibliothek gelinkt werden
405 (empfohlen).
406 .TP
407 \fB\-fPIC\fP
408 Kann in jedes Programm und jede Laufzeitbibliothek gelinkt werden.
409 .RE
410
411 .IP
412 Falls es notwendig ist, diese Schalter manuell zu setzen und die
413 GGC\-Spezifikations\-Hinzufügung zu umgehen, müssen mehrere Dinge beachtet
414 werden. Die bedingungslose und explizite Übergabe von \fB\-fPIE\fP, \fB\-fpie\fP
415 oder \fB\-pie\fP an das Bausystem mit Libtool ist sicher, da diese Schalter
416 entfernt werden, wenn Laufzeit\-Bibliotheken gebaut werden. Andernfalls
417 könnte es bei Projekten, die sowohl Programme wie auch Laufzeit\-Bibliotheken
418 bauen, notwendig sein, dass Sie beim Bau der Laufzeit\-Bibliotheken
419 sicherstellen, dass \fB\-fPIC\fP immer als letztes an die Kompilierungsschalter
420 wie \fBCFLAGS\fP übergeben wird (so dass es jedes frühere \fB\-PIE\fP außer Kraft
421 setzen kann) und \fB\-shared\fP als letztes an Link\-Schalter wie \fBLDFLAGS\fP
422 übergeben wird (so dass es jedes frühere \fB\-pie\fP außer Kraft setzen
423 kann). \fBHinweis\fP: Das sollte mit der Vorgabe\-GCC\-Spezifikationsmaschinerie
424 nicht notwendig sein.
425
426 .IP
427 Zusätzlich können auf einigen Architekturen mit sehr wenigen Registern (dazu
428 gehört aber i386 nicht mehr, seitdem in GCC >= 5 Optimierungen
429 erfolgten) Leistungsverluste von bis zu 15% in sehr text\-Segment\-lastigen
430 Anwendungsfällen auftreten, da PIE über allgemeine Register implementiert
431 ist; in den meisten Anwendungsfällen sind dies weniger als 1%. Architekturen
432 mit mehr allgemeinen Registern (z.B. Amd64) erfahren nicht diese
433 Schlimmstfall\-Strafe.
434 .SS Reproduzierbarkeit
435 Die Kompilierzeit\-Optionen (weiter unten beschrieben) können dazu verwandt
436 werden, die Reproduzierbarkeit zu verbessern oder zusätzliche
437 Warnungsmeldungen während der Übersetzung auszugeben. Sie werden für
438 Architekturen, die diese unterstützen, standardmäßig aktiviert; die
439 Ausnahmen sind unten angegeben.
440 .TP
441 \fBtimeless\fP
442 Diese (standardmäßig aktivierte) Einstellung fügt \fB\-Wdate\-time\fP zu
443 \fBCPPFLAGS\fP hinzu. Dies führt zu Warnungen, wenn die Makros \fB__TIME__\fP,
444 \fB__DATE__\fP und \fB__TIMESTAMP__\fP verwandt werden.
445 .
446 .TP
447 \fBfixdebugpath\fP
448 Diese Einstellung (standardmäßig aktiviert) fügt
449 \fB\-fdebug\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP,
450 \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu,
451 wobei \fBBUILDPATH\fP auf das oberste Verzeichnis des bauenden Pakets gesetzt
452 wird. Dies führt dazu, dass der Baupfad aus allen erstellten Debug\-Symbolen
453 entfernt wird.
454 .
455 .SH UMGEBUNG
456 Es gibt zwei Gruppen von Umgebungsvariablen, die den gleichen Vorgang
457 durchführen. Der erste (DEB_\fISchalter\fP_\fIVorg\fP) sollte niemals innerhalb
458 von \fBdebian/rules\fP verwandt werden. Er ist für Benutzer gedacht, die das
459 Quellpaket mit anderen Bauschaltern erneut bauen möchten. Der zweite Satz
460 (DEB_\fISchalter\fP_MAINT_\fIVorg\fP) sollte nur durch Paketbetreuer in
461 \fBdebian/rules\fP verwandt werden, um die entstehenden Bauschalter zu ändern.
462 .TP
463 \fBDEB_\fP\fISchalter\fP\fB_SET\fP
464 .TQ
465 \fBDEB_\fP\fISchalter\fP\fB_MAINT_SET\fP
466 Diese Variable kann zum Erzwingen des für \fISchalter\fP zurückgegebenen Werts
467 verwandt werden.
468 .TP
469 \fBDEB_\fP\fISchalter\fP\fB_STRIP\fP
470 .TQ
471 \fBDEB_\fP\fISchalter\fP\fB_MAINT_STRIP\fP
472 Diese Variable kann zum Bereitstellen einer durch Leerzeichen getrennten
473 Liste von Optionen verwandt werden, die aus dem Satz von \fISchalter\fP
474 zurückgelieferten Schaltern entfernt werden.
475 .TP
476 \fBDEB_\fP\fISchalter\fP\fB_APPEND\fP
477 .TQ
478 \fBDEB_\fP\fISchalter\fP\fB_MAINT_APPEND\fP
479 Diese Variable kann zum Anhängen ergänzender Optionen zum Wert, der von
480 \fISchalter\fP zurückgegeben wird, verwandt werden.
481 .TP
482 \fBDEB_\fP\fISchalter\fP\fB_PREPEND\fP
483 .TQ
484 \fBDEB_\fP\fISchalter\fP\fB_MAINT_PREPEND\fP
485 Diese Variable kann zum Voranstellen ergänzender Optionen zum Wert, der von
486 \fISchalter\fP zurückgegeben wird, verwandt werden.
487 .TP
488 \fBDEB_BUILD_OPTIONS\fP
489 .TQ
490 \fBDEB_BUILD_MAINT_OPTIONS\fP
491 Diese Variablen können von Benutzern oder Betreuern zum Deaktivieren oder
492 Aktivieren verschiedener Bereichsfunktionalitäten benutzt werden, die
493 Bauschalter beeinflussen. Die Variable \fBDEB_BUILD_MAINT_OPTIONS\fP setzt jede
494 Einstellung in den Funktionalitätsbereichen \fBDEB_BUILD_OPTIONS\fP außer
495 Kraft. Lesen Sie den Abschnitt \fBFUNKTIONALITÄTSBEREICHE\fP für weitere
496 Details.
497 .TP
498 \fBDEB_VENDOR\fP
499 Diese Einstellung definiert den aktuellen Lieferanten. Falls nicht gesetzt,
500 wird er aus \fB%PKGCONFDIR%/origins/default\fP ermittelt.
501 .TP
502 \fBDEB_BUILD_PATH\fP
503 Diese Variable setzt den Baupfad (seit Dpkg 1.18.8), der in Funktionalitäten
504 wie \fBfixdebugpath\fP verwandt wird, so dass sie durch den Aufrufenden
505 gesteuert werden können. Diese Variable ist derzeit spezifisch für Debian
506 und Derivative.
507 .
508 .SH DATEIEN
509 .SS Konfigurationsdateien
510 .TP
511 \fB%PKGCONFDIR%/buildflags.conf\fP
512 Systemweite Konfigurationsdatei
513 .TP
514 \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP oder
515 .TQ
516 \fB$HOME/.config/dpkg/buildflags.conf\fP
517 Benutzer\-Konfigurationsdatei
518 .SS Paketierungsunterstützung
519 .TP
520 \fB%PKGDATADIR%/buildflags.mk\fP
521 Makefile\-Schnipsel, das alle von \fBdpkg\-buildflags\fP unterstützten Schalter
522 in Variablen laden (und optional exportieren) wird. (seit Dpkg 1.16.1)
523 .
524 .SH BEISPIELE
525 Um Bauschalter an eine Baubefehl in einer Makefile zu übergeben:
526 .PP
527 .RS 4
528 .nf
529 $(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline)
530
531 \&./configure $(shell dpkg\-buildflags \-\-export=cmdline)
532 .fi
533 .RE
534 .PP
535 Um Bauschalter in einem Shell\-Skript oder Shell\-Fragement zu setzen, kann
536 \fBeval\fP verwendet werden, um die Ausgabe zu interpretieren und die Schalter
537 in die Umgebung zu exportieren:
538 .PP
539 .RS 4
540 .nf
541 eval "$(dpkg\-buildflags \-\-export=sh)" && make
542 .fi
543 .RE
544 .PP
545 Oder die Positionsparameter zu setzen, die an einen Befehl übergeben werden
546 sollen:
547 .PP
548 .RS 4
549 .nf
550 eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)"
551 for dir in a b c; do (cd $dir && ./configure "$@" && make); done
552 .fi
553 .RE
554 .
555 .SS "Verwendung in debian/rules"
556 Sie sollten \fBdpkg\-buildflags\fP aufrufen oder \fBbuildflags.mk\fP in die Datei
557 \fBdebian/rules\fP einbinden, um die benötigten Bauschalter, die an das
558 Bausystem weitergegeben werden sollen, abzufragen. Beachten Sie, dass ältere
559 Versionen von \fBdpkg\-buildpackage\fP (vor Dpkg 1.16.1) diese Variablen
560 automatisch exportierten. Allerdings sollten Sie sich nicht darauf
561 verlassen, da dies den manuellen Aufruf von \fBdebian/rules\fP nicht korrekt
562 ermöglicht.
563 .PP
564 Für Pakete mit Autoconf\-artigen Bausystemen können Sie die relevanten
565 Optionen direkt wie oben gezeigt an Configure oder \fBmake\fP(1) übergeben.
566 .PP
567 Für andere Bausysteme oder wenn Sie feingranularere Steuerung benötigen
568 (welcher Schalter wo weitergegeben wird), können Sie \fB\-\-get\fP
569 verwenden. Oder Sie können stattdessen \fBbuildflags.mk\fP einbinden, das sich
570 um den Aufruf von \fBdpkg\-buildflags\fP kümmert und die Bauschalter in
571 Make\-Variablen speichert.
572 .PP
573 Falls Sie alle Bauschalter in die Umgebung exportieren möchten (wo sie dann
574 vom Baussystem eingelesen werden können):
575 .PP
576 .RS 4
577 .nf
578 DPKG_EXPORT_BUILDFLAGS = 1
579 include %PKGDATADIR%/buildflags.mk
580 .fi
581 .RE
582 .PP
583 Für zusätzliche Steuerung was exportiert wird, können Sie die Variablen
584 manuell exportieren (da keine standardmäßig exportiert werden):
585 .PP
586 .RS 4
587 .nf
588 include %PKGDATADIR%/buildflags.mk
589 export CPPFLAGS CFLAGS LDFLAGS
590 .fi
591 .RE
592 .PP
593 Und natürlich können Sie die Schalter manuell an Befehle weitergeben:
594 .PP
595 .RS 4
596 .nf
597 include %PKGDATADIR%/buildflags.mk
598 build\-arch:
599 \& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
600 .fi
601 .RE
602 .SH ÜBERSETZUNG
603 Die deutsche Übersetzung wurde 2004, 2006-2017 von Helge Kreutzmann
604 <debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de> und
605 2008 von Sven Joachim <svenjoac@gmx.de>
606 angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die
607 GNU General Public License Version 2 oder neuer für die Kopierbedingungen.
608 Es gibt KEINE HAFTUNG.