diff options
Diffstat (limited to 'man/de/dpkg-buildflags.man')
-rw-r--r-- | man/de/dpkg-buildflags.man | 681 |
1 files changed, 681 insertions, 0 deletions
diff --git a/man/de/dpkg-buildflags.man b/man/de/dpkg-buildflags.man new file mode 100644 index 0000000..d15d6c2 --- /dev/null +++ b/man/de/dpkg-buildflags.man @@ -0,0 +1,681 @@ +.\" dpkg manual page - dpkg-buildflags(1) +.\" +.\" Copyright © 2010-2011 Raphaël Hertzog <hertzog@debian.org> +.\" Copyright © 2011 Kees Cook <kees@debian.org> +.\" Copyright © 2011-2015 Guillem Jover <guillem@debian.org> +.\" +.\" This is free software; you can redistribute it and/or modify +.\" it under the terms of the GNU General Public License as published by +.\" the Free Software Foundation; either version 2 of the License, or +.\" (at your option) any later version. +.\" +.\" This is distributed in the hope that it will be useful, +.\" but WITHOUT ANY WARRANTY; without even the implied warranty of +.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +.\" GNU General Public License for more details. +.\" +.\" You should have received a copy of the GNU General Public License +.\" along with this program. If not, see <https://www.gnu.org/licenses/>. +. +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* +.TH dpkg\-buildflags 1 %RELEASE_DATE% %VERSION% dpkg\-Programmsammlung +.nh +.SH BEZEICHNUNG +dpkg\-buildflags \- liefert Bauschalter zum Einsatz beim Paketbau +. +.SH ÜBERSICHT +\fBdpkg\-buildflags\fP [\fIOption\fP …] [\fIBefehl\fP] +. +.SH BESCHREIBUNG +\fBdpkg\-buildflags\fP ist ein Werkzeug, das zum Abfragen der zu verwendenden +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: +.IP 1. +systemweit mit \fB%PKGCONFDIR%/buildflags.conf\fP +.IP 2. +für den aktuellen Benutzer mit \fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP, +wobei \fB$XDG_CONFIG_HOME\fP standardmäßig auf \fB$HOME/.config\fP gesetzt ist +.IP 3. +temporär durch den Benutzer mittels Umgebungsvariablen (siehe Abschnitt +\fBUMGEBUNG\fP) +.IP 4. +dynamisch durch den Paketverwalter mittels Umgebungsvariablen, die über +\fBdebian/rules\fP gesetzt wurden (siehe Abschnitt \fBUMGEBUNG\fP) +.P +Die Konfigurationsdateien können vier Arten von Direktiven enthalten: +.TP +\fBSET\fP\fI Schalter Wert\fP +Überschreibt den Schalter namens \fISchalter\fP, um den Wert \fIWert\fP zu +erhalten. +.TP +\fBSTRIP\fP\fI Schalter Wert\fP +Aus dem Schalter namens \fISchalter\fP alle in \fIWert\fP aufgeführten Bauschalter +entfernen +.TP +\fBAPPEND\fP\fI Schalter Wert\fP +Erweitert den Schalter namens \fISchalter\fP durch Anhängen der in \fIWert\fP +angegebenen Optionen. Ein Leerzeichen wird dem angehängten Wert +vorangestellt, falls der derzeitige Wert nicht leer ist. +.TP +\fBPREPEND\fP\fI Schalter Wert\fP +Erweitert den Schalter namens \fISchalter\fP durch Voranstellen der in \fIWert\fP +angegebenen Optionen. Ein Leerzeichen wird dem vorangestellten Wert +angehängt, falls der derzeitige Wert nicht leer ist. +.P +Die Konfigurationsdateien können Kommentare in Zeilen enthalten, die mit +einer Raute (#) beginnen. Leere Zeilen werden auch ignoriert. +.SH BEFEHLE +.TP +\fB\-\-dump\fP +Gibt auf der Standardausgabe alle Kompilierschalter und ihre Werte aus. Es +wird ein Schalter pro Zeile ausgegeben, wobei der Wert durch ein +Gleichheitszeichen („\fISchalter\fP=\fIWert\fP“) abgetrennt wird. Dies ist die +Standardaktion. +.TP +\fB\-\-list\fP +Gibt die Liste der vom aktuellen Lieferanten unterstützten Schalter (einen +pro Zeile) aus. Lesen Sie den Abschnitt \fBUNTERSTÜTZTE SCHALTER\fP für weitere +Informationen über sie. +.TP +\fB\-\-status\fP +Zeigt alle Informationen an, die zum Verständnis des Verhaltens von +\fBdpkg\-buildflags\fP 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 ausgegeben. + +Dies ist zur Ausführung in \fBdebian/rules\fP 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. +.TP +\fB\-\-export=\fP\fIFormat\fP +Gibt auf der Standardausgabe Befehle aus, die dazu verwandt werden können, +alle Kompilierschalter für bestimmte Werkzeuge zu exportieren. Falls der +Wert von \fIFormat\fP nicht angegeben wird, wird \fBsh\fP 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: +.RS +.TP +\fBsh\fP +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. +.TP +\fBcmdline\fP +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. +.TP +\fBconfigure\fP (konfiguriert) +Dies ist ein historischer Alias für \fBcmdline\fP. +.TP +\fBmake\fP +Make\-Direktiven, um alle Kompilierungsschalter in der Umgebung zu setzen und +zu exportieren. Die Ausgabe kann in ein Make\-Steuerdateifragment geschrieben +und mit einer \fBinclude\fP\-Direktive ausgewertet werden. +.RE +.TP +\fB\-\-get\fP\fI Schalter\fP +Gibt den Wert des Schalters auf der Standardausgabe aus. Beendet sich mit 0, +falls der Schalter bekannt ist, andernfalls mit 1. +.TP +\fB\-\-origin\fP\fI Schalter\fP +Gibt den Ursprung des von \fB\-\-get\fP gelieferten Werts aus. Beendet sich mit +0, falls der Schalter bekannt ist, andernfalls mit 1. Der Ursprung kann +einer der folgenden Werte sein: +.RS +.TP +\fBvendor\fP +der ursprünglich vom Lieferanten gesetzte Schalter wird zurückgeliefert +.TP +\fBsystem\fP +der Schalter wurde durch eine systemweite Konfiguration gesetzt/verändert +.TP +\fBuser\fP +der Schalter wurde durch eine benutzerspezifische Konfiguration +gesetzt/verändert +.TP +\fBenv\fP +der Schalter wurde durch eine umgebungsspezifische Konfiguration +gesetzt/verändert +.RE +.TP +\fB\-\-query\fP +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 +Compiler\-Schalter mit ihrem Ursprung (seit Dpkg 1.19.0). +.IP +Zum Beispiel: +.nf + 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 +.fi +.TP +\fB\-\-query\-features\fP\fI Bereich\fP +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 \fBfuture\fP, \fBqa\fP, +\fBreproducible\fP, \fBsanitize\fP und \fBhardening\fP. Lesen Sie den Abschnitt +\fBFUNKTIONALITÄTSBEREICHE\fP für weitere Details. Beendet sich mit 0, falls +der Bereich bekannt ist, andernfalls mit 1. +.IP +Die Ausgabe ist im RFC822\-Format, mit einem Abschnitt pro +Funktionalität. Beispiel: +.IP +.nf + Feature: pie + Enabled: yes + + Feature: stackprotector + Enabled: yes +.fi +.TP +\fB\-\-help\fP +Zeigt einen Hinweis zum Aufruf und beendet das Programm. +.TP +\fB\-\-version\fP +Gibt die Version aus und beendet das Programm. +. +.SH "UNTERSTÜTZTE SCHALTER" +.TP +\fBCFLAGS\fP +Optionen für den C\-Compiler. Der vom Lieferanten gesetzte Standardwert +enthält \fI\-g\fP und die Standard\-Optimierungsstufe (normalerweise \fI\-O2\fP oder +\fB\-O0\fP, falls die Umgebungsvariable \fBDEB_BUILD_OPTIONS\fP \fInoopt\fP +definiert). +.TP +\fBCPPFLAGS\fP +Optionen für den C\-Präprozessor. Standardwert: leer. +.TP +\fBCXXFLAGS\fP +Optionen für den C++\-Compiler. Identisch zu \fBCFLAGS\fP. +.TP +\fBOBJCFLAGS\fP +Optionen für den Objective\-C\-Compiler. Identisch zu \fBCFLAGS\fP. +.TP +\fBOBJCXXFLAGS\fP +Optionen für den Objective\-C++\-Compiler. Identisch zu \fBCXXFLAGS\fP. +.TP +\fBGCJFLAGS\fP +Optionen für den GNU\-Java\-Compiler (gcj). Eine Untermenge von \fBCFLAGS\fP. +.TP +\fBFFLAGS\fP +Optionen für den Fortran\-77\-Compiler. Eine Untermenge von \fBCFLAGS\fP. +.TP +\fBFCFLAGS\fP +Optionen für den Fortran\-9x\-Compiler. Identisch zu \fBFFLAGS\fP. +.TP +\fBLDFLAGS\fP +Optionen, die beim Linken von Programmen oder Laufzeitbibliotheken an den +Compiler weitergegeben werden (falls der Linker direkt aufgerufen wird, +müssen \fB\-Wl\fP und \fB,\fP aus diesen Optionen entfernt werden). Standardmäßig +leer. +.PP +Neue Schalter können in Zukunft hinzugefügt werden, falls die Notwendigkeit +aufkommt (beispielsweise, um weitere Sprachen zu unterstützen). +. +.SH FUNKTIONALITÄTSBEREICHE +.P +Jede Bereichsfunktionalität kann durch den entsprechenden Bereichswert in +den Umgebungsvariablen \fBDEB_BUILD_OPTIONS\fP und \fBDEB_BUILD_MAINT_OPTIONS\fP +mit den ‚\fB+\fP’\- und ‚\fB\-\fP’\-Schaltern aktiviert und deaktiviert werden. Soll +beispielsweise für \fBhardening\fP die „pie“\-Funktionalität aktiviert und die +„fortify“\-Funktionalität deaktiviert werden, können Sie Folgendes in +\fBdebian/rules\fP verwenden: +.P + export DEB_BUILD_MAINT_OPTIONS=hardening=+pie,\-fortify +.P +Die spezielle Funktionalität \fBall\fP (in allen Bereichen gültig) kann dazu +verwandt werden, alle Bereichsfunktionalitäten auf einmal zu aktivieren oder +zu deaktivieren. Um daher alles im Bereich \fBhardening\fP zu deaktivieren und +nur „format“ und „fortify“ zu aktiveren, kann Folgendes eingesetzt werden: +.P + export DEB_BUILD_MAINT_OPTIONS=hardening=\-all,+format,+fortify +. +.SS "future (Zukunft)" +Mehrere Optionen zur Kompilierung (Details weiter unten) können verwandt +werden, um Funktionen zu aktivieren, die standardmäßig aktiviert sein +sollten, dies aber aus Rückwärtskompatibilitätsgründen nicht sein können. +.TP +\fBlfs\fP +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 \fB\-D_LARGEFILE_SOURCE +\-D_FILE_OFFSET_BITS=64\fP zu \fBCPPFLAGS\fP hinzugefügt wird. +. +.SS "qa (QS)" +Mehrere Optionen zur Kompilierung (Details weiter unten) können verwandt +werden, um Probleme im Quellcode oder im Bausystem zu erkennen. +.TP +\fBbug\fP +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 \fBCFLAGS\fP und +\fBCXXFLAGS\fP, wobei die Schalter auf \fB\-Werror=array\-bounds\fP, +\fB\-Werror=clobbered\fP, \fB\-Werror=implicit\-function\-declaration\fP und +\fB\-Werror=volatile\-register\-var\fP gesetzt werden. +. +.TP +\fBcanary\fP +Diese Einstellung (standardmäßig deaktiviert) fügt +Pseudo\-Zufallsbarrieren\-Optionen zu den Bauschaltern hinzu, so dass die +Bauprotokolle überprüft werden können, wie die Bauschalter weitergereicht +werden. Dies erlaubt, Auslassungen in den normalen Bauschaltereinstellungen +zu finden. Derzeit werden nur die Schalter \fBCPPFLAGS\fP, \fBCFLAGS\fP, +\fBOBJCFLAGS\fP, \fBCXXFLAGS\fP und \fBOBJCXXFLAGS\fP unterstützt, wobei die Schalter +auf \fB\-D__DEB_CANARY_\fP\fISchalter\fP_\fIZufallskennung\fP\fB__\fP gesetzt werden, und +\fBLDFLAGS\fP, das auf \fB\-Wl,\-z,deb\-canary\-\fP\fIZufallskennung\fP gesetzt wird. +. +.SS "sanitize (Bereinigung)" +Mehrere Kompilierzeit\-Optionen (nachfolgend 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. \fBHinweis\fP: Diese Optionen sollten \fBnicht\fP beim Bauen im +Produktivbetrieb benutzt werden, da sie die Zuverlässigkeit von +spezifikationsgetreuem Code, die Sicherheit oder sogar die Funktionalität +reduzieren bzw. negativ beeinflussen können. +.TP +\fBaddress\fP +Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=address\fP zu +\fBLDFLAGS\fP und \fB\-fsanitize=address \-fno\-omit\-frame\-pointer\fP zu \fBCFLAGS\fP +und \fBCXXFLAGS\fP hinzu. +.TP +\fBthread\fP +Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=thread\fP zu +\fBCFLAGS\fP, \fBCXXFLAGS\fP und \fBLDFLAGS\fP hinzu. +.TP +\fBleak\fP +Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=leak\fP zu +\fBLDFLAGS\fP hinzu. Sie wird automatisch deaktiviert, falls entweder die +Funktionalitäten \fBaddress\fP oder \fBthread\fP aktiviert werden, da diese sie +einschließen. +.TP +\fBundefined\fP +Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-fsanitize=undefined\fP +zu \fBCFLAGS\fP, \fBCXXFLAGS\fP und \fBLDFLAGS\fP hinzu. +.SS "hardening (Härtung)" +Mehrere Kompilierzeit\-Optionen (nachfolgend 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. +.TP +\fBformat\fP +Diese Einstellung (standardmäßig aktiviert) fügt \fB\-Wformat +\-Werror=format\-security\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP +und \fBOBJCXXFLAGS\fP hinzu. Damit erhalten Sie Warnungen bei inkorrekter +Verwendung von Formatzeichenketten. Es wird zu einem Fehler führen, wenn +Formatfunktionen deart verwandt werden, dass daraus ein mögliches +Sicherheitsproblem werden könnte. Derzeit warnt dies bei Aufrufen von +\fBprintf\fP\- und \fBscanf\fP\-Funktionen, bei denen die Formatzeichenkette nicht +eine reine Zeichenkette ist und es keine Formatargumente gibt, wie in +\fBprintf(foo);\fP statt \fBprintf("%s", foo);\fP. Dies könnte ein +Sicherheitsproblem sein, falls die Formatzeichenkette aus einer +unvertrauenswürdigen Eingabe stammt und ‚%n’ enthält. +. +.TP +\fBfortify\fP +Diese Einstellung (standardmäßig aktiviert) fügt \fB\-D_FORTIFY_SOURCE=2\fP zu +\fBCPPFLAGS\fP 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 ‚%n’ enthalten, +blockiert. Falls eine Anwendung von solchen Formatzeichenketten abhängt, +müssen dafür andere Lösungsmöglichkeiten gefunden werden. + +Beachten Sie, dass die Quellen auch mit \fB\-O1\fP oder höher übersetzt werden +müssen, damit diese Option einen Effekt hat. Falls die Umgebungsvariable +\fBDEB_BUILD_OPTIONS\fP \fInoopt\fP enthält, dann wird die Unterstützung von +\fBfortify\fP aufgrund neuer Warnungen von Glibc 2.16 und neuer deaktiviert. +.TP +\fBstackprotector\fP +Diese Einstellung (standardmäßig aktiviert falls „stackprotectorstrong“ +nicht verwandt wird) fügt \fB\-fstack\-protector \-\-param=ssp\-buffer\-size=4\fP zu +\fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP +und \fBFCFLAGS\fP 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). + +Diese Funktionalität benötigt das Linken mit Glibc (oder einem anderen +Anbieter von \fB__stack_chk_fail\fP). Sie muss daher deaktiviert werden, wenn +mit \fB\-nostdlib\fP oder \fB\-ffreestanding\fP oder Ähnlichem gebaut wird. +. +.TP +\fBstackprotectorstrong\fP +Diese Einstellung (standardmäßig aktiviert) fügt \fB\-fstack\-protector\-strong\fP +zu \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, +\fBFFLAGS\fP und \fBFCFLAGS\fP hinzu. Dies ist eine stärkere Variante von +\fBstackprotector\fP, allerdings ohne signifikante Einbußen bei der Leistung. + +Deaktivierung von \fBstackprotector\fP deaktiviert auch diese Einstellung. + +Diese Funktionalität stellt die gleichen Anforderungen wie \fBstackprotector\fP +und benötigt zusätzlich GCC 4.9 oder neuer. +. +.TP +\fBrelro\fP +Diese Einstellung (standardmäßig aktiviert) fügt \fB\-Wl,\-z,relro\fP zu +\fBLDFLAGS\fP 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 \fBbindnow\fP deaktiviert. +. +.TP +\fBbindnow\fP +Diese Einstellung (standardmäßig deaktiviert) fügt \fB\-Wl,\-z,now\fP zu +\fBLDFLAGS\fP hinzu. Während des Ladens des Programms werden alle dynamischen +Symbole aufgelöst, womit das gesamte PLT nur\-lesend markiert werden kann +(aufgrund von \fBrelro\fP oben). Diese Option kann nicht aktiviert werden, +falls \fBrelro\fP nicht aktiviert ist. +. +.TP +\fBpie\fP +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 deaktivieren, ü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 \fB\-fPIE\fP (mittels +\fI%PKGDATADIR%/pie\-compiler.specs\fP) zu \fBCFLAGS\fP, \fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, +\fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP und \fB\-fPIE \-pie\fP +(mittels \fI%PKGDATADIR%/pie\-link.specs\fP) zu \fBLDFLAGS\fP hinzu. Wenn die +Einstellung deaktiviert ist und GCC den Schalter einspeist, dann fügt es +\fB\-fno\-PIE\fP (mittels \fI%PKGDATADIR%/no\-pie\-compile.specs\fP) zu \fBCFLAGS\fP, +\fBCXXFLAGS\fP, \fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und +\fBFCFLAGS\fP und \fB\-fno\-PIE \-no\-pie\fP (mittels +\fI%PKGDATADIR%/no\-pie\-link.specs\fP) zu \fBLDFLAGS\fP hinzu. + +„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 (\fB\-fPIC\fP), 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. + +PIE ist nicht zu \fB\-fPIC\fP kompatibel, daher müssen Sie beim Bau von +Laufzeitbibliotheksobjekten im Allgemeinen Vorsicht walten lassen. 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. + +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: + +.RS +.TP +keine +Kann weder in ein PIE\-Programm noch in eine Laufzeitbibliothek gelinkt +werden. +.TP +\fB\-fPIE\fP +Kann in jedes Programm, aber nicht in eine Laufzeitbibliothek gelinkt werden +(empfohlen). +.TP +\fB\-fPIC\fP +Kann in jedes Programm und jede Laufzeitbibliothek gelinkt werden. +.RE + +.IP +Falls es notwendig ist, diese Schalter manuell zu setzen und die +GCC\-Spezifikations\-Hinzufügung zu umgehen, müssen mehrere Dinge beachtet +werden. Die bedingungslose und explizite Übergabe von \fB\-fPIE\fP, \fB\-fpie\fP +oder \fB\-pie\fP 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 \fB\-fPIC\fP immer als Letztes an die Kompilierungsschalter +wie \fBCFLAGS\fP übergeben wird (so dass es jedes frühere \fB\-PIE\fP außer Kraft +setzen kann) und \fB\-shared\fP als Letztes an Link\-Schalter wie \fBLDFLAGS\fP +übergeben wird (so dass es jedes frühere \fB\-pie\fP außer Kraft setzen +kann). \fBHinweis\fP: Das sollte mit der Vorgabe\-GCC\-Spezifikationsmaschinerie +nicht notwendig sein. + +.IP +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. +.SS "reproducible (Reproduzierbarkeit)" +Die Kompilierzeit\-Optionen (nachfolgend 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. +.TP +\fBtimeless\fP +Diese (standardmäßig aktivierte) Einstellung fügt \fB\-Wdate\-time\fP zu +\fBCPPFLAGS\fP hinzu. Dies führt zu Warnungen, wenn die Makros \fB__TIME__\fP, +\fB__DATE__\fP und \fB__TIMESTAMP__\fP verwandt werden. +. +.TP +\fBfixfilepath\fP +Diese Einstellung (standardmäßig deaktiviert) fügt +\fB\-ffile\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP, +\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu, +wobei \fBBUILDPATH\fP auf das oberste Verzeichnis des bauenden Pakets gesetzt +wird. Dies führt dazu, dass der Baupfad aus allen erstellten Dateien +entfernt wird. + +Falls sowohl \fBfixdebugpath\fP als auch \fBfixfilepath\fP gesetzt sind, hat diese +Option Vorrang, da sie eine Obermenge erster ist. +.TP +\fBfixdebugpath\fP +Diese Einstellung (standardmäßig aktiviert) fügt +\fB\-fdebug\-prefix\-map=\fP\fIBUILDPATH\fP\fB=.\fP zu \fBCFLAGS\fP, \fBCXXFLAGS\fP, +\fBOBJCFLAGS\fP, \fBOBJCXXFLAGS\fP, \fBGCJFLAGS\fP, \fBFFLAGS\fP und \fBFCFLAGS\fP hinzu, +wobei \fBBUILDPATH\fP auf das oberste Verzeichnis des bauenden Pakets gesetzt +wird. Dies führt dazu, dass der Baupfad aus allen erstellten Debug\-Symbolen +entfernt wird. +. +.SH UMGEBUNG +Es gibt zwei Gruppen von Umgebungsvariablen, die den gleichen Vorgang +durchführen. Der erste (DEB_\fISchalter\fP_\fIVorg\fP) sollte niemals innerhalb +von \fBdebian/rules\fP verwandt werden. Er ist für Benutzer gedacht, die das +Quellpaket mit anderen Bauschaltern erneut bauen möchten. Der zweite Satz +(DEB_\fISchalter\fP_MAINT_\fIVorg\fP) sollte nur durch Paketbetreuer in +\fBdebian/rules\fP verwandt werden, um die entstehenden Bauschalter zu ändern. +.TP +\fBDEB_\fP\fISchalter\fP\fB_SET\fP +.TQ +\fBDEB_\fP\fISchalter\fP\fB_MAINT_SET\fP +Diese Variable kann zum Erzwingen des für \fISchalter\fP zurückgegebenen Werts +verwandt werden. +.TP +\fBDEB_\fP\fISchalter\fP\fB_STRIP\fP +.TQ +\fBDEB_\fP\fISchalter\fP\fB_MAINT_STRIP\fP +Diese Variable kann zum Bereitstellen einer durch Leerzeichen getrennten +Liste von Optionen verwandt werden, die aus dem Satz von \fISchalter\fP +zurückgelieferten Schaltern entfernt werden. +.TP +\fBDEB_\fP\fISchalter\fP\fB_APPEND\fP +.TQ +\fBDEB_\fP\fISchalter\fP\fB_MAINT_APPEND\fP +Diese Variable kann zum Anhängen ergänzender Optionen zum Wert, der von +\fISchalter\fP zurückgegeben wird, verwandt werden. +.TP +\fBDEB_\fP\fISchalter\fP\fB_PREPEND\fP +.TQ +\fBDEB_\fP\fISchalter\fP\fB_MAINT_PREPEND\fP +Diese Variable kann zum Voranstellen ergänzender Optionen zum Wert, der von +\fISchalter\fP zurückgegeben wird, verwandt werden. +.TP +\fBDEB_BUILD_OPTIONS\fP +.TQ +\fBDEB_BUILD_MAINT_OPTIONS\fP +Diese Variablen können von Benutzern oder Betreuern zum Deaktivieren oder +Aktivieren verschiedener Bereichsfunktionalitäten benutzt werden, die +Bauschalter beeinflussen. Die Variable \fBDEB_BUILD_MAINT_OPTIONS\fP setzt jede +Einstellung in den Funktionalitätsbereichen \fBDEB_BUILD_OPTIONS\fP außer +Kraft. Lesen Sie den Abschnitt \fBFUNKTIONALITÄTSBEREICHE\fP für weitere +Details. +.TP +\fBDEB_VENDOR\fP +Diese Einstellung definiert den aktuellen Lieferanten. Falls nicht gesetzt, +wird er aus \fB%PKGCONFDIR%/origins/default\fP ermittelt. +.TP +\fBDEB_BUILD_PATH\fP +Diese Variable setzt den Baupfad (seit Dpkg 1.18.8), der in Funktionalitäten +wie \fBfixdebugpath\fP verwandt wird, so dass sie durch den Aufrufenden +gesteuert werden können. Diese Variable ist derzeit spezifisch für Debian +und Derivative. +.TP +\fBDPKG_COLORS\fP +Setzt den Farbmodus (seit Dpkg 1.18.5). Die derzeit unterstützten Werte +sind: \fBauto\fP (Vorgabe), \fBalways\fP und \fBnever\fP. +.TP +\fBDPKG_NLS\fP +Falls dies gesetzt ist, wird es zur Entscheidung, ob Native Language +Support, auch als Unterstützung für Internationalisierung (oder i18n) +bekannt, aktiviert wird (seit Dpkg 1.19.0). Die akzeptierten Werte sind: +\fB0\fP und \fB1\fP (Vorgabe). +. +.SH DATEIEN +.SS Konfigurationsdateien +.TP +\fB%PKGCONFDIR%/buildflags.conf\fP +Systemweite Konfigurationsdatei +.TP +\fB$XDG_CONFIG_HOME/dpkg/buildflags.conf\fP oder +.TQ +\fB$HOME/.config/dpkg/buildflags.conf\fP +Benutzerkonfigurationsdatei +.SS Paketierungsunterstützung +.TP +\fB%PKGDATADIR%/buildflags.mk\fP +Make\-Steuerdateischnipsel, das alle von \fBdpkg\-buildflags\fP unterstützten +Schalter in Variablen laden (und optional exportieren) wird. (seit Dpkg +1.16.1) +. +.SH BEISPIELE +Um Bauschalter an einen Baubefehl in einer Make\-Steuerdatei zu übergeben: +.PP +.RS 4 +.nf +$(MAKE) $(shell dpkg\-buildflags \-\-export=cmdline) + +\&./configure $(shell dpkg\-buildflags \-\-export=cmdline) +.fi +.RE +.PP +Um Bauschalter in einem Shell\-Skript oder Shell\-Fragement zu setzen, kann +\fBeval\fP verwendet werden, um die Ausgabe zu interpretieren und die Schalter +in die Umgebung zu exportieren: +.PP +.RS 4 +.nf +eval "$(dpkg\-buildflags \-\-export=sh)" && make +.fi +.RE +.PP +Oder die Positionsparameter zu setzen, die an einen Befehl übergeben werden +sollen: +.PP +.RS 4 +.nf +eval "set \-\- $(dpkg\-buildflags \-\-export=cmdline)" +for dir in a b c; do (cd $dir && ./configure "$@" && make); done +.fi +.RE +. +.SS "Verwendung in debian/rules" +Sie sollten \fBdpkg\-buildflags\fP aufrufen oder \fBbuildflags.mk\fP in die Datei +\fBdebian/rules\fP einbinden, um die benötigten Bauschalter, die an das +Bausystem weitergegeben werden sollen, abzufragen. Beachten Sie, dass ältere +Versionen von \fBdpkg\-buildpackage\fP (vor Dpkg 1.16.1) diese Variablen +automatisch exportierten. Allerdings sollten Sie sich nicht darauf +verlassen, da dies den manuellen Aufruf von \fBdebian/rules\fP nicht korrekt +ermöglicht. +.PP +Für Pakete mit Autoconf\-artigen Bausystemen können Sie die relevanten +Optionen direkt wie oben gezeigt an Configure oder \fBmake\fP(1) übergeben. +.PP +Für andere Bausysteme oder wenn Sie feingranularere Steuerung benötigen +(welcher Schalter wo weitergegeben wird), können Sie \fB\-\-get\fP +verwenden. Oder Sie können stattdessen \fBbuildflags.mk\fP einbinden, das sich +um den Aufruf von \fBdpkg\-buildflags\fP kümmert und die Bauschalter in +Make\-Variablen speichert. +.PP +Falls Sie alle Bauschalter in die Umgebung exportieren möchten (wo sie dann +vom Bausystem eingelesen werden können): +.PP +.RS 4 +.nf +DPKG_EXPORT_BUILDFLAGS = 1 +include %PKGDATADIR%/buildflags.mk +.fi +.RE +.PP +Für zusätzliche Steuerung, was exportiert wird, können Sie die Variablen +manuell exportieren (da keine standardmäßig exportiert werden): +.PP +.RS 4 +.nf +include %PKGDATADIR%/buildflags.mk +export CPPFLAGS CFLAGS LDFLAGS +.fi +.RE +.PP +Und natürlich können Sie die Schalter manuell an Befehle weitergeben: +.PP +.RS 4 +.nf +include %PKGDATADIR%/buildflags.mk +build\-arch: +\& $(CC) \-o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS) +.fi +.RE +.SH ÜBERSETZUNG +Die deutsche Übersetzung wurde 2004, 2006-2020 von Helge Kreutzmann +<debian@helgefjell.de>, 2007 von Florian Rehnisch <eixman@gmx.de>, +2008 von Sven Joachim <svenjoac@gmx.de> und 2019,2020 von Mario +Blättermann <mario.blaettermann@gmail.com> +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. |