Man page - dpkg-buildflags(1)
Packages contains this manual
- deb822(5)
- dpkg-vendor(1)
- deb-symbols(5)
- deb-src-rules(5)
- dpkg-mergechangelogs(1)
- dsc(5)
- deb-src-control(5)
- dpkg-shlibdeps(1)
- dpkg-genbuildinfo(1)
- dpkg-scanpackages(1)
- deb-substvars(5)
- dpkg-parsechangelog(1)
- dpkg-architecture(1)
- deb-triggers(5)
- deb-changelog(5)
- deb-extra-override(5)
- deb-buildinfo(5)
- dpkg-buildpackage(1)
- dpkg-distaddfile(1)
- dpkg-gencontrol(1)
- dpkg-buildtree(1)
- deb-postrm(5)
- deb-version(7)
- deb-prerm(5)
- deb-preinst(5)
- deb-src-files(5)
- dpkg-buildapi(1)
- dpkg-checkbuilddeps(1)
- deb-src-symbols(5)
- deb-old(5)
- dpkg-source(1)
- deb-changes(5)
- deb-origin(5)
- dpkg-buildflags(1)
- deb-override(5)
- deb(5)
- dpkg-scansources(1)
- deb-control(5)
- deb-split(5)
- deb-shlibs(5)
- dpkg-build-api(7)
- deb-postinst(5)
- deb-conffiles(5)
- dpkg-genchanges(1)
- dpkg-gensymbols(1)
- dpkg-name(1)
- deb-md5sums(5)
apt-get install dpkg-dev
Available languages:
en pt nl sv deManual
dpkg-buildflags
NAMNSYNOPS
BESKRIVNING
KOMMANDON
FLAGGOR SOM STĂDS
FUNKTIONSOMRĂ DEN
abi
future
qa
optimize
sanitize
hardening
reproducible
MILJĂVARIABLER
FILER
Konfigurationsfiler
Paketeringsstöd
EXEMPEL
AnvÀnda i debian/rules
ĂVERSĂTTNING
NAMN
dpkg-buildflags - returnerar byggflaggor att anvÀnda för att bygga paket
SYNOPS
dpkg-buildflags [ flagga ...] kommando
BESKRIVNING
dpkg-buildflags Àr ett verktyg för att hÀmta kompileringsflaggor att anvÀnda för att bygga Debianpaket.
De förvalda flaggorna anges av leverantören, men de kan utökas/överstyras pÄ flera sÀtt:
|
1. |
pÄ hela systemet med /etc/dpkg/buildflags.conf ; |
||
|
2. |
för den nuvarande anvÀndaren med $XDG_CONFIG_HOME/dpkg/buildflags.conf dÀr $XDG_CONFIG_HOME har standardvÀrdet $HOME/.config ; |
||
|
3. |
temporĂ€rt av anvĂ€ndaren med miljövariabler (se stycket "MILJĂ"). |
||
|
4. |
dynamiskt av paketansvariga med miljövariabler som sĂ€tts via debian/rules (se stycket "MILJĂ"). |
Konfigurationsfilerna
kan innehÄlla fyra sorters direktiv:
SET
flagga vÀrde
Ăverstyr flaggan flagga till att ha vĂ€rdet vĂ€rde .
STRIP flagga vÀrde
Ta bort alla flaggor som listas i vÀrde frÄn flaggan som anges i flagga . Sedan dpkg 1.16.1.
APPEND flagga vÀrde
Utöka flaggan flagga genom att lÀgga till alternativen som anges i vÀrde . Ett blanksteg lÀggs till före vÀrdet om flaggans nuvarande vÀrde inte Àr tomt.
PREPEND flagga vÀrde
Utöka flaggan flagga genom att lÀgga till alternativen som anges i vÀrde först. Ett blanksteg lÀggs till efter vÀrdet om flaggans nuvarande vÀrde inte Àr tomt. Sedan dpkg 1.16.1.
Konfigurationsfilerna kan innehĂ„lla kommentarer pĂ„ rader som börjar med ett nummertecken (#). Ăven tomma rader ignoreras.
Kommandot introducerades i dpkg 1.15.7..
KOMMANDON
--dump
Skriv alla kompileringsflaggor och deras vĂ€rde pĂ„ standard ut. En flagga skrivs per rad, avdelade frĂ„n sitt vĂ€rde med ett likamedtecken (â flagga = vĂ€rde â). Detta Ă€r standardĂ„tgĂ€rden.
--list
Skriv ut listan över flaggor som stöds av den aktuella leverantören (en per rad). Se stycket "FLAGGOR SOM STĂDS" för mer information om dem.
--status
Visa information som kan vara anvÀndbar för att förklara dpkg-buildflags beteende (sedan dpkg 1.16.5): relevanta miljövariabler, aktuell ÄterförsÀljare, status för alla funktionsflaggor. Skriv Àven ut slutgiltiga kompilatorflaggor och deras kÀlla.
Detta Àr tÀnkt att köras frÄn debian/rules sÄ att byggloggen innehÄller ett tydligt spÄr över de anvÀnda byggflaggorna. Det kan vara anvÀndbart för att diagnostisera problem rörande dessa.
--export= format
Skriv kommandon som kan anvÀndas för att exportera alla kompileringsflaggor för nÄgot specifikt verktyg. Om format inte anges antas sh . Endast kompileringsflaggor som börjar med en stor bokstav tas med, andra antas att inte vara lÀmpliga för miljön. Format som stöds:
|
sh |
Skalkommandon för att sÀtta och exportera alla kompileringsflaggor i miljön. FlaggvÀrdena citeras sÄ att utdata Àr redo att utvÀrderas av ett skal. |
cmdline
Argument att sÀnda till byggprogrammets kommandorad för att anvÀnda alla kompileringsflaggor (sedan dpkg 1.17.0). Flaggornas vÀrde citeras enligt skalsyntax.
configure
Detta Àr ett gammalt alias för cmdline .
make
Make-direktiv för att sÀtta och exportera alla kompileringsflaggor i miljön. Utdata kan skrivas till ett makefil-fragment och utvÀrderas med ett include -direktiv.
--get flagga
Skriv ut vÀrdet pÄ flaggan pÄ standard ut. Avslutar med 0 om flaggan Àr kÀnd, om inte avslutar den med 1.
--origin flagga
Anger ursprunget till flaggan
som returneras av
--get
. Avslutar med 0 om flaggan
Àr kÀnd, om inte avslutar med 1. Ursprunget kan
vara ett av följande vÀrden:
vendor
originalflagga satt av leverantören returneras;
system
flaggan Àr satt/modifierad av systemkonfigurationen;
user
flaggan Àr satt/modifierad av anvÀndarkonfigurationen;
|
env |
flaggan Àr satt/modifierad av en miljöspecifik konfiguration. |
--query
Srkiv ut information som kan vara anvÀndbar för att förklara programmets beteende: aktuell ÄterförsÀljare, relevanta miljövariabler, funktionsomrÄden, status för alla funktionsflaggor, huruvida en funktion hanteras av ett inbyggt förval av kompilatorn (sedan dpkg 1.21.14) och kompilatorflaggorna med sina ursprung (sedan dpkg 1.19.0).
Till exempel:
Vendor: Debian
Environment:
DEB_CFLAGS_SET=-O0 -Wall
Area: qa
Features:
bug=no
canary=no
Builtins:
Area: hardening
Features:
pie=no
Builtins:
pie=yes
Area: reproducible
Features:
timeless=no
Builtins:
Flag: CFLAGS
Value: -O0 -Wall
Origin: env
Flag: CPPFLAGS
Value: -D_FORTIFY_SOURCE=2
Origin: vendor
--query-features omrÄde
Skriv ut funktioner aktiverade för ett givet omrÄde (sedan dpkg 1.16.2). Om funktionen hanteras (Àven om bara av nÄgra arkitekturer) som ett inbyggt förval av kompilatorn visas fÀltet Bultin (sedan dpkg 1.21.14). Se avsnittet /FUNKTIONSOMRà DEN för fler detaljer om de omrÄden som Àr kÀnda för nÀrvarande. Avslutar med 0 om omrÄdet Àr kÀnt, avslutar annars med 1.
Utdata Àr pÄ RFC822-headerformat, med en sektion per funktion. Till exempel:
Feature: pie
Enabled: yes
Builtin: yes
Feature: stackprotector
Enabled: yes
--help
Visar hjÀlpskÀrm och avslutar.
--version
Visar version och avslutar.
FLAGGOR SOM STĂDS
ASFLAGS
Flaggor för vÀrdassemblern. Förvalt vÀrde: tomt. Sedan dpkg 1.21.0.
CFLAGS
Flaggor för vÀrd-C-kompilatorn. StandardvÀrdet som satts av leverantören innehÄller -g och den förvalda optimeringsnivÄn (vanligtvis -O2 , eller -O0 om miljövariabeln DEB_BUILD_OPTIONS definierar noopt ).
CPPFLAGS
Flaggor för vÀrd-C-förprocesseraren. Förvalt vÀrde: tomt.
CXXFLAGS
Flaggor för vÀrd-C++-kompilatorn. Samma som CFLAGS .
OBJCFLAGS
Flaggor för vÀrd-Objective C-kompilatorn. Samma som CFLAGS . Sedan dpkg 1.17.7.
OBJCXXFLAGS
Flaggor för vÀrd-Objective C++-kompilatorn. Samma som CXXFLAGS . Sedan dpkg 1.17.7.
DFLAGS
Flaggor för vÀrd-D-kompilatorn (ldc eller gdc). Sedan dpkg 1.20.6.
FFLAGS
Flaggor för vÀrd-Fortran 77-kompilatorn. En delmÀngd av CFLAGS .
FCFLAGS
Flaggor för vÀrd-Fortran 9x-kompilatorn. Samma som FFLAGS . Sedan dpkg 1.17.7.
LDFLAGS
Flaggor som sÀnds till vÀrdkompilatorn vid lÀnkning av binÀrer eller delade objekt (om lÀnkaren anropas direkt mÄste -Wl och , tas bort frÄn dessa flaggor). StandardvÀrde: tomt.
ASFLAGS_FOR_BUILD
Flaggor för bygg-assemblern. Förvalt vÀrde: tomt. Sedan dpkg 1.22.1.
CFLAGS_FOR_BUILD
Flaggor för bygg-C-kompilatorn. StandardvÀrdet som satts av leverantören innehÄller -g och den förvalda optimeringsnivÄn (vanligtvis -O2 , eller -O0 om miljövariabeln DEB_BUILD_OPTIONS definierar noopt ). Sedan dpkg 1.22.1.
CPPFLAGS_FOR_BUILD
Flaggor för bygg-C-förprocesseraren. Förvalt vÀrde: tomt. Sedan dpkg 1.22.1.
CXXFLAGS_FOR_BUILD
Flaggor för bygg-C++-kompilatorn. Samma som CFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.
OBJCFLAGS_FOR_BUILD
Flaggor för bygg-Objective C-kompilatorn. Samma som CFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.
OBJCXXFLAGS_FOR_BUILD
Flaggor för bygg-Objective C++-kompilatorn. Samma som CXXFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.
DFLAGS_FOR_BUILD
Flaggor för bygg-D-kompilatorn (ldc eller gdc). Sedan dpkg 1.22.1.
FFLAGS_FOR_BUILD
Flaggor för bygg-Fortran 77-kompilatorn. En delmÀngd av CFLAGS_FOR_BUILD . Sedan dpkg 1.22.1.
FCFLAGS_FOR_BUILD
Flaggor för bygg-Fortran 9x-kompilatorn. Samma som FFLAGS_FOR_BUIDL . Sedan dpkg 1.22.1.
LDFLAGS_FOR_BUILD
Flaggor som sÀnds till bygg-kompilatorn vid lÀnkning av binÀrer eller delade objekt (om lÀnkaren anropas direkt mÄste -Wl och , tas bort frÄn dessa flaggor). StandardvÀrde: tomt. Sedan dpkg 1.22.1.
Nya flaggor kan komma att lÀggas till i framtiden om behovet uppstÄr (till exempel för att stöda andra sprÄk).
FUNKTIONSOMRĂ DEN
FunktionsomrÄden Àr för nÀrvarande ÄterförsÀljarspecifika, och de som beskrivs nedan Àr de enda som Àr kÀnda pÄ Debian och dess derivat.
Varje omrĂ„desfunktion kan aktiveras och inaktiveras i miljövariablerna DEB_BUILD_OPTIONS och DEB_BUILD_MAINT_OPTIONS :s omrĂ„desvĂ€rde med Ă€ndringsvĂ€rdena â + â och â - â. Genom att följa den allmĂ€nna syntaxen för dessa variabler (som beskriven i dpkg-buildpackage(1) kan flera funktionsomrĂ„den anges avdelade med blanksteg, dĂ€r var och en fĂ„r funktionsangivelser som nödvĂ€ndiga parametrar efter ett likhetstecken (â = â). Funktionsangivelserna Ă€r kommaavdelade och tolkas frĂ„n vĂ€nster till höger, dĂ€r instĂ€llningarna inom samma funktionsangivelse överskriver de tidigare, Ă€ven om funktionsangivelserna delas över flera blankstegsavdelade funktionsomrĂ„deinstĂ€llningar för samma omrĂ„de.
För att till exempel aktivera hardening -funktionen âpieâ och inaktivera funktionen âfortifyâ kan du göra detta i debian/rules :
export DEB_BUILD_MAINT_OPTIONS = hardening=+pie,-fortify
Den speciella funktionen all kan anvĂ€ndas för att aktivera eller inaktivera alla omrĂ„desfunktioner samtidigt. Du kan till exempel inaktivera allt i omrĂ„det hardening och endast aktivera âformatâ och âfortifyâ med:
export DEB_BUILD_MAINT_OPTIONS = hardening=-all,+format,+fortify
Flera funktionsomrÄden kan stÀllas in:
export DEB_BUILD_MAINT_OPTIONS = hardening=+pie abi=+lfs
Beteendet för överstyrning gĂ€ller pĂ„ samma sĂ€tt för specialfunktionen all (samtliga) som för specifika funktioner, vilket gör det möjligt att pussla. SĂ„ledes, för att aktivera âlfsâ i omrĂ„det abi och endast âpieâ och âfortifyâ i omrĂ„det hardening , men bara âformatâ om VILLKOR Ă€r definierat, sĂ„ kan detta göras med:
export
DEB_BUILD_MAINT_OPTIONS = hardening=-all,+pie,+format
abi=+lfs
âŠ
DEB_BUILD_MAINT_OPTIONS += hardening=+fortify
ifdef VILLKOR
DEB_BUILD_MAINT_OPTIONS += hardening=-format
endif
abi
Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att aktivera funktioner som kan Àndra ABI:et för ett paket, men som inte kan aktiveras som standard pÄ grund av bakÄtkompatibilitetsorsaker sÄvida de inte samordnas eller kontrolleras var för sig.
|
lfs |
Den hÀr instÀllningen (sedan dpkg 1.22.0; inaktiverad som förval) aktiverar stöd för stora filer pÄ 32-bitars-arkitekturer dÀr deras ABI inte som förval inkluderar LFS, genom att lÀgga till -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 till CPPFLAGS . |
NÀr funktionen Àr aktiverad kommer den överstyra vÀrdet frÄn samma funktion i funktionsomrÄdet future .
time64
Den hÀr instÀllningen (sedan dpkg 1.22.0; aktiverad som förval förutom för i386, hurd-i386 och kfreebsd-i386 sedan dpkg 1.22.5) aktiverar stöd för 64-bitars time_t pÄ 32-bitars-arkitekturer dÀr deras ABI inte som förval inkluderar det, genom att lÀgga till -D_TIME_BITS=64 till CPPFLAGS . InstÀllningen aktiverar automatiskt funktionen lfs frÄn funktionsomrÄdet abi .
Om instÀllningen aktiveras explicit aktiveras den för alla arkitekturer, inklusive i386, men inte varken hurd-i386 eller kfreebsd-i386 (dÀr kÀrnan inte har ett grÀnssnitt för 64-bitarstid), och inkluderar förvalet för baklÀngeskompatibilitet.
Det Àr ocksÄ aktiverat som standard pÄ gcc pÄ Debianarkitekturerna armel, armhf, hppa, m68k, mips, mipsel, powerpc och sh4, dÀr istÀllet -U_LARGEFILE_SOURCE -U_FILE_OFFSET_BITS -U_TIME_BITS lÀggs till CPPFLAGS nÀr den hÀr funktionen inaktiveras.
future
Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att aktivera funktioner som borde vara aktiverade som standard, men som inte kan vara det pÄ grund av bakÄtkompatibilitetsorsaker.
|
lfs |
Den hÀr instÀllningen (sedan dpkg 1.19.0; inaktiverad som förval) Àr nu ett alias för funktionen lfs i abi -omrÄdet, anvÀnd den istÀllet. Funktionen frÄn abi -omrÄdet överstyr den hÀr instÀllningen. |
qa
Flera
kommandoradsflaggor (beskrivna nedan) kan anvÀndas
för att göra det lÀttare att hitta problem i
kÀllkoden eller byggsystemet.
bug-implicit-func
Den hÀr instÀllningen (sedan dpkg 1.22.3; aktiverad som förval sedan 1.22.6) lÀgger till -Werror=implicit-function-declaration till CFLAGS .
|
bug |
InstÀllningen (sedan dpkg 1.17.4; inaktiverad som förval) lÀgger till ytterligare varningar som pÄlitligt upptÀcket problematisk kÀllkod. Varningarna Àr ödesdigra. De enda flaggor som för nÀrvarande stöds Àr CFLAGS och CXXFLAGS med flaggorna satt till -Werror=array-bounds , -Werror=clobbered , -Werror=implicit-function-declaration och -Werror=volatile-register-var . |
Den hÀr funktionen hanterar -Werror=implicit-function-declaration via funktionen bug-implicit-func , om den inte har angivits.
canary
Den hÀr instÀllningen (sedan dpkg 1.17.14; inaktiverad som förval) lÀgger till overksamma tjallarflaggor till byggflaggorna, sÄ att byggloggarna kan kontrolleras för att se hur byggflaggor vidarebefordras för att göra det enklare att hitta nÀr vanliga byggflagor utesluts. De enda flaggor som stöds Àr för nÀrvarande CPPFLAGS , CFLAGS , OBJCFLAGS , CXXFLAGS och OBJCXXFLAGS med flaggorna satta till -D__DEB_CANARY_ flag _ slumpmÀssigt-id __ , och LDFLAGS satt till -Wl,-z,deb-canary- slumpmÀssigt-id .
optimize
Flera kommandoradsflaggor (beskrivna nedan) kan anvÀndas för att hjÀlpa till att optimera den skapade binÀren (sedan dpkg 1.21.0). Observera : Om all aktiveras kan dessa flaggor leda till binÀrartefakter som inte kan reproduceras.
|
lto |
InstÀllningen (sedan dpkg 1.2.0; inaktiverad som förval) aktiverar Link Time Optimization (optimering vid lÀnkning) genom att lÀgga till -flto=auto -ffat-lto-objects till CFLAGS , CXXFLAGS , OBJCXXFLAGS , FFLAGS , FCFLAGS och LDFLAGS . |
sanitize
Du kan
anvÀnda flera kompileringsflaggor (se detaljer nedan)
för att sanera den fÀrdiga binÀren mot
minnesfördÀrvningsar, minneslÀckor,
anvÀndning efter frigivning, datakapplöpningsfel i
trÄdar och fel i förbindels med odefinierat
beteende.
Observera
: Dessa flaggor bör
inte
anvÀndas för produktionsbygg eftersom
de kan minska pÄlitligheten för korrekt kod,
minska sÀkerheten eller till och med
funktionsrikedomen.
address
Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=address till LDFLAGS och -fsanitize=address -fno-omit-frame-pointer till CFLAGS och CXXFLAGS .
thread
Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=thread till CFLAGS , CXXFLAGS och LDFLAGS .
leak
Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=leak till LDFLAGS . Den inaktiveras automatiskt om antingen funktionen address eller thread aktiveras, eftersom de implicerar den.
undefined
Den hÀr instÀllningen (sedan dpkg 1.18.0; inaktiverad som förval) lÀgger till -fsanitize=undefined till CFLAGS , CXXFLAGS och LDFLAGS .
hardening
Du kan
anvÀnda flera kompileringsflaggor (se detaljer nedan)
för att hÀrda den fÀrdiga binÀren mot
minnesfördÀrvningsangrepp, eller för att ge
ytterligare varningsmeddelanden under kompileringen.
Förutom det som anges nedan aktiveras dessa som
standard för arkitekturer som stöder dem.
format
InstĂ€llningen (sedan dpkg 1.16.1; aktiverad som förval) lĂ€gger till -Wformat -Werror=format-security till CFLAGS , CXXFLAGS , OBJCFLAGS och OBJCXXFLAGS . Detta kommer att varna om olĂ€mplig anvĂ€ndning av formatstrĂ€ngar, och att misslyckas nĂ€r formatfunktionerna anvĂ€nds pĂ„ ett sĂ€tt som representerar möjliga sĂ€kerhetsproblem. För nĂ€rvarande varnar detta om anrop till funktionerna printf och scanf dĂ€r formatstrĂ€ngen inte Ă€r en fast strĂ€ng och nĂ€r det inte finns nĂ„gra formatargument, som i printf(foo); istĂ€llet för printf("%s", foo); Detta kan vara ett sĂ€kerhetshĂ„l om formatstrĂ€ngen kommer frĂ„n en obetrodd kĂ€lla och innehĂ„ller â%nâ.
fortify
InstĂ€llningen (sedan dpkg 1.16.1; aktiverad som förval) lĂ€gger till -D_FORTIFY_SOURCE=2 till CPPFLAGS . Kompilatorn har under kodgenereringen kĂ€nnedom om en hel del information om buffertstorlekar (dĂ€r tillĂ€mpligt) och försöker ersĂ€tta osĂ€kra funktionsanrop med obegrĂ€nsade buffertlĂ€ngder med lĂ€ngdbegrĂ€nsade dito. Det hĂ€r Ă€r speciellt anvĂ€ndbart för gammal, skrĂ€pig kod. Dessutom blockeras formatstrĂ€ngar i skrivbart minne som innehĂ„ller â%nâ. Om ett program Ă€r beroende av en sĂ„dan formatstrĂ€ng mĂ„ste det gĂ„s runt i kod.
Observera att för att den hÀr flaggan ska ha nÄgon funktion mÄste kÀllkoden ocksÄ kompileras med -O1 eller högre. Om miljövariabeln DEB_BUILD_OPTIONS innehÄller noopt kommer stödet för fortify att inaktiverats, pÄ grund av nya varningar som ges av glibc 2.16 och senare.
stackprotector
InstÀllningen (sedan dpkg 1.16.1; aktiverad som förval om stackprotectorstrong inte anvÀnds) lÀgger till -fstack-protector --param=ssp-buffer-size=4 till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS . Detta lÀgger till sÀkerhetskontroller mot stacköverskrivningar, vilket gör att mÄnga möjliga kodinjiceringsangrepp istÀllet avbryter programmet. I det bÀsta fallet gör det kodinjiceringsangrepp till överbelastnignsangrepp eller icke-problem (beroende pÄ programmet).
Den hÀr funktionen krÀver lÀnkning mot glibc (eller ett annat bibliotek som tillhandahÄller __stack_chk_fail ), sÄ det mÄste inaktiveras nÀr du bygger med -nostdlib eller -ffreestanding eller liknande.
stackprotectorstrong
InstÀllningen (sedan dpkg 1.17.11; aktiverad som förval) lÀgger till -fstack-protector-strong till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS . Detta Àr en starkare variant av stackprotector , men utan markanta prestandaminskningar.
Om du inaktiverar stackprotector inaktiveras Àven denna instÀllning.
Funktionen har samma krav som stackprotector , och krÀver dessutom gcc 4.9 eller senare.
stackclash
InstÀllningen (sedan dpkg 1.22.0; aktiverad som förval) lÀgger till -fstack-clash-protection pÄ amd64 , arm64 , armhf och armel till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS . Detta lÀgger till kod som förhindrar attacker av typen stackkrock.
btacnh
InstÀllningen (sedan dpkg 1.122.0; aktiverad som förval) lÀgger till -fcf-protection pÄ amd64 och -mbranch-protection=standard pÄ arm64 till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS and FCFLAGS och FCFLAGS . Detta lÀgger till förgreningsskydd till indirekta anrop, hopp och returer för att under körning kontrollera att de Àr giltiga.
relro
InstÀllningen (sedan dpkg 1.16.1; aktiverad som förval) lÀgger till -Wl,-z,relro till LDFLAGS . Vid inlÀsning av programmet mÄste lÀnkaren skriva till flera ELF-minnessektioner. Den hÀr instÀllningen flaggar till inlÀsaren att dessa sektioner ska göras skrivskyddade innan programmet fÄr kontroll. Detta skyddar huvudsaklingen mot GOT-överskrivningsangrepp. Om instÀllningen inaktiveras kommer Àven bindnow att inaktiveras.
bindnow
InstÀllningen (sedan dpkg 1.16.1; inaktiverad som förval) lÀgger till -Wl,-z,now till LDFLAGS . Vid inlÀsning av programmet löses alla dynamiska symboler, vilket gör att hela PLT kan markeras som skrivskyddad (pÄ grund av relro ovan). InstÀllningen kan inte aktiveras om relro inte Àr aktiverad.
|
pie |
Den hÀr instÀllningen (sedan dpkg 1.16.1; utan globalt förval sedan dpkg 1.18.23, eftersom den aktiveras som förval numera av gcc pÄ Debianarkitekturerna amd64, arm64, armel, armhf, hurd-i386, i386, kfreebsd-amd64, kfreebsd-i386, mips, mipsel, mips64el, powerpc, ppc64, ppc64el, riscv64, s390x, sparc och sparc64) lÀgger till de flaggor som krÀvs för att aktivera eller inaktivera PIE via gcc-specifikationsfiler, om det behövs, beroende pÄ om gcc lÀgger till flaggorna sjÀlv pÄ arkitekturen eller inte. Om instÀllningen aktiveras och gcc injicerar flaggorna lÀgger den inte till NÄgonting. Om instÀllningen Àr aktiverad och gcc inte injicerar flaggorna, lÀgger den till -fPIE (via /usr/share/dpkg/pie-compiler.specs ) till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS , samt -fPIE -pie (via /usr/share/dpkg/pie-link.specs ) till LDFLAGS . NÀr instÀllningen Àr inaktiverad och gcc injicerar flaggorna, lÀgger den till -fno-PIE (via /usr/share/dpkg/no-pie-compile.specs ) till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS , samt -fno-PIE -no-pie (via /usr/share/dpkg/no-pie-link.specs ) till LDFLAGS . |
Positionsoberoende exekverbara program (PIE) behövs för att dra fördel av slumpmÀssig adressrymd (ASLR), vilket stöds av vissa versioner av kÀrnan. Medan ASLR redan kan anvÀndas för datautrymmen i stacken och heap:en (brk och mmap), mÄste kodomrÄden först kompileras som positionsoberoende. Delade bibliotek gör redan detta (-fPIC), sÄ de drar automatiskt fördel av ASLR medan binÀra .text-regioner mÄste byggas med PIE för att uppnÄ ASLR. NÀr detta sker Àr ROP-angrepp (Return Oriented Programming) mycket svÄrare eftersom det inte finns nÄgra statiska platser att studsa frÄn i ett minnesfördÀrvningsangrepp.
PIE Àr inte kompatibelt med -fPIC , sÄ allmÀn försiktighet mÄste tas vid bygge av delade objekt. Men eftersom PIE-flaggorna som skapas injiceras via gcc-specifikationsfiler bör det alltid vara sÀkert att ovillkorligen sÀtta dem oberoende av typen av objekt som kompileras eller lÀnkas.
Statiska
bibliotek kan anvÀndas av program eller andra delade
bibliotek. Beroende pÄ vilka flaggor som anvÀnds
för att kompilera objekten inuti ett statisk bibliotek
kan dessa vara anvÀndas av olika uppsÀttningar
objekt:
inget
Kan varken lÀnkas till ett PIE-program eller ett delat bibliotek.
-fPIE
Kan lÀnkas till alla program, men inte ett delat bibliotek (rekommenderas).
-fPIC
Kan lÀnkas till alla program och delade bibliotek.
Om flaggorna behöver sÀttas manuellt och gcc:s spec-injektion förbigÄs, finns det flera saker man behöver tÀnka pÄ. Att ovillkorligen och explicit sÀnda -fPIE , -fpie eller -pie till ett byggsystem som anvÀnder libtool Àr sÀkert eftersom flaggorna kommer skalas av nÀr delade bibliotek byggs. PÄ projekt som bygger bÄde program och delade bibliotek kan du annars behöva se till att -fPIC alltid sÀnds sist i kompileringsflaggor sÄsom CFLAGS nÀr delade bibliotek byggs (sÄ att den överstyre en tidigare angiven -PIE ), och att -shared sÀnds sist till lÀnkflaggor sÄsom LDFLAGS (sÄ att den överstyr en tidigare angiven -pie ). Observera : Detta behöver inte göras med standard-gcc-specifikationsmaskineriet.
Eftersom PIE i tillÀgg implementeras med ett generellt register kan vissa arkitekturer med fÄ register (men inte lÀngre i386 eftersom optimeringar implementerats i gcc >= 5) se prestandaförluster upp till 15% i vÀldigt textsegment-tunga programs körning; de flesta körningar ser mindre Àn 1%. Arkitekturer med mÄnga generella register (t.ex amd64) ser inte en lika stor vÀrsta falls-förlust.
reproducible
Kompileringsflaggorna
som anges nedan kan anvÀndas för att göra det
lÀttare att reproducera byggbarhet eller
tillhandahÄlla ytterligare varningsflaggor under
kompileringen. Förutom det som anges nedan aktiveras
dessa som standard för arkitekturer som stöder
dem.
timeless
InstÀllningen (sedan dpkg 1.17.14; aktiverad som förval) lÀgger till -Wdate-time till CPPFLAGS . Detta ger varningar nÀr makrona __TIME__ , __DATE__ eller __TIMESTAMP__ anvÀnds.
fixfilepath
InstĂ€llningen (sedan dpkg 1.19.1; aktiverad som förval) lĂ€gger till -ffile-prefix-map= BYGGSĂKVĂG =. till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS dĂ€r BYGGSĂKVĂG sĂ€tts till toppnivĂ„katalogen för paketet som byggs. Detta fĂ„r till effekt att byggsökvĂ€gen försvinner frĂ„n alla genererade filer.
Om bÄde fixdebugpath och fixfilepath anges tar denna flagga företrÀde, eftersom den Àr en övermÀngd av den förstnÀmnda.
Observera : Om byggprocessen fÄngar byggflaggorna i de slutliga byggobjekten kommer det att göra paketet oreproducerbart. Och Àven om nÄgra av objekten Äterigen kan göras reproducerbara genom att inaktivera den hÀr flaggan igen krÀver det samtidigt att fixdebugpath inaktiveras, vilket kan göra de genererade felsökningssymbolobjekten oreproducerbara. Den bÀsta lösningen Àr att sluta fÄnga byggflaggor.
fixdebugpath
InstĂ€llningen (sedan dpkg 1.18.5; aktiverad som förval) lĂ€gger till -fdebug-prefix-map= BYGGSĂKVĂG =. till CFLAGS , CXXFLAGS , OBJCFLAGS , OBJCXXFLAGS , FFLAGS och FCFLAGS dĂ€r BYGGSĂKVĂG sĂ€tts till toppnivĂ„katalogen för paketet som byggs. Detta fĂ„r till effekt att byggsökvĂ€gen försvinner frĂ„n alla genererade felsökningssymboler.
Observera : Funktionen har liknande reproduktionsegenskaper som fixfilepath .
MILJĂVARIABLER
Det finns
tvÄ uppsÀttningar miljövariabler som
utför samma operationer, den första
(DEB_
flagga
_
op
) bör aldrig anvÀndas
inuti
debian/rules
). Den Àr tÀnkt för
anvÀndare som vill bygga om kÀllkodspaketet med
andra byggflaggor. Den andra uppsÀttningen
(DEB_
flagga
_MAINT_
op
) bör endast
anvÀndas i
debian/rules
av paketansvariga
för att Àndra de slutgiltiga byggflaggorna.
DEB_
flagga
_SET
DEB_
flagga
_MAINT_SET
(Sedan dpkg
1.16.1)
Denna variabel kan anvÀndas för att tvinga fram vÀrdet som returneras för given flagga .
DEB_
flagga
_STRIP
(sedan dpkg 1.16.1)
DEB_
flagga
_MAINT_STRIP
(sedan dpkg
1.16.1)
Denna variabel kan anvÀndas för att tillhandahÄlla en blankstegsavdelad lista med flaggor som kommer att tas bort frÄn uppsÀttningen flaggor som ges för given flagga .
DEB_
flagga
_APPEND
DEB_
flagga
_MAINT_APPEND
(sedan dpkg
1.16.1)
Denna variabel kan anvÀndas för att lÀgga till ytterligare flaggor till vÀrdet som returneras för given flagga .
DEB_
flagga
_PREPEND
(sedan dpkg 1.16.1)
DEB_
flagga
_MAINT_PREPEND
(sedan dpkg
1.16.1)
Denna variabel kan anvÀndas för att lÀgga till ytterligare flaggor först i vÀrdet som returneras för given flagga .
DEB_BUILD_OPTIONS
DEB_BUILD_MAINT_OPTIONS
(sedan dpkg 1.16.1)
De hÀr variablerna kan anvÀndas av en anvÀndare eller utvecklare för att slÄ av/pÄ olika omrÄdesfunktioner som pÄverkar byggflaggorna. Variabeln DEB_BUILD_MAINT_OPTIONS -variabeln överstyr alla instÀllningar i funktionsomrÄden i DEB_BUILD_OPTIONS . Se avsnittet "FUNKTIONSOMRà DEN" för mer information.
DEB_VENDOR
InstÀllningen anger den aktuella ÄterförsÀljaren. Om den inte Àr satt kommer ÄterförsÀljaren att identifieras genom att lÀsa /etc/dpkg/origins/default .
DEB_BUILD_PATH
Den hÀr variabeln anger byggsökvÀgen (sedan dpkg 1.18.8) att anvÀnda i funktioner sÄsom fixdebugpath sÄ att de kan styras av anroparen. Variabeln Àr för nÀrvarande specifik för Debian och dess derivat.
DEB_HOST_ARCH
Anger vÀrdarkitekturen. Detta pÄverkar de byggflagor som anges, vilket vanligtvis Àr relvant vid korskompilering, dÀr DEB_HOST_ARCH skiljer sig frÄn DEB_BUILD_ARCH .
DPKG_COLORS
VÀljer fÀrglÀge (sedan dpkg 1.18.5). För nÀrvarande godtas följande vÀrden: auto (förval), always och never .
DPKG_NLS
Om satt, anvÀnds för att bestÀmma om lokalt sprÄkstöd ska aktiveras, Àven kÀnt som internationaliseringsstöd (eller i18n) (sedan dpkg 1.19.0). TillÄtna vÀrden Àr: 0 och 1 (förval).
FILER
Konfigurationsfiler
/etc/dpkg/buildflags.conf
Konfigurationsfil för hela systemet.
$XDG_CONFIG_HOME/dpkg/buildflags.conf
eller
$HOME/.config/dpkg-buildflags.conf
AnvÀndarens konfigurationsfil.
Paketeringsstöd
/usr/share/dpkg/buildflags.mk
Makefile-klipp som lÀser in (och eventuellt exporterar) alla flaggor som stöd av dpkg-buildflags till variabler (sedan dpkg 1.16.1).
/usr/share/dpkg/buildtools.mk
Makefile-klipp som lÀser in lÀmplig vÀrd och byggverktyg (och eventuellt exporterar dem) till variabler (sedan dpkg 1.19.0).
EXEMPEL
För att sÀnda byggflaggor till en byggkommandorad i en makefil:
$(MAKE) $(shell
dpkg-buildflags --export=cmdline)
./configure $(shell dpkg-buildflags --export=cmdline)
För att sÀtta byggflaggor i ett skalskript eller skalfragment kan eval anvÀndas för att tolka utdata och exportera flaggorna i miljön:
eval "$(dpkg-buildflags --export=sh)" && make
eller för att sÀtta positionsparametrarna för att sÀnda till ett kommando:
eval "set
-- $(dpkg-buildflags --export=cmdline)"
for dir in a b c; do (cd $dir && ./configure
"$@" && make); done
AnvÀnda i debian/rules
Du bör anropa dpkg-buildflags eller inkludera buildflags.mk frÄn filen debian/rules för att hÀmta de byggflaggor det Àr nödvÀndigt att sÀnda till byggsystemet. Observera att Àldre versioner av dpkg-buildpackages (före dpkg 1.16.1) exporterade dessa flaggor automatiskt. Du bör dock inte bero pÄ detta, eftersom detta förhindrar körning av debian/rules manuellt.
För paket med autoconf-liknande byggsystem kan du sÀnda relevanta flaggor direkt till configure eller make (1), som visas ovan.
I andra byggsystem, eller om du vill ha mer finkorning styrning av vilka flaggor som sÀnds vart, kan du anvÀnda --get . Eller sÄ kan du istÀllet inkludera buildflags.mk , som tar hand om anropet till dpkg-buildflags och lagringen av byggflaggorna i make-variabler.
Om du vill exportera alla byggflaggor till miljön (dÀr de kan fÄngas upp av ditt byggsystem):
DPKG_EXPORT_BUILDFLAGS
= 1
include /usr/share/dpkg/buildflags.mk
För extra styrning av vad som expoteras kan du manuellt exportera variablerna (eftersom inga av dem exporteras som standard):
include
/usr/share/dpkg/buildflags.mk
export CPPFLAGS CFLAGS LDFLAGS
Du kan naturligtvis dessutom manuellt sÀnda flaggorna till kommandon:
include
/usr/share/dpkg/buildflags.mk
build-arch:
$(CC) -o hello hello.c $(CPPFLAGS) $(CFLAGS) $(LDFLAGS)
ĂVERSĂTTNING
Peter Krefting och Daniel Nylander.