723 lines
32 KiB
HTML
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"> </A>
|
|
<H2>BEZEICHNUNG</H2>
|
|
|
|
dpkg-buildflags - liefert Bauschalter zum Einsatz beim Paketbau
|
|
<A NAME="lbAC"> </A>
|
|
<H2>ÜBERSICHT</H2>
|
|
|
|
<B>dpkg-buildflags</B> [<I>Option</I> …] [<I>Befehl</I>]
|
|
<A NAME="lbAD"> </A>
|
|
<H2>BESCHREIBUNG</H2>
|
|
|
|
<B>dpkg-buildflags</B> ist ein Werkzeug, das zum Abfragen der zu verwendenen
|
|
Kompilierungsschalter für den Bau von Debian-Paketen eingesetzt wird.
|
|
Die Standardschalter werden vom Lieferanten definiert, sie können auf
|
|
mehrere Arten erweitert/überschrieben werden:
|
|
<DL COMPACT>
|
|
<DT id="1">1.<DD>
|
|
systemweit mit <B>/etc/dpkg/buildflags.conf</B>
|
|
<DT id="2">2.<DD>
|
|
für den aktuellen Benutzer mit <B>$XDG_CONFIG_HOME/dpkg/buildflags.conf</B>,
|
|
wobei <B>$XDG_CONFIG_HOME</B> standardmäßig auf <B>$HOME/.config</B> gesetzt ist
|
|
<DT id="3">3.<DD>
|
|
temporär durch den Benutzer mittels Umgebungsvariablen (siehe Abschnitt
|
|
<B>UMGEBUNG</B>)
|
|
<DT id="4">4.<DD>
|
|
dynamisch durch den Paketverwalter mittels Umgebungsvariablen, die über
|
|
<B>debian/rules</B> gesetzt wurden (siehe Abschnitt <B>UMGEBUNG</B>)
|
|
</DL>
|
|
<P>
|
|
|
|
Die Konfigurationsdateien können vier Arten von Direktiven enthalten:
|
|
<DL COMPACT>
|
|
<DT id="5"><B>SET</B><I> Schalter Wert</I><DD>
|
|
Ü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ührten Bauschalter
|
|
entfernen
|
|
<DT id="7"><B>APPEND</B><I> Schalter Wert</I><DD>
|
|
Erweitert den Schalter namens <I>Schalter</I> durch Anhängen der in <I>Wert</I>
|
|
angegebenen Optionen. Ein Leerzeichen wird vor den angehä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ängt, falls der derzeitige Wert nicht leer ist.
|
|
</DL>
|
|
<P>
|
|
|
|
Die Konfigurationsdateien können Kommentare auf Zeilen enthalten, die mit
|
|
einer Raute (#) beginnen. Leere Zeilen werden auch ignoriert.
|
|
<A NAME="lbAE"> </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ützen Schalter (eine pro
|
|
Zeile) aus. Lesen Sie den Abschnitt <B>UNTERSTÜTZTE SCHALTER</B> für weitere
|
|
Informationen über sie.
|
|
<DT id="11"><B>--status</B><DD>
|
|
Alle Informationen anzeigen, die zum Verständnis des Verhaltens von
|
|
<B>dpkg-buildflags</B> nützlich sein kö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ührung in <B>debian/rules</B> gedacht, so dass das Bauprotokoll
|
|
einen klaren Nachweis der verwandten Bauschalter enthält. Dies kann zur
|
|
Diagnose von Problemen in Zusammenhang mit diesen nützlich sein.
|
|
<DT id="12"><B>--export=</B><I>Format</I><DD>
|
|
Auf der Standardausgabe Befehle ausgeben, die dazu verwandt werden können,
|
|
alle Kompilierschalter fü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ßbuchstaben beginnen, werden
|
|
aufgenommen. Bei allen anderen wird angenommen, dass sie für die Umgebung
|
|
nicht geeignet sind. Unterstü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ür
|
|
Auswertung durch eine Shell bereit ist.
|
|
<DT id="15"><B>cmdline</B><DD>
|
|
Argumente, die an die Befehlszeile eines Bauprogrammes übergeben werden, um
|
|
alle Ü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ü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ünglich vom Lieferanten gesetzte Schalter wird zurückgeliefert
|
|
<DT id="22"><B>system</B><DD>
|
|
der Schalter wurde durch eine systemweite Konfiguration gesetzt/verändert
|
|
<DT id="23"><B>user</B><DD>
|
|
der Schalter wurde durch eine benutzerspezifische Konfiguration
|
|
gesetzt/verändert
|
|
<DT id="24"><B>env</B><DD>
|
|
der Schalter wurde durch eine umgebungsspezifische Konfiguration
|
|
gesetzt/verändert
|
|
</DL>
|
|
</DL>
|
|
|
|
<DT id="25"><B>--query</B><DD>
|
|
Alle Informationen anzeigen, die zur Erklärung des Verhaltens des Programms
|
|
hilfreich sein könnten: aktueller Lieferant, relevante Umgebungsvariablen,
|
|
Funktionalitä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äten, die für den ü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ÄTSBEREICHE</B> fü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ä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"> </A>
|
|
<H2>UNTERSTÜTZTE SCHALTER</H2>
|
|
|
|
<DL COMPACT>
|
|
<DT id="32"><B>CFLAGS</B><DD>
|
|
Optionen für den C-Compiler. Der vom Lieferanten gesetzte Standardwert
|
|
enthä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ür den C-Präprozessor. Standardwert: leer
|
|
<DT id="34"><B>CXXFLAGS</B><DD>
|
|
Optionen für den C++-Compiler. Identisch zu <B>CFLAGS</B>.
|
|
<DT id="35"><B>OBJCFLAGS</B><DD>
|
|
Optionen für den Objective-C-Compiler. Identisch zu <B>CFLAGS</B>.
|
|
<DT id="36"><B>OBJCXXFLAGS</B><DD>
|
|
Optionen für den Objective-C++-Compiler. Identisch zu <B>CXXFLAGS</B>.
|
|
<DT id="37"><B>GCJFLAGS</B><DD>
|
|
Optionen für den GNU-Java-Compiler (gcj). Eine Untermenge von <B>CFLAGS</B>.
|
|
<DT id="38"><B>FFLAGS</B><DD>
|
|
Optionen für den Fortran-77-Compiler. Eine Untermenge von <B>CFLAGS</B>.
|
|
<DT id="39"><B>FCFLAGS</B><DD>
|
|
Optionen fü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üssen <B>-Wl</B> und <B>,</B> aus diesen Optionen entfernt werden). Standardmäßig
|
|
leer.
|
|
</DL>
|
|
<P>
|
|
|
|
Neue Schalter können in Zukunft hinzugefügt werden, falls die Notwendigkeit
|
|
aufkommt (beispielsweise, um weitere Sprachen zu unterstützen).
|
|
<A NAME="lbAG"> </A>
|
|
<H2>FUNKTIONALITÄTSBEREICHE</H2>
|
|
|
|
<P>
|
|
|
|
Jede Bereichsfunktionalitä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ür <B>hardening</B> die Bqpie"-Funktionalität aktiviert und die
|
|
Bqfortify"-Funktionalität deaktiviert werden, können Sie Folgendes in
|
|
<B>debian/rules</B> verwenden:
|
|
<P>
|
|
|
|
<BR> export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,-fortify
|
|
<P>
|
|
|
|
Die spezielle Funktionalität <B>all</B> (in allen Bereichen gültig) kann dazu
|
|
verwandt werden, alle Bereichsfunktionalitä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> export DEB_BUILD_MAINT_OPTIONS=hardening=-all,+format,+fortify
|
|
<A NAME="lbAH"> </A>
|
|
<H3>future</H3>
|
|
|
|
Mehrere Optionen zur Kompilierung (Details weiter unten) können verwandt
|
|
werden, um Funktionen zu aktivieren, die standardmäßig aktiviert sein
|
|
sollten, dies aber aufgrund von Rückwärtskompatibilitätsgründen nicht sein
|
|
können.
|
|
<DL COMPACT>
|
|
<DT id="41"><B>lfs</B><DD>
|
|
Diese Einstellung (standardmäßig deaktiviert) aktiviert die Unterstützung
|
|
für große Dateien auf 32-Bit-Architekturen, bei denen ihre ABI diese
|
|
Unterstützung nicht standardmäßig aktiviert, indem <B>-D_LARGEFILE_SOURCE
|
|
-D_FILE_OFFSET_BITS=64</B> zu <B>CPPFLAGS</B> hinzugefügt wird.
|
|
</DL>
|
|
<A NAME="lbAI"> </A>
|
|
<H3>QS</H3>
|
|
|
|
Mehrere Optionen zur Kompilierung (Details weiter unten) kö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äßig deaktiviert) fügt Warnoptionen hinzu, die
|
|
zuverlässig problematischen Quellcode erkennen. Diese Warnungen sind
|
|
fatal. Die einzigen derzeit unterstü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äßig deaktiviert) fügt
|
|
Pseudo-Kanarienvögel-Optionen zu den Bauschaltern hinzu, so dass die
|
|
Bauprotokolle überprüft werden kö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ü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"> </A>
|
|
<H3>Bereinigung</H3>
|
|
|
|
Mehrere Kompilierzeit-Optionen (weiter unten beschrieben) können dazu
|
|
verwandt werden, ein erstelltes Programm vor Speicherverfälschungsangriffen
|
|
Speicherlecks, Verwendung nach Freigabe, Daten-Zugriffswettläufen (»races«)
|
|
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ässigkeit von
|
|
spezifikationsgetreuem Code, die Sicherheit oder sogar die Funktionalität
|
|
reduzieren können.
|
|
<DL COMPACT>
|
|
<DT id="44"><B>address</B><DD>
|
|
Diese Einstellung (standardmäßig deaktiviert) fü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äßig deaktiviert) fü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äßig deaktiviert) fügt <B>-fsanitize=leak</B> zu
|
|
<B>LDFLAGS</B> hinzu. Sie wird automatisch deaktiviert, falls entweder die
|
|
Funktionalitäten <B>address</B> oder <B>thread</B> aktiviert werden, da diese sie
|
|
einschließen.
|
|
<DT id="47"><B>undefined</B><DD>
|
|
Diese Einstellung (standardmäßig deaktiviert) fügt <B>-fsanitize=undefined</B>
|
|
zu <B>CFLAGS</B>, <B>CXXFLAGS</B> und <B>LDFLAGS</B> hinzu.
|
|
</DL>
|
|
<A NAME="lbAK"> </A>
|
|
<H3>Härtung</H3>
|
|
|
|
Mehrere Kompilierzeit-Optionen (weiter unten beschrieben) können dazu
|
|
verwandt werden, ein erstelltes Programm gegen Speicherverfälschungsangriffe
|
|
zu härten, oder zusätzliche Warnungsmeldungen während der Übersetzung
|
|
auszugeben. Sie werden für Architekturen, die diese unterstützen,
|
|
standardmäßig aktiviert; die Ausnahmen sind unten angegeben.
|
|
<DL COMPACT>
|
|
<DT id="48"><B>format</B><DD>
|
|
Diese Einstellung (standardmäßig aktiviert) fü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 über inkorrekte
|
|
Formatzeichenkettenverwendungen gewarnt und zu einem Fehler führen, wenn
|
|
Formatfunktionen deart verwandt werden, dass daraus ein mögliches
|
|
Sicherheitsproblem werden könnte. Derzeit warnt dies ü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("%s", foo);</B>. Dies könnte ein
|
|
Sicherheitsproblem sein, falls die Formatzeichenkette aus einer
|
|
unvertrauenswürdigen Eingabe stammt und bq%n' enthält.
|
|
<DT id="49"><B>fortify</B><DD>
|
|
Diese Einstellung (standardmäßig aktiviert) fügt <B>-D_FORTIFY_SOURCE=2</B> zu
|
|
<B>CPPFLAGS</B> hinzu. Während der Code-Erstellung hat der Compiler umfangreiche
|
|
Informationen über Puffergrößen (wo möglich) und versucht, unsichere
|
|
unbegrenzte Pufferfunktionsaufrufe durch längenbegrenzte zu ersetzen. Das
|
|
ist besonders für alten, verkramten Code nützlich. Zusätzlich werden
|
|
Formatzeichenketten in schreibbarem Speicher, die bq%n' enthalten,
|
|
blockiert. Falls eine Anwendung von solchen Formatzeichenketten abhängt,
|
|
müssen dafür andere Lösungsmöglichkeiten gefunden werden.
|
|
<P>
|
|
Beachten Sie, dass die Quellen auch mit <B>-O1</B> oder höher übersetzt werden
|
|
müssen, damit diese Option einen Effekt hat. Falls die Umgebungsvariable
|
|
<B>DEB_BUILD_OPTIONS</B> <I>noopt</I> enthält, dann wird die Unterstü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äßig aktiviert falls stackprotectorstrong nicht
|
|
verwandt wird) fü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ügt Sicherheitsprüfungen gegen die
|
|
Überschreibung des Stapelspeichers (Stacks) hinzu. Damit werden viele
|
|
mögliche Code-Einfügeangriffe zu Abbruchsituationen. Im besten Fall werden
|
|
damit Code-Einfügungsangriffe zu Diensteverweigerungsangriffen oder zu
|
|
keinen Problemen (abhängig von der Anwendung).
|
|
<P>
|
|
Diese Funktionalität benö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 Ähnlichem gebaut wird.
|
|
<DT id="51"><B>stackprotectorstrong</B><DD>
|
|
Diese Einstellung (standardmäßig aktiviert) fü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ärkere Variante von
|
|
<B>stackprotector</B> allerdings ohne signifikante Einbußen bei der Leistung.
|
|
<P>
|
|
Deaktivierung von <B>stackprotector</B> deaktiviert auch diese Einstellung.
|
|
<P>
|
|
Diese Funktionalität stellt die gleichen Anforderungen wie <B>stackprotector</B>
|
|
und benötigt zusätzlich Gcc 4.9 oder neuer.
|
|
<DT id="52"><B>relro</B><DD>
|
|
Diese Einstellung (standardmäßig aktiviert) fügt <B>-Wl,-z,relro</B> zu
|
|
<B>LDFLAGS</B> hinzu. Während des Ladens des Programms müssen mehrere
|
|
ELF-Speicherabschnitte vom Binder (Linker) geschrieben werden. Diese
|
|
Einstellung signalisiert dem Ladeprogramm, diese Abschnitte in
|
|
nur-Lese-Zugriff zu ändern, bevor die Steuerung an das Programm übergeben
|
|
wird. Insbesondere verhindert dies GOT-Überschreibeangriffe. Falls diese
|
|
Option deaktiviert ist, wird auch <B>bindnow</B> deaktiviert.
|
|
<DT id="53"><B>bindnow</B><DD>
|
|
Diese Einstellung (standardmäßig deaktiviert) fügt <B>-Wl,-z,now</B> zu
|
|
<B>LDFLAGS</B> hinzu. Während des Ladens des Programms werden alle dynamischen
|
|
Symbole aufgelö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äß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ügt, falls benötigt, die benötigten Optionen, um PIE zu
|
|
aktivieren oder zu deaktiveren, über GCC-Spezifikationsdateien hinzu,
|
|
abhängig davon, ob GCC auf diesen Architekturen die Schalter selbst
|
|
einspeist oder nicht. Wenn die Einstellung aktiviert ist und GCC den
|
|
Schalter einspeist, fügt dies nichts hinzu. Wenn die Einstellung aktiviert
|
|
ist und GCC den Schalter nicht einspeist, dann fü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ü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>
|
|
»Position Independent Executable« (positionsunabhängige Programme) werden
|
|
benötigt, um »Address Space Layout Randomization« (Bereitstellung eines
|
|
zufälligen Adressbereichlayouts) auszunutzen, der von einigen
|
|
Kernelversionen bereitgestellt wird. Während ASLR bereits für Datenbereiche
|
|
auf dem Stapel (Stack) und Heap erzwungen werden kann (brk und mmap), müssen
|
|
die Codebereiche positionsunabhängig übersetzt werden. Laufzeitbibliotheken
|
|
machen dies bereits (<B>-fPIC</B>), so dass sie ASLR automatisch erhalten, aber
|
|
Programm-.text-Regionen müssen mit PIE gebaut werden, um ASLR zu
|
|
erhalten. Wenn dies passiert, sind ROP- (Return Oriented Programming)
|
|
Angriffe sehr viel schwerer durchzuführen, da es keine statischen Orte mehr
|
|
gibt, zu denen während eines Speicherverfälschungsangriffs hingesprungen
|
|
werden kö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ügt wird,
|
|
sollte es immer sicher sein, sie bedingungslos zu setzen, unabhängig von dem
|
|
Objekttyp, der übersetzt oder gelinkt wird.
|
|
<P>
|
|
Statische Bibliotheken können von jedem Programm und anderen statischen
|
|
Bibliotheken benutzt werden. Abhängig von den zum Kompilieren aller Objekte
|
|
innerhalb einer statischen Bibliothek verwandten Schaltern kö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ügung zu umgehen, müssen mehrere Dinge beachtet
|
|
werden. Die bedingungslose und explizite Ü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ö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> übergeben wird (so dass es jedes frühere <B>-PIE</B> außer Kraft
|
|
setzen kann) und <B>-shared</B> als letztes an Link-Schalter wie <B>LDFLAGS</B>
|
|
übergeben wird (so dass es jedes frühere <B>-pie</B> außer Kraft setzen
|
|
kann). <B>Hinweis</B>: Das sollte mit der Vorgabe-GCC-Spezifikationsmaschinerie
|
|
nicht notwendig sein.
|
|
<P>
|
|
<DT id="60"><DD>
|
|
Zusätzlich können auf einigen Architekturen mit sehr wenigen Registern (dazu
|
|
gehört aber i386 nicht mehr, seitdem in GCC >= 5 Optimierungen
|
|
erfolgten) Leistungsverluste von bis zu 15% in sehr text-Segment-lastigen
|
|
Anwendungsfällen auftreten, da PIE über allgemeine Register implementiert
|
|
ist; in den meisten Anwendungsfällen sind dies weniger als 1%. Architekturen
|
|
mit mehr allgemeinen Registern (z.B. Amd64) erfahren nicht diese
|
|
Schlimmstfall-Strafe.
|
|
</DL>
|
|
<A NAME="lbAL"> </A>
|
|
<H3>Reproduzierbarkeit</H3>
|
|
|
|
Die Kompilierzeit-Optionen (weiter unten beschrieben) können dazu verwandt
|
|
werden, die Reproduzierbarkeit zu verbessern oder zusätzliche
|
|
Warnungsmeldungen während der Übersetzung auszugeben. Sie werden für
|
|
Architekturen, die diese unterstützen, standardmäßig aktiviert; die
|
|
Ausnahmen sind unten angegeben.
|
|
<DL COMPACT>
|
|
<DT id="61"><B>timeless</B><DD>
|
|
Diese (standardmäßig aktivierte) Einstellung fügt <B>-Wdate-time</B> zu
|
|
<B>CPPFLAGS</B> hinzu. Dies fü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äßig deaktiviert) fü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ü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äßig aktiviert) fü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ührt dazu, dass der Baupfad aus allen erstellten Debug-Symbolen
|
|
entfernt wird.
|
|
</DL>
|
|
<A NAME="lbAM"> </A>
|
|
<H2>UMGEBUNG</H2>
|
|
|
|
Es gibt zwei Gruppen von Umgebungsvariablen, die den gleichen Vorgang
|
|
durchführen. Der erste (DEB_<I>Schalter</I>_<I>Vorg</I>) sollte niemals innerhalb
|
|
von <B>debian/rules</B> verwandt werden. Er ist für Benutzer gedacht, die das
|
|
Quellpaket mit anderen Bauschaltern erneut bauen mö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 ä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ür <I>Schalter</I> zurü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ü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ängen ergänzender Optionen zum Wert, der von
|
|
<I>Schalter</I> zurü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änzender Optionen zum Wert, der von
|
|
<I>Schalter</I> zurückgegeben wird, verwandt werden.
|
|
<DT id="68"><B>DEB_BUILD_OPTIONS</B><DD>
|
|
|
|
<B>DEB_BUILD_MAINT_OPTIONS</B>
|
|
Diese Variablen können von Benutzern oder Betreuern zum Deaktivieren oder
|
|
Aktivieren verschiedener Bereichsfunktionalitäten benutzt werden, die
|
|
Bauschalter beeinflussen. Die Variable <B>DEB_BUILD_MAINT_OPTIONS</B> setzt jede
|
|
Einstellung in den Funktionalitätsbereichen <B>DEB_BUILD_OPTIONS</B> außer
|
|
Kraft. Lesen Sie den Abschnitt <B>FUNKTIONALITÄTSBEREICHE</B> fü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äten
|
|
wie <B>fixdebugpath</B> verwandt wird, so dass sie durch den Aufrufenden
|
|
gesteuert werden können. Diese Variable ist derzeit spezifisch für Debian
|
|
und Derivative.
|
|
<DT id="71"><B>DPKG_COLORS</B><DD>
|
|
Setzt den Farbmodus (seit Dpkg 1.18.5). Die derzeit unterstü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ü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"> </A>
|
|
<H2>DATEIEN</H2>
|
|
|
|
<A NAME="lbAO"> </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"> </A>
|
|
<H3>Paketierungsunterstü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ützten Schalter
|
|
in Variablen laden (und optional exportieren) wird. (seit Dpkg 1.16.1)
|
|
</DL>
|
|
<A NAME="lbAQ"> </A>
|
|
<H2>BEISPIELE</H2>
|
|
|
|
Um Bauschalter an eine Baubefehl in einer Makefile zu ü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 "$(dpkg-buildflags --export=sh)" && make
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Oder die Positionsparameter zu setzen, die an einen Befehl übergeben werden
|
|
sollen:
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="78"><DD>
|
|
<PRE>
|
|
eval "set -- $(dpkg-buildflags --export=cmdline)"
|
|
for dir in a b c; do (cd $dir && ./configure "$@" && make); done
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<A NAME="lbAR"> </A>
|
|
<H3>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ötigten Bauschalter, die an das
|
|
Bausystem weitergegeben werden sollen, abzufragen. Beachten Sie, dass ä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öglicht.
|
|
<P>
|
|
|
|
Für Pakete mit Autoconf-artigen Bausystemen kö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) übergeben.
|
|
<P>
|
|
|
|
Für andere Bausysteme oder wenn Sie feingranularere Steuerung benötigen
|
|
(welcher Schalter wo weitergegeben wird), können Sie <B>--get</B>
|
|
verwenden. Oder Sie können stattdessen <B>buildflags.mk</B> einbinden, das sich
|
|
um den Aufruf von <B>dpkg-buildflags</B> kümmert und die Bauschalter in
|
|
Make-Variablen speichert.
|
|
<P>
|
|
|
|
Falls Sie alle Bauschalter in die Umgebung exportieren möchten (wo sie dann
|
|
vom Baussystem eingelesen werden können):
|
|
<P>
|
|
|
|
<DL COMPACT><DT id="79"><DD>
|
|
<PRE>
|
|
DPKG_EXPORT_BUILDFLAGS = 1
|
|
include /usr/share/dpkg/buildflags.mk
|
|
</PRE>
|
|
|
|
</DL>
|
|
|
|
<P>
|
|
|
|
Für zusätzliche Steuerung was exportiert wird, können Sie die Variablen
|
|
manuell exportieren (da keine standardmäß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ürlich kö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"> </A>
|
|
<H2>ÜBERSETZUNG</H2>
|
|
|
|
Die deutsche Übersetzung wurde 2004, 2006-2019 von Helge Kreutzmann
|
|
<<A HREF="mailto:debian@helgefjell.de">debian@helgefjell.de</A>>, 2007 von Florian Rehnisch <<A HREF="mailto:eixman@gmx.de">eixman@gmx.de</A>> und
|
|
2008 von Sven Joachim <<A HREF="mailto:svenjoac@gmx.de">svenjoac@gmx.de</A>>
|
|
angefertigt. Diese Übersetzung ist Freie Dokumentation; lesen Sie die
|
|
GNU General Public License Version 2 oder neuer für die Kopierbedingungen.
|
|
Es gibt KEINE HAFTUNG.
|
|
<P>
|
|
|
|
<HR>
|
|
<A NAME="index"> </A><H2>Index</H2>
|
|
<DL>
|
|
<DT id="82"><A HREF="#lbAB">BEZEICHNUNG</A><DD>
|
|
<DT id="83"><A HREF="#lbAC">Ü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ÜTZTE SCHALTER</A><DD>
|
|
<DT id="87"><A HREF="#lbAG">FUNKTIONALITÄ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ä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ü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">Ü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>
|