man-pages/de/man1/dpkg-buildflags.1.html
2021-03-31 01:06:50 +01:00

723 lines
32 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-Programmsammlung (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">&nbsp;</A>
<H2>BEZEICHNUNG</H2>
dpkg-buildflags - liefert Bauschalter zum Einsatz beim Paketbau
<A NAME="lbAC">&nbsp;</A>
<H2>&Uuml;BERSICHT</H2>
<B>dpkg-buildflags</B> [<I>Option</I> …] [<I>Befehl</I>]
<A NAME="lbAD">&nbsp;</A>
<H2>BESCHREIBUNG</H2>
<B>dpkg-buildflags</B> ist ein Werkzeug, das zum Abfragen der zu verwendenen
Kompilierungsschalter f&uuml;r den Bau von Debian-Paketen eingesetzt wird.
Die Standardschalter werden vom Lieferanten definiert, sie k&ouml;nnen auf
mehrere Arten erweitert/&uuml;berschrieben werden:
<DL COMPACT>
<DT id="1">1.<DD>
systemweit mit <B>/etc/dpkg/buildflags.conf</B>
<DT id="2">2.<DD>
f&uuml;r den aktuellen Benutzer mit <B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B>,
wobei <B>$XDG_CONFIG_HOME</B> standardm&auml;&szlig;ig auf <B>$HOME/.config</B> gesetzt ist
<DT id="3">3.<DD>
tempor&auml;r durch den Benutzer mittels Umgebungsvariablen (siehe Abschnitt
<B>UMGEBUNG</B>)
<DT id="4">4.<DD>
dynamisch durch den Paketverwalter mittels Umgebungsvariablen, die &uuml;ber
<B>debian/rules</B> gesetzt wurden (siehe Abschnitt <B>UMGEBUNG</B>)
</DL>
<P>
Die Konfigurationsdateien k&ouml;nnen vier Arten von Direktiven enthalten:
<DL COMPACT>
<DT id="5"><B>SET</B><I> Schalter Wert</I><DD>
&Uuml;berschreibt den Schalter namens <I>Schalter</I>, um den Wert <I>Wert</I> zu
erhalten.
<DT id="6"><B>STRIP</B><I> Schalter Wert</I><DD>
Aus dem Schalter namens <I>Schalter</I> alle in <I>Wert</I> aufgef&uuml;hrten Bauschalter
entfernen
<DT id="7"><B>APPEND</B><I> Schalter Wert</I><DD>
Erweitert den Schalter namens <I>Schalter</I> durch Anh&auml;ngen der in <I>Wert</I>
angegebenen Optionen. Ein Leerzeichen wird vor den angeh&auml;ngten Wert
vorangestellt, falls der derzeitige Wert nicht leer ist.
<DT id="8"><B>PREPEND</B><I> Schalter Wert</I><DD>
Erweitert den Schalter namens <I>Schalter</I> durch Voranstellen der in <I>Wert</I>
angegebenen Optionen. Ein Leerzeichen wird hinter den vorangestellten Wert
angeh&auml;ngt, falls der derzeitige Wert nicht leer ist.
</DL>
<P>
Die Konfigurationsdateien k&ouml;nnen Kommentare auf Zeilen enthalten, die mit
einer Raute (#) beginnen. Leere Zeilen werden auch ignoriert.
<A NAME="lbAE">&nbsp;</A>
<H2>BEFEHLE</H2>
<DL COMPACT>
<DT id="9"><B>--dump</B><DD>
Auf der Standardausgabe alle Kompilierschalter und ihre Werte ausgeben. Es
wird ein Schalter pro Zeile ausgegeben, wobei der Werte durch ein
Gleichheitszeichen (Bq<I>Schalter</I>=<I>Wert</I>") abgetrennt wird. Dies ist die
Standardaktion.
<DT id="10"><B>--list</B><DD>
Gibt die Liste der vom aktuellen Lieferanten unterst&uuml;tzen Schalter (eine pro
Zeile) aus. Lesen Sie den Abschnitt <B>UNTERST&Uuml;TZTE SCHALTER</B> f&uuml;r weitere
Informationen &uuml;ber sie.
<DT id="11"><B>--status</B><DD>
Alle Informationen anzeigen, die zum Verst&auml;ndnis des Verhaltens von
<B>dpkg-buildflags</B> n&uuml;tzlich sein k&ouml;nnen (seit Dpkg 1.16.5): relevante
Umgebungsvariablen, aktueller Lieferant, Zustand der Funktionsschalter. Auch
die entstehenden Compiler-Schalter mit ihrem Ursprung werden ausgeben.
<P>
Dies ist zur Ausf&uuml;hrung in <B>debian/rules</B> gedacht, so dass das Bauprotokoll
einen klaren Nachweis der verwandten Bauschalter enth&auml;lt. Dies kann zur
Diagnose von Problemen in Zusammenhang mit diesen n&uuml;tzlich sein.
<DT id="12"><B>--export=</B><I>Format</I><DD>
Auf der Standardausgabe Befehle ausgeben, die dazu verwandt werden k&ouml;nnen,
alle Kompilierschalter f&uuml;r bestimmte Werkzeuge zu exportieren. Falls der
Wert von <I>Format</I> nicht angegeben wird, wird <B>sh</B> angenommen. Nur
Kompilierschalter, die mit einem Gro&szlig;buchstaben beginnen, werden
aufgenommen. Bei allen anderen wird angenommen, dass sie f&uuml;r die Umgebung
nicht geeignet sind. Unterst&uuml;tzte Formate:
<DL COMPACT><DT id="13"><DD>
<DL COMPACT>
<DT id="14"><B>sh</B><DD>
Shell-Befehle, um alle Kompilierungsschalter in der Umgebung zu setzen und
zu exportieren. Die Schalterwerte werden maskiert, so dass die Ausgabe f&uuml;r
Auswertung durch eine Shell bereit ist.
<DT id="15"><B>cmdline</B><DD>
Argumente, die an die Befehlszeile eines Bauprogrammes &uuml;bergeben werden, um
alle &Uuml;bersetzungsschalter zu verwenden (seit Dpkg 1.17.0). Die Schalterwerte
werden in Shell-Syntax maskiert.
<DT id="16"><B>configured</B> (konfiguriert)<DD>
Dies ist ein historischer Alias f&uuml;r <B>cmdline</B>.
<DT id="17"><B>make</B><DD>
Make-Direktiven, um alle Kompilierungsschalter in der Umgebung zu setzen und
zu exportieren. Die Ausgabe kann in ein Makefile-Fragment geschrieben und
mit einer <B>include</B>-Direktive ausgewertet werden.
</DL>
</DL>
<DT id="18"><B>--get</B><I> Schalter</I><DD>
Gibt den Wert des Schalters auf der Standardausgabe aus. Beendet sich mit 0,
falls der Schalter bekannt ist, andernfalls mit 1.
<DT id="19"><B>--origin</B><I> Schalter</I><DD>
Gibt den Ursprung des von <B>--get</B> gelieferten Werts aus. Beendet sich mit
0, falls der Schalter bekannt ist, andernfalls mit 1. Der Ursprung kann
einer der folgenden Werte sein:
<DL COMPACT><DT id="20"><DD>
<DL COMPACT>
<DT id="21"><B>vendor</B><DD>
der urspr&uuml;nglich vom Lieferanten gesetzte Schalter wird zur&uuml;ckgeliefert
<DT id="22"><B>system</B><DD>
der Schalter wurde durch eine systemweite Konfiguration gesetzt/ver&auml;ndert
<DT id="23"><B>user</B><DD>
der Schalter wurde durch eine benutzerspezifische Konfiguration
gesetzt/ver&auml;ndert
<DT id="24"><B>env</B><DD>
der Schalter wurde durch eine umgebungsspezifische Konfiguration
gesetzt/ver&auml;ndert
</DL>
</DL>
<DT id="25"><B>--query</B><DD>
Alle Informationen anzeigen, die zur Erkl&auml;rung des Verhaltens des Programms
hilfreich sein k&ouml;nnten: aktueller Lieferant, relevante Umgebungsvariablen,
Funktionalit&auml;tsbereiche, Zustand der Funktionsschalter und die
Complier-Schalter mit ihrem Ursprung (seit Dpkg 1.19.0).
<DT id="26"><DD>
Zum Beispiel:
<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> Bereich</I><DD>
Gibt die Funktionalit&auml;ten, die f&uuml;r den &uuml;bergebenen Bereich aktiviert sind,
aus (seit Dpkg 1.16.2). Die einzigen unter Debian und abgeleiteten
Distributionen derzeit erkannten Bereiche sind <B>future</B>, <B>qa</B>,
<B>reproducible</B>, <B>sanitize</B> und <B>hardening</B>. Lesen Sie den Abschnitt
<B>FUNKTIONALIT&Auml;TSBEREICHE</B> f&uuml;r weitere Details. Beendet sich mit 0, falls
der Bereich bekannt ist, andernfalls mit 1.
<DT id="28"><DD>
Das Ausgabeformat ist im RFC822-Format, mit einem Abschnitt pro
Funktionalit&auml;t. Beispiel:
<DT id="29"><DD>
<PRE>
Feature: pie
Enabled: yes
Feature: stackprotector
Enabled: yes
</PRE>
<DT id="30"><B>--help</B><DD>
Zeige den Bedienungshinweis und beende.
<DT id="31"><B>--version</B><DD>
Gebe die Version aus und beende sich.
</DL>
<A NAME="lbAF">&nbsp;</A>
<H2>UNTERST&Uuml;TZTE SCHALTER</H2>
<DL COMPACT>
<DT id="32"><B>CFLAGS</B><DD>
Optionen f&uuml;r den C-Compiler. Der vom Lieferanten gesetzte Standardwert
enth&auml;lt <I>-g</I> und die Standard Optimierungsstufe (normalerweise <I>-O2</I> oder
<B>-O0</B>, falls die Umgebungsvariable <B>DEB_BUILD_OPTIONS</B> <I>noopt</I> definiert.
<DT id="33"><B>CPPFLAGS</B><DD>
Optionen f&uuml;r den C-Pr&auml;prozessor. Standardwert: leer
<DT id="34"><B>CXXFLAGS</B><DD>
Optionen f&uuml;r den C++-Compiler. Identisch zu <B>CFLAGS</B>.
<DT id="35"><B>OBJCFLAGS</B><DD>
Optionen f&uuml;r den Objective-C-Compiler. Identisch zu <B>CFLAGS</B>.
<DT id="36"><B>OBJCXXFLAGS</B><DD>
Optionen f&uuml;r den Objective-C++-Compiler. Identisch zu <B>CXXFLAGS</B>.
<DT id="37"><B>GCJFLAGS</B><DD>
Optionen f&uuml;r den GNU-Java-Compiler (gcj). Eine Untermenge von <B>CFLAGS</B>.
<DT id="38"><B>FFLAGS</B><DD>
Optionen f&uuml;r den Fortran-77-Compiler. Eine Untermenge von <B>CFLAGS</B>.
<DT id="39"><B>FCFLAGS</B><DD>
Optionen f&uuml;r den Fortran-9x-Compiler. Identisch zu <B>FFLAGS</B>.
<DT id="40"><B>LDFLAGS</B><DD>
Optionen die beim Linken von Programmen oder Laufzeitbibliotheken an den
Compiler weitergegeben werden (falls der Linker direkt aufgerufen wird,
m&uuml;ssen <B>-Wl</B> und <B>,</B> aus diesen Optionen entfernt werden). Standardm&auml;&szlig;ig
leer.
</DL>
<P>
Neue Schalter k&ouml;nnen in Zukunft hinzugef&uuml;gt werden, falls die Notwendigkeit
aufkommt (beispielsweise, um weitere Sprachen zu unterst&uuml;tzen).
<A NAME="lbAG">&nbsp;</A>
<H2>FUNKTIONALIT&Auml;TSBEREICHE</H2>
<P>
Jede Bereichsfunktionalit&auml;t kann durch den entsprechenden Bereichswert in
den Umgebungsvariablen <B>DEB_BUILD_OPTIONS</B> und <B>DEB_BUILD_MAINT_OPTIONS</B>
mit den bq<B>+</B>'- und bq<B>-</B>'-Schaltern aktiviert und deaktiviert werden. Soll
beispielsweise f&uuml;r <B>hardening</B> die Bqpie"-Funktionalit&auml;t aktiviert und die
Bqfortify"-Funktionalit&auml;t deaktiviert werden, k&ouml;nnen Sie Folgendes in
<B>debian/rules</B> verwenden:
<P>
<BR>&nbsp;&nbsp;export&nbsp;DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
<P>
Die spezielle Funktionalit&auml;t <B>all</B> (in allen Bereichen g&uuml;ltig) kann dazu
verwandt werden, alle Bereichsfunktionalit&auml;ten auf einmal zu aktivieren oder
zu deaktiveren. Um daher alles im Bereich <B>hardening</B> zu deaktiveren und
nur Bqformat" und Bqfortify" zu aktiveren, kann Folgendes eingesetzt werden:
<P>
<BR>&nbsp;&nbsp;export&nbsp;DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
<A NAME="lbAH">&nbsp;</A>
<H3>future</H3>
Mehrere Optionen zur Kompilierung (Details weiter unten) k&ouml;nnen verwandt
werden, um Funktionen zu aktivieren, die standardm&auml;&szlig;ig aktiviert sein
sollten, dies aber aufgrund von R&uuml;ckw&auml;rtskompatibilit&auml;tsgr&uuml;nden nicht sein
k&ouml;nnen.
<DL COMPACT>
<DT id="41"><B>lfs</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) aktiviert die Unterst&uuml;tzung
f&uuml;r gro&szlig;e Dateien auf 32-Bit-Architekturen, bei denen ihre ABI diese
Unterst&uuml;tzung nicht standardm&auml;&szlig;ig aktiviert, indem <B>-D_LARGEFILE_SOURCE
-D_FILE_OFFSET_BITS=64</B> zu <B>CPPFLAGS</B> hinzugef&uuml;gt wird.
</DL>
<A NAME="lbAI">&nbsp;</A>
<H3>QS</H3>
Mehrere Optionen zur Kompilierung (Details weiter unten) k&ouml;nnen verwandt
werden, um dabei zu helfen, Probleme im Quellcode oder im Bausystem zu
erkennen.
<DL COMPACT>
<DT id="42"><B>bug</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt Warnoptionen hinzu, die
zuverl&auml;ssig problematischen Quellcode erkennen. Diese Warnungen sind
fatal. Die einzigen derzeit unterst&uuml;tzten Schalter sind <B>CFLAGS</B> und
<B>CXXFLAGS</B>, wobei die Schalter auf <B>-Werror=array-bounds</B>,
<B>-Werror=clobbered</B>, <B>-Werror=implicit-function-declaration</B> und
<B>-Werror=volatile-register-var</B> gesetzt werden.
<DT id="43"><B>canary</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt
Pseudo-Kanarienv&ouml;gel-Optionen zu den Bauschaltern hinzu, so dass die
Bauprotokolle &uuml;berpr&uuml;ft werden k&ouml;nnen, wie die Bauschalter sich
fortpflanzen. Dies erlaubt, Auslassungen in den normalen
Bauschaltereinstellungen zu finden. Derzeit werden nur die Schalter
<B>CPPFLAGS</B>, <B>CFLAGS</B>, <B>OBJCFLAGS</B>, <B>CXXFLAGS</B> und <B>OBJCXXFLAGS</B>
unterst&uuml;tzt, wobei die Schalter auf
<B>-D__DEB_CANARY_</B><I>Schalter</I>_<I>Zufallskennung</I><B>__</B> gesetzt werden, und
<B>LDFLAGS</B>, das auf <B>-Wl,-z,deb-canary-</B><I>Zufallskennung</I> gesetzt wird.
</DL>
<A NAME="lbAJ">&nbsp;</A>
<H3>Bereinigung</H3>
Mehrere Kompilierzeit-Optionen (weiter unten beschrieben) k&ouml;nnen dazu
verwandt werden, ein erstelltes Programm vor Speicherverf&auml;lschungsangriffen
Speicherlecks, Verwendung nach Freigabe, Daten-Zugriffswettl&auml;ufen (&raquo;races&laquo;)
in Threads und Fehlern durch undefiniertes Verhalten zu
bereinigen. <B>Hinweis</B>: Diese Optionen sollten <B>nicht</B> beim Bauen im
Produktivbetrieb benutzt werden, da sie die Zuverl&auml;ssigkeit von
spezifikationsgetreuem Code, die Sicherheit oder sogar die Funktionalit&auml;t
reduzieren k&ouml;nnen.
<DL COMPACT>
<DT id="44"><B>address</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt <B>-fsanitize=address</B> zu
<B>LDFLAGS</B> und <B>-fsanitize=address -fno-omit-frame-pointer</B> zu <B>CFLAGS</B>
und <B>CXXFLAGS</B> hinzu.
<DT id="45"><B>thread</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt <B>-fsanitize=thread</B> zu
<B>CFLAGS</B>, <B>CXXFLAGS</B> und <B>LDFLAGS</B> hinzu.
<DT id="46"><B>leak</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt <B>-fsanitize=leak</B> zu
<B>LDFLAGS</B> hinzu. Sie wird automatisch deaktiviert, falls entweder die
Funktionalit&auml;ten <B>address</B> oder <B>thread</B> aktiviert werden, da diese sie
einschlie&szlig;en.
<DT id="47"><B>undefined</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt <B>-fsanitize=undefined</B>
zu <B>CFLAGS</B>, <B>CXXFLAGS</B> und <B>LDFLAGS</B> hinzu.
</DL>
<A NAME="lbAK">&nbsp;</A>
<H3>H&auml;rtung</H3>
Mehrere Kompilierzeit-Optionen (weiter unten beschrieben) k&ouml;nnen dazu
verwandt werden, ein erstelltes Programm gegen Speicherverf&auml;lschungsangriffe
zu h&auml;rten, oder zus&auml;tzliche Warnungsmeldungen w&auml;hrend der &Uuml;bersetzung
auszugeben. Sie werden f&uuml;r Architekturen, die diese unterst&uuml;tzen,
standardm&auml;&szlig;ig aktiviert; die Ausnahmen sind unten angegeben.
<DL COMPACT>
<DT id="48"><B>format</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig aktiviert) f&uuml;gt <B>-Wformat
-Werror=format-security</B> zu <B>CFLAGS</B>, <B>CXXFLAGS</B> <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>
und <B>OBJCXXFLAGS</B> hinzu. Damit wird &uuml;ber inkorrekte
Formatzeichenkettenverwendungen gewarnt und zu einem Fehler f&uuml;hren, wenn
Formatfunktionen deart verwandt werden, dass daraus ein m&ouml;gliches
Sicherheitsproblem werden k&ouml;nnte. Derzeit warnt dies &uuml;ber Aufrufe auf
<B>printf</B>- und <B>scanf</B>-Funktionen, bei denen die Formatzeichenkette nicht
eine reine Zeichenkette ist und es keine Formatargumente gibt, wie in
<B>printf(foo);</B> statt <B>printf(&quot;%s&quot;, foo);</B>. Dies k&ouml;nnte ein
Sicherheitsproblem sein, falls die Formatzeichenkette aus einer
unvertrauensw&uuml;rdigen Eingabe stammt und bq%n' enth&auml;lt.
<DT id="49"><B>fortify</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig aktiviert) f&uuml;gt <B>-D_FORTIFY_SOURCE=2</B> zu
<B>CPPFLAGS</B> hinzu. W&auml;hrend der Code-Erstellung hat der Compiler umfangreiche
Informationen &uuml;ber Puffergr&ouml;&szlig;en (wo m&ouml;glich) und versucht, unsichere
unbegrenzte Pufferfunktionsaufrufe durch l&auml;ngenbegrenzte zu ersetzen. Das
ist besonders f&uuml;r alten, verkramten Code n&uuml;tzlich. Zus&auml;tzlich werden
Formatzeichenketten in schreibbarem Speicher, die bq%n' enthalten,
blockiert. Falls eine Anwendung von solchen Formatzeichenketten abh&auml;ngt,
m&uuml;ssen daf&uuml;r andere L&ouml;sungsm&ouml;glichkeiten gefunden werden.
<P>
Beachten Sie, dass die Quellen auch mit <B>-O1</B> oder h&ouml;her &uuml;bersetzt werden
m&uuml;ssen, damit diese Option einen Effekt hat. Falls die Umgebungsvariable
<B>DEB_BUILD_OPTIONS</B> <I>noopt</I> enth&auml;lt, dann wird die Unterst&uuml;tzung von
<B>fortify</B> aufgrund neuer Warnungen von Glibc 2.16 und neuer deaktiviert.
<DT id="50"><B>stackprotector</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig aktiviert falls stackprotectorstrong nicht
verwandt wird) f&uuml;gt <B>-fstack-protector --param=ssp-buffer-size=4</B> zu
<B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B>
und <B>FCFLAGS</B> hinzu. Dies f&uuml;gt Sicherheitspr&uuml;fungen gegen die
&Uuml;berschreibung des Stapelspeichers (Stacks) hinzu. Damit werden viele
m&ouml;gliche Code-Einf&uuml;geangriffe zu Abbruchsituationen. Im besten Fall werden
damit Code-Einf&uuml;gungsangriffe zu Diensteverweigerungsangriffen oder zu
keinen Problemen (abh&auml;ngig von der Anwendung).
<P>
Diese Funktionalit&auml;t ben&ouml;tigt das Linken mit Glibc (oder einem anderen
Anbieter von <B>__stack_chk_fail</B>). Sie muss daher deaktiviert werden, wenn
mit <B>-nostdlib</B> oder <B>-ffreestanding</B> oder &Auml;hnlichem gebaut wird.
<DT id="51"><B>stackprotectorstrong</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig aktiviert) f&uuml;gt <B>-fstack-protector-strong</B>
zu <B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>,
<B>FFLAGS</B> und <B>FCFLAGS</B> hinzu. Dies ist eine st&auml;rkere Variante von
<B>stackprotector</B> allerdings ohne signifikante Einbu&szlig;en bei der Leistung.
<P>
Deaktivierung von <B>stackprotector</B> deaktiviert auch diese Einstellung.
<P>
Diese Funktionalit&auml;t stellt die gleichen Anforderungen wie <B>stackprotector</B>
und ben&ouml;tigt zus&auml;tzlich Gcc 4.9 oder neuer.
<DT id="52"><B>relro</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig aktiviert) f&uuml;gt <B>-Wl,-z,relro</B> zu
<B>LDFLAGS</B> hinzu. W&auml;hrend des Ladens des Programms m&uuml;ssen mehrere
ELF-Speicherabschnitte vom Binder (Linker) geschrieben werden. Diese
Einstellung signalisiert dem Ladeprogramm, diese Abschnitte in
nur-Lese-Zugriff zu &auml;ndern, bevor die Steuerung an das Programm &uuml;bergeben
wird. Insbesondere verhindert dies GOT-&Uuml;berschreibeangriffe. Falls diese
Option deaktiviert ist, wird auch <B>bindnow</B> deaktiviert.
<DT id="53"><B>bindnow</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt <B>-Wl,-z,now</B> zu
<B>LDFLAGS</B> hinzu. W&auml;hrend des Ladens des Programms werden alle dynamischen
Symbole aufgel&ouml;st, womit das gesamte PLT nur-lesend markiert werden kann
(aufgrund von <B>relro</B> oben). Diese Option kann nicht aktiviert werden,
falls <B>relro</B> nicht aktiviert ist.
<DT id="54"><B>pie</B><DD>
Diese Einstellung (seit Dpkg 1.18.23 ohne globale Vorgabe, da sie jetzt
standardm&auml;&szlig;ig durch GCC auf den Debian-Architekturen Amd64, Arm64, Armel,
Armhf, Hurd-i386, I386, Kfreebsd-amd64, Kfreebsd-i386, Mips, Mipsel,
Mips64el, Powerpc, PPC64, PPC64el, Riscv64, S390x, Sparc und Sparc64
aktiviert ist) f&uuml;gt, falls ben&ouml;tigt, die ben&ouml;tigten Optionen, um PIE zu
aktivieren oder zu deaktiveren, &uuml;ber GCC-Spezifikationsdateien hinzu,
abh&auml;ngig davon, ob GCC auf diesen Architekturen die Schalter selbst
einspeist oder nicht. Wenn die Einstellung aktiviert ist und GCC den
Schalter einspeist, f&uuml;gt dies nichts hinzu. Wenn die Einstellung aktiviert
ist und GCC den Schalter nicht einspeist, dann f&uuml;gt es <B>-fPIE</B> (mittels
<I>/usr/share/dpkg/pie-compiler.specs</I>) zu <B>CFLAGS</B>, <B>CXXFLAGS</B>, <B>OBJCFLAGS</B>,
<B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> und <B>FCFLAGS</B> und <B>-fPIE -pie</B>
(mittels <I>/usr/share/dpkg/pie-link.specs</I>) zu <B>LDFLAGS</B> hinzu. Wenn die
Einstellung deaktiviert ist und GCC den Schalter einspeist, dann f&uuml;gt es
<B>-fno-PIE</B> (mittels <I>/usr/share/dpkg/no-pie-compile.specs</I>) zu <B>CFLAGS</B>,
<B>CXXFLAGS</B>, <B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> und
<B>FCFLAGS</B> und <B>-fno-PIE -no-pie</B> (mittels
<I>/usr/share/dpkg/no-pie-link.specs</I>) zu <B>LDFLAGS</B> hinzu.
<P>
&raquo;Position Independent Executable&laquo; (positionsunabh&auml;ngige Programme) werden
ben&ouml;tigt, um &raquo;Address Space Layout Randomization&laquo; (Bereitstellung eines
zuf&auml;lligen Adressbereichlayouts) auszunutzen, der von einigen
Kernelversionen bereitgestellt wird. W&auml;hrend ASLR bereits f&uuml;r Datenbereiche
auf dem Stapel (Stack) und Heap erzwungen werden kann (brk und mmap), m&uuml;ssen
die Codebereiche positionsunabh&auml;ngig &uuml;bersetzt werden. Laufzeitbibliotheken
machen dies bereits (<B>-fPIC</B>), so dass sie ASLR automatisch erhalten, aber
Programm-.text-Regionen m&uuml;ssen mit PIE gebaut werden, um ASLR zu
erhalten. Wenn dies passiert, sind ROP- (Return Oriented Programming)
Angriffe sehr viel schwerer durchzuf&uuml;hren, da es keine statischen Orte mehr
gibt, zu denen w&auml;hrend eines Speicherverf&auml;lschungsangriffs hingesprungen
werden k&ouml;nnte.
<P>
PIE ist nicht mit <B>-fPIC</B> kompatibel, daher muss im Allgemeinen Vorsicht
beim Bau von Laufzeitbibliotheksobjekten walten gelassen werden. Da aber der
ausgegebene PIE-Schalter mittels GCC-Spezifikationsdateien hinzugef&uuml;gt wird,
sollte es immer sicher sein, sie bedingungslos zu setzen, unabh&auml;ngig von dem
Objekttyp, der &uuml;bersetzt oder gelinkt wird.
<P>
Statische Bibliotheken k&ouml;nnen von jedem Programm und anderen statischen
Bibliotheken benutzt werden. Abh&auml;ngig von den zum Kompilieren aller Objekte
innerhalb einer statischen Bibliothek verwandten Schaltern k&ouml;nnen diese
Bibliotheken von verschiedenen Gruppen von Objekten verwandt werden:
<P>
<DL COMPACT><DT id="55"><DD>
<DL COMPACT>
<DT id="56">keine<DD>
Kann weder in ein PIE-Programm noch in eine Laufzeitbibliothek gelinkt
werden.
<DT id="57"><B>-fPIE</B><DD>
Kann in jedes Programm, aber nicht in eine Laufzeitbibliothek gelinkt werden
(empfohlen).
<DT id="58"><B>-fPIC</B><DD>
Kann in jedes Programm und jede Laufzeitbibliothek gelinkt werden.
</DL>
</DL>
<P>
<DT id="59"><DD>
Falls es notwendig ist, diese Schalter manuell zu setzen und die
GGC-Spezifikations-Hinzuf&uuml;gung zu umgehen, m&uuml;ssen mehrere Dinge beachtet
werden. Die bedingungslose und explizite &Uuml;bergabe von <B>-fPIE</B>, <B>-fpie</B>
oder <B>-pie</B> an das Bausystem mit Libtool ist sicher, da diese Schalter
entfernt werden, wenn Laufzeit-Bibliotheken gebaut werden. Andernfalls
k&ouml;nnte es bei Projekten, die sowohl Programme wie auch Laufzeit-Bibliotheken
bauen, notwendig sein, dass Sie beim Bau der Laufzeit-Bibliotheken
sicherstellen, dass <B>-fPIC</B> immer als letztes an die Kompilierungsschalter
wie <B>CFLAGS</B> &uuml;bergeben wird (so dass es jedes fr&uuml;here <B>-PIE</B> au&szlig;er Kraft
setzen kann) und <B>-shared</B> als letztes an Link-Schalter wie <B>LDFLAGS</B>
&uuml;bergeben wird (so dass es jedes fr&uuml;here <B>-pie</B> au&szlig;er Kraft setzen
kann). <B>Hinweis</B>: Das sollte mit der Vorgabe-GCC-Spezifikationsmaschinerie
nicht notwendig sein.
<P>
<DT id="60"><DD>
Zus&auml;tzlich k&ouml;nnen auf einigen Architekturen mit sehr wenigen Registern (dazu
geh&ouml;rt aber i386 nicht mehr, seitdem in GCC &gt;= 5 Optimierungen
erfolgten) Leistungsverluste von bis zu 15% in sehr text-Segment-lastigen
Anwendungsf&auml;llen auftreten, da PIE &uuml;ber allgemeine Register implementiert
ist; in den meisten Anwendungsf&auml;llen sind dies weniger als 1%. Architekturen
mit mehr allgemeinen Registern (z.B. Amd64) erfahren nicht diese
Schlimmstfall-Strafe.
</DL>
<A NAME="lbAL">&nbsp;</A>
<H3>Reproduzierbarkeit</H3>
Die Kompilierzeit-Optionen (weiter unten beschrieben) k&ouml;nnen dazu verwandt
werden, die Reproduzierbarkeit zu verbessern oder zus&auml;tzliche
Warnungsmeldungen w&auml;hrend der &Uuml;bersetzung auszugeben. Sie werden f&uuml;r
Architekturen, die diese unterst&uuml;tzen, standardm&auml;&szlig;ig aktiviert; die
Ausnahmen sind unten angegeben.
<DL COMPACT>
<DT id="61"><B>timeless</B><DD>
Diese (standardm&auml;&szlig;ig aktivierte) Einstellung f&uuml;gt <B>-Wdate-time</B> zu
<B>CPPFLAGS</B> hinzu. Dies f&uuml;hrt zu Warnungen, wenn die Makros <B>__TIME__</B>,
<B>__DATE__</B> und <B>__TIMESTAMP__</B> verwandt werden.
<DT id="62"><B>fixfilepath</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig deaktiviert) f&uuml;gt
<B>-ffile-prefix-map=</B><I>BUILDPATH</I><B>=.</B> zu <B>CFLAGS</B>, <B>CXXFLAGS</B>,
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> und <B>FCFLAGS</B> hinzu,
wobei <B>BUILDPATH</B> auf das oberste Verzeichnis des bauenden Pakets gesetzt
wird. Dies f&uuml;hrt dazu, dass der Baupfad aus allen erstellten Dateien
entfernt wird.
<P>
Falls sowohl <B>fixdebugpath</B> als auch <B>fixfilepath</B> gesetzt sind, hat diese
Option Vorrang, da sie eine Obermenge erster ist.
<DT id="63"><B>fixdebugpath</B><DD>
Diese Einstellung (standardm&auml;&szlig;ig aktiviert) f&uuml;gt
<B>-fdebug-prefix-map=</B><I>BUILDPATH</I><B>=.</B> zu <B>CFLAGS</B>, <B>CXXFLAGS</B>,
<B>OBJCFLAGS</B>, <B>OBJCXXFLAGS</B>, <B>GCJFLAGS</B>, <B>FFLAGS</B> und <B>FCFLAGS</B> hinzu,
wobei <B>BUILDPATH</B> auf das oberste Verzeichnis des bauenden Pakets gesetzt
wird. Dies f&uuml;hrt dazu, dass der Baupfad aus allen erstellten Debug-Symbolen
entfernt wird.
</DL>
<A NAME="lbAM">&nbsp;</A>
<H2>UMGEBUNG</H2>
Es gibt zwei Gruppen von Umgebungsvariablen, die den gleichen Vorgang
durchf&uuml;hren. Der erste (DEB_<I>Schalter</I>_<I>Vorg</I>) sollte niemals innerhalb
von <B>debian/rules</B> verwandt werden. Er ist f&uuml;r Benutzer gedacht, die das
Quellpaket mit anderen Bauschaltern erneut bauen m&ouml;chten. Der zweite Satz
(DEB_<I>Schalter</I>_MAINT_<I>Vorg</I>) sollte nur durch Paketbetreuer in
<B>debian/rules</B> verwandt werden, um die entstehenden Bauschalter zu &auml;ndern.
<DL COMPACT>
<DT id="64"><B>DEB_</B><I>Schalter</I><B>_SET</B><DD>
<B>DEB_</B><I>Schalter</I><B>_MAINT_SET</B>
Diese Variable kann zum Erzwingen des f&uuml;r <I>Schalter</I> zur&uuml;ckgegebenen Werts
verwandt werden.
<DT id="65"><B>DEB_</B><I>Schalter</I><B>_STRIP</B><DD>
<B>DEB_</B><I>Schalter</I><B>_MAINT_STRIP</B>
Diese Variable kann zum Bereitstellen einer durch Leerzeichen getrennten
Liste von Optionen verwandt werden, die aus dem Satz von <I>Schalter</I>
zur&uuml;ckgelieferten Schaltern entfernt werden.
<DT id="66"><B>DEB_</B><I>Schalter</I><B>_APPEND</B><DD>
<B>DEB_</B><I>Schalter</I><B>_MAINT_APPEND</B>
Diese Variable kann zum Anh&auml;ngen erg&auml;nzender Optionen zum Wert, der von
<I>Schalter</I> zur&uuml;ckgegeben wird, verwandt werden.
<DT id="67"><B>DEB_</B><I>Schalter</I><B>_PREPEND</B><DD>
<B>DEB_</B><I>Schalter</I><B>_MAINT_PREPEND</B>
Diese Variable kann zum Voranstellen erg&auml;nzender Optionen zum Wert, der von
<I>Schalter</I> zur&uuml;ckgegeben wird, verwandt werden.
<DT id="68"><B>DEB_BUILD_OPTIONS</B><DD>
<B>DEB_BUILD_MAINT_OPTIONS</B>
Diese Variablen k&ouml;nnen von Benutzern oder Betreuern zum Deaktivieren oder
Aktivieren verschiedener Bereichsfunktionalit&auml;ten benutzt werden, die
Bauschalter beeinflussen. Die Variable <B>DEB_BUILD_MAINT_OPTIONS</B> setzt jede
Einstellung in den Funktionalit&auml;tsbereichen <B>DEB_BUILD_OPTIONS</B> au&szlig;er
Kraft. Lesen Sie den Abschnitt <B>FUNKTIONALIT&Auml;TSBEREICHE</B> f&uuml;r weitere
Details.
<DT id="69"><B>DEB_VENDOR</B><DD>
Diese Einstellung definiert den aktuellen Lieferanten. Falls nicht gesetzt,
wird er aus <B>/etc/dpkg/origins/default</B> ermittelt.
<DT id="70"><B>DEB_BUILD_PATH</B><DD>
Diese Variable setzt den Baupfad (seit Dpkg 1.18.8), der in Funktionalit&auml;ten
wie <B>fixdebugpath</B> verwandt wird, so dass sie durch den Aufrufenden
gesteuert werden k&ouml;nnen. Diese Variable ist derzeit spezifisch f&uuml;r Debian
und Derivative.
<DT id="71"><B>DPKG_COLORS</B><DD>
Setzt den Farbmodus (seit Dpkg 1.18.5). Die derzeit unterst&uuml;tzten Werte
sind: <B>auto</B> (Vorgabe), <B>always</B> und <B>never</B>.
<DT id="72"><B>DPKG_NLS</B><DD>
Falls dies gesetzt ist, wird es zur Entscheidung, ob Native Language
Support, auch als Internationalisierung (oder i18n) Unterst&uuml;tzung bekannt,
aktiviert wird (seit Dpkg 1.19.0). Die akzeptierten Werte sind: <B>0</B> und
<B>1</B> (Vorgabe).
</DL>
<A NAME="lbAN">&nbsp;</A>
<H2>DATEIEN</H2>
<A NAME="lbAO">&nbsp;</A>
<H3>Konfigurationsdateien</H3>
<DL COMPACT>
<DT id="73"><B>/etc/dpkg/buildflags.conf</B><DD>
Systemweite Konfigurationsdatei
<DT id="74"><B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B> oder <DD>
<B>$HOME/.config/dpkg/buildflags.conf</B>
Benutzer-Konfigurationsdatei
</DL>
<A NAME="lbAP">&nbsp;</A>
<H3>Paketierungsunterst&uuml;tzung</H3>
<DL COMPACT>
<DT id="75"><B>/usr/share/dpkg/buildflags.mk</B><DD>
Makefile-Schnipsel, das alle von <B>dpkg-buildflags</B> unterst&uuml;tzten Schalter
in Variablen laden (und optional exportieren) wird. (seit Dpkg 1.16.1)
</DL>
<A NAME="lbAQ">&nbsp;</A>
<H2>BEISPIELE</H2>
Um Bauschalter an eine Baubefehl in einer Makefile zu &uuml;bergeben:
<P>
<DL COMPACT><DT id="76"><DD>
<PRE>
$(MAKE) $(shell dpkg-buildflags --export=cmdline)
./configure $(shell dpkg-buildflags --export=cmdline)
</PRE>
</DL>
<P>
Um Bauschalter in einem Shell-Skript oder Shell-Fragement zu setzen, kann
<B>eval</B> verwendet werden, um die Ausgabe zu interpretieren und die Schalter
in die Umgebung zu exportieren:
<P>
<DL COMPACT><DT id="77"><DD>
<PRE>
eval &quot;$(dpkg-buildflags --export=sh)&quot; &amp;&amp; make
</PRE>
</DL>
<P>
Oder die Positionsparameter zu setzen, die an einen Befehl &uuml;bergeben werden
sollen:
<P>
<DL COMPACT><DT id="78"><DD>
<PRE>
eval &quot;set -- $(dpkg-buildflags --export=cmdline)&quot;
for dir in a b c; do (cd $dir &amp;&amp; ./configure &quot;$@&quot; &amp;&amp; make); done
</PRE>
</DL>
<A NAME="lbAR">&nbsp;</A>
<H3>Verwendung in debian/rules</H3>
Sie sollten <B>dpkg-buildflags</B> aufrufen oder <B>buildflags.mk</B> in die Datei
<B>debian/rules</B> einbinden, um die ben&ouml;tigten Bauschalter, die an das
Bausystem weitergegeben werden sollen, abzufragen. Beachten Sie, dass &auml;ltere
Versionen von <B>dpkg-buildpackage</B> (vor Dpkg 1.16.1) diese Variablen
automatisch exportierten. Allerdings sollten Sie sich nicht darauf
verlassen, da dies den manuellen Aufruf von <B>debian/rules</B> nicht korrekt
erm&ouml;glicht.
<P>
F&uuml;r Pakete mit Autoconf-artigen Bausystemen k&ouml;nnen Sie die relevanten
Optionen direkt wie oben gezeigt an Configure oder <B><A HREF="/cgi-bin/man/man2html?1+make">make</A></B>(1) &uuml;bergeben.
<P>
F&uuml;r andere Bausysteme oder wenn Sie feingranularere Steuerung ben&ouml;tigen
(welcher Schalter wo weitergegeben wird), k&ouml;nnen Sie <B>--get</B>
verwenden. Oder Sie k&ouml;nnen stattdessen <B>buildflags.mk</B> einbinden, das sich
um den Aufruf von <B>dpkg-buildflags</B> k&uuml;mmert und die Bauschalter in
Make-Variablen speichert.
<P>
Falls Sie alle Bauschalter in die Umgebung exportieren m&ouml;chten (wo sie dann
vom Baussystem eingelesen werden k&ouml;nnen):
<P>
<DL COMPACT><DT id="79"><DD>
<PRE>
DPKG_EXPORT_BUILDFLAGS = 1
include /usr/share/dpkg/buildflags.mk
</PRE>
</DL>
<P>
F&uuml;r zus&auml;tzliche Steuerung was exportiert wird, k&ouml;nnen Sie die Variablen
manuell exportieren (da keine standardm&auml;&szlig;ig exportiert werden):
<P>
<DL COMPACT><DT id="80"><DD>
<PRE>
include /usr/share/dpkg/buildflags.mk
export CPPFLAGS CFLAGS LDFLAGS
</PRE>
</DL>
<P>
Und nat&uuml;rlich k&ouml;nnen Sie die Schalter manuell an Befehle weitergeben:
<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>
<A NAME="lbAS">&nbsp;</A>
<H2>&Uuml;BERSETZUNG</H2>
Die deutsche &Uuml;bersetzung wurde 2004, 2006-2019 von Helge Kreutzmann
&lt;<A HREF="mailto:debian@helgefjell.de">debian@helgefjell.de</A>&gt;, 2007 von Florian Rehnisch &lt;<A HREF="mailto:eixman@gmx.de">eixman@gmx.de</A>&gt; und
2008 von Sven Joachim &lt;<A HREF="mailto:svenjoac@gmx.de">svenjoac@gmx.de</A>&gt;
angefertigt. Diese &Uuml;bersetzung ist Freie Dokumentation; lesen Sie die
GNU General Public License Version 2 oder neuer f&uuml;r die Kopierbedingungen.
Es gibt KEINE HAFTUNG.
<P>
<HR>
<A NAME="index">&nbsp;</A><H2>Index</H2>
<DL>
<DT id="82"><A HREF="#lbAB">BEZEICHNUNG</A><DD>
<DT id="83"><A HREF="#lbAC">&Uuml;BERSICHT</A><DD>
<DT id="84"><A HREF="#lbAD">BESCHREIBUNG</A><DD>
<DT id="85"><A HREF="#lbAE">BEFEHLE</A><DD>
<DT id="86"><A HREF="#lbAF">UNTERST&Uuml;TZTE SCHALTER</A><DD>
<DT id="87"><A HREF="#lbAG">FUNKTIONALIT&Auml;TSBEREICHE</A><DD>
<DL>
<DT id="88"><A HREF="#lbAH">future</A><DD>
<DT id="89"><A HREF="#lbAI">QS</A><DD>
<DT id="90"><A HREF="#lbAJ">Bereinigung</A><DD>
<DT id="91"><A HREF="#lbAK">H&auml;rtung</A><DD>
<DT id="92"><A HREF="#lbAL">Reproduzierbarkeit</A><DD>
</DL>
<DT id="93"><A HREF="#lbAM">UMGEBUNG</A><DD>
<DT id="94"><A HREF="#lbAN">DATEIEN</A><DD>
<DL>
<DT id="95"><A HREF="#lbAO">Konfigurationsdateien</A><DD>
<DT id="96"><A HREF="#lbAP">Paketierungsunterst&uuml;tzung</A><DD>
</DL>
<DT id="97"><A HREF="#lbAQ">BEISPIELE</A><DD>
<DL>
<DT id="98"><A HREF="#lbAR">Verwendung in debian/rules</A><DD>
</DL>
<DT id="99"><A HREF="#lbAS">&Uuml;BERSETZUNG</A><DD>
</DL>
<HR>
This document was created by
<A HREF="/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 00:04:56 GMT, March 31, 2021
</BODY>
</HTML>