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\-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. |