Scroll to navigation

dpkg-buildpackage(1) dpkg suite dpkg-buildpackage(1)

NAMN

dpkg-buildpackage - bygg binär- eller källkodspaket från källkod

SYNOPS

dpkg-buildpackage [option...] [--] [filename.dsc|directory]

BESKRIVNING

dpkg-buildpackage is a program that automates the process of building a Debian package.

The filename.dsc and directory arguments are supported since dpkg 1.22.7. Their semantics are experimental.

It consists of the following steps:

1.
It runs the preinit hook before reading any source file. If a .dsc file has been specified it unpacks it anew and changes directory to it, if a directory has been specified it changes directory to it, otherwise it expects the current directory to contain the source tree. It prepares the build environment by setting various environment variables (see ENVIRONMENT), runs the init hook, and calls dpkg-source --before-build (unless -T or --target has been used).
2.
Byggberoenden och -konflikter kontrolleras att de uppfylls (såvida inte -d eller --no-check-builddeps anges).
3.
Om ett eller flera specifika mål har valts med flaggan -T eller --target anropas de målen, varpå programmet avslutas. I annat fall körs kroken preclean och anropas fakeroot debian/rules clean för att städa byggträdet (såvida inte -nc eller --no-pre-clean anges).
4.
It runs the source hook and calls dpkg-source -b to generate the source package (if a source build has been requested with --build or equivalent options, and if no .dsc has been specified).
5.
Kör kroken build och anropar debian/rules byggmål, därefter körs kroken binary följt av fakeroot debian/rules binärmål (såvida inte ett bygge av enbart källkod har valts med --build=source eller liknande flaggor). Observera att byggmål och binärmål är ett av build och binary (förval, eller om ett any- eller all-bygge har valts med --build eller motsvarande flaggor), eller build-arch och binary-arch (om ett any- men inte ett all-bygge har valts med --build eller liknande flaggor), eller build-indep och binary-indep (om ett all- men inte ett any-bygge har valts med --build eller liknande flaggor).
6.
It runs the buildinfo hook and calls dpkg-genbuildinfo to generate a .buildinfo file. Several dpkg-buildpackage options are forwarded to dpkg-genbuildinfo. If a .dsc has been specified, then it will be referenced in the generated .buildinfo file, as we can ascertain the provenance of the source tree.
7.
Kör kroken changes och anropar dpkg-genchanges för att skapa en .changes-fil. Namnet på .changes-filen kommer att bero på byggtypen och kommer vara så specifik som möjligt, men inte mer; namnet kommer att vara:
för ett bygge som innehåller any (någon)
annars för ett bygge som innehåller all (alla)
annars för ett bygge som innehåller source (källkod)

Många av flaggorna till dpkg-buildpackage vidaresänds till dpkg-genchanges.

8.
Kör kroken postclean och, om -tc eller --post-clean anges, anropar fakeroot debian/rules clean ytterligare en gång.
9.
Anropar dpkg-source --after-build.
10.
Kör kroken check och anropar en paketkontrollerare för .changes-filen (om ett kommando har angivits med DEB_CHECK_COMMAND eller med --check-command).
11.
Kör kroken sign och signerar med OpenPGP-programmet (såvida det inte är ett UNRELEASED-bygge, eller om --no-sign angavs) för att signera .dsc-filen (om sådan finns, såvida inte -us eller --unsigned-source anges), .buildinfo-filen (såvida inte -ui, --unsigned-buildinfo, -uc eller --unsigned-changes anges) och .changes-filen (såvida inte -uc eller --unsigned-changes anges).
12.
If a .dsc file has been specified, it removes the extracted source directory.
13.
Kör kroken done.

FLAGGOR

Alla långa flaggor kan ges både på kommandoraden och i dpkg-buildpackage:s system- och användarkonfigurationsfiler. En rad i konfigurationsfilen är antingen en flagga (precis samma som på kommandoraden, men utan inledande bindestreck) eller en kommentar (om den börjar med ett ”#”).

Anger bygg-type från en kommaavdelad lista med komponenter (sedan dpkg 1.18.5). Alla angivna komponenter kombineras för att välja den byggtypen som ska användas i den enda körningen, vilket leder till en enda byggkörning som skapar en .changes-fil. Sänds vidare till dpkg-genchanges.

Tillåtna värden är:

Bygger källkodspaketet.

Observera: När det här värdets används på egen hand och om du bara vill bygga (om) källkodspaketet från ett rent källkodsträd, är det alltid ett bättre alternativ att köra dpkg-source direkt eftersom det inte kräver att några byggberoenden som annars krävs för att anropa målet clean installeras.

Bygger arkitekturspecifika binärpaket.
Bygger de arkitekturoberoende binärpaketen.
Bygger arkitekturspecifika och -oberoende binärpaket. Detta är ett alias till any,all.
Bygger allting. Detta är ett alias för source,any,all, och är detsamma som standardläget om inga byggflaggor anges.
Motsvarar --build=source,all (sedan dpkg 1.17.11).
Motsvarar --build=source,any (sedan dpkg 1.17.11).
Motsvarar --build=binary eller --build=any,all.
Motsvarar --build=any.
Motsvarar --build=all.
Motsvarar --build=source.
Motsvarar --build=full, --build=source,binary eller --build=source,any,all (sedan dpkg 1.15.8).
Anropar debian/rules mål en gång per angivet mål, efter att ha konfigurerat byggmiljön (förutom att anropa dpkg-source --before-build), och avbryter byggprocessen efteråt (sedan dpkg 1.15.0, lång flagga sedan dpkg 1.18.8, stöd för flera mål sedan dpkg 1.18.16). Om --as-root också anges körs kommandot som root (se --root-command). Observera att kända mål som måste köras som root inte behöver flaggan (dvs. målen clean, binary, binary-arch och binary-indep).
Ger endast mening tillsammans med --target (sedan dpkg 1.15.0). Kräver att målet körs med root-behörighet.
Sänds vidare utan ändringar till dpkg-genchanges. Se dess manualsida.
Sänds som -m till dpkg-genchanges. Se dess manualsida.
Sänds som -e till dpkg-genchanges. Se dess manualsida.
Ange Debianarkitekturen vi bygger för (lång flagga sedan dpkg 1.17.17). Arkitekturen för maskinen vi bygger på bestäms automatiskt, och är även standard för värdmaskinen.
Ange GNU-systemtyp vi bygger för (lång flagga sedan dpkg 1.17.17). Den kan användas i stället för --host-arch eller som ett komplement för att överstyra standard-GNU-systemtypen för Debian-målarkitekturen.
Ange Debianarkitekturen binärerna som byggs bygger för (sedan dpkg 1.17.17). Standardvärde är värdmaskinen.
Ange GNU-systemtyp vi binärerna vi som byggs bygger för (sedan dpkg 1.17.17). Den kan användas i stället för --target-arch eller som ett komplement för att överstyra standard-GNU-systemtypen för Debian-målarkitekturen.
Ange profil(er) vi bygger, som en kommaavdelad lista (sedan dpkg 1.17.2, lång flagga sedan dpkg 1.18.8). Standardbeteendet är att inte bygga för någon specifik profil. Lägger även till dem (som en blankstegsavdelad lista) till miljövariabeln DEB_BUILD_PROFILES vilket, till exempel, gör det möjligt för debian/rules-filer att använda informationen för villkorliga byggen.
Antalet jobb som tillåts att köras samtidigt (sedan dpkg 1.14.7, lång flagga sedan dpkg 1.18.8). Antal jobb motsvarande antalet tillgängliga processorer om auto anges (sedan dpkg 1.17.10), eller ett obegränsat antal om jobb inte anges. Förvalt beteende är auto (sedan dpkg 1.18.11) i icke-tvingat läge (sedan dpkg 1.21.10), och som sådant är det alltid säkrare att använda med alla paket, däribland de som inte kan byggas parallellt på ett säkert sätt. Om antal jobb sätts till 1 kommer seriell exekvering att återställas.

Lägger till parallel=jobb eller parallel till miljövariabeln DEB_BUILD_OPTIONS, vilket gör det möjligt för debian/rules-filer att använda informationen för egna ändamål om de önskar. Värdet för jobb kommer att överstyra värdet parallel=jobb eller parallel i miljövariabeln DEB_BUILD_OPTIONS. Observera att auto-värdet kommer ersättas av det faktiska antalet för närvarande aktiva processorer, och därför inte kommer sändas med till barnprocesser. Om antalet tillgängliga processorer inte kan tas fram kommer koden att falla tillbaka till seriell exekvering (sedan dpkg 1.18.15), även om detta bara borde ske på exotiska och icke stödda system.

Den här flaggan (sedan dpkg 1.18.2, lång flagga sedan dpkg 1.18.8) motsvarar -j ovan.

Eftersom beteendet för -j ändrades i dpkg 1.21.10 till att vara valfritt kan du använda den här flaggan istället om du måste garantera semantiken över flera dpkg-utgivningsserier.

Den här flaggan (sedan dpkg 1.12.10) motsvarar flaggan --jobs med undantaget att det aktiverar tvingat parallellt läge, genom att lägga till make -j-flaggan med antalet beräknade parallella jobb i miljövariabeln MAKEFLAGS.

Detta borde göra så att alla senare make-anrop ärver flaggan och därmed påtvinga parallelliseringsinställningen i paketeringen (och möjligen uppströmsbyggsystemet om det det använder make(1)), oberoende av om det stöder parallella bygg, något som kan komma att orsaka byggfel.

Observera: Makefiler som inte kan köras parallellt bör anses felaktiga. De bör antingen göras säkra för parallellisering, eller markeras som osäkra med make(1)-målet .NOTPARALLEL.

Kontrollera byggberoenden och -konflikter; avbryt om de inte uppfylls (lång flagga sedan dpkg 1.18.8). Detta är standardbeteendet.
Kontrollera inte byggberoenden eller -konflikter (lång flagga sedan dpkg 1.18.8).
Kontrollera inte inbyggda byggberoenden och -konflikter (sedan dpkg 1.18.2). Detta är de distributionsberoende byggberoendena som vanligtvis krävs i en byggmiljö, paketuppsättningen som kallas Build-Essential (”Bygg-Nödvändiga”).
Följ inte fältet Rules-Requires-Root, fall tillbaka på dess gamla förval (sedan dpkg 1.19.1).
Städa inte upp byggträdet före bygget (lång flagga sedan dpkg 1.18.8). Implicerar -b om inget annat har valts bland -F, -g, -G, -B, -A eller -S. Implicerar -d med -S (sedan dpkg 1.18.0).
Städa källkodsträdet före bygget (sedan dpkg 1.18.8). Detta är standardbeteendet.
Städa källkodsträdet (använder få-root-kommando debian/rules clean) efter att paketet har byggts (lång flagga sedan dpkg 1.18.8).
Städa inte upp byggträdet efter bygget (sedan dpkg 1.19.1). Detta är standardbeteendet.
Sanera byggmiljön (sedan dpkg 1.20.0). Detta återställer eller tar bort miljövariabler, umask, och eventuella andra processattribut som annars kan påverka paketbygget ogynnsamt. Eftersom den officiella startpunkten för att bygga paket är debian/rules kan inte paket vara beroende av att de här inställningarna är på plats, och bör därför fungera även när de inte är det. Vad som saneras är återförsäljarspecifikt.
När dpkg-buildpackages behöver exekvera delar av byggprocessen som root sätter den kommandot som ska exekveras efter få-root-kommando om ett sådant har angivits (lång flagga sedan dpkg 1.18.8). Om inte kommer fakeroot att användas som standard, om kommandot existerar. få-root-kommando måste börja med namnet på det faktiska kommandot som ska anropas samt de parametrar det ska anropas med. få-root-kommando kan innehålla parametrar (de måste vara avdelade med blanksteg) men inga skalmetatecken. få-root-kommando kan typiskt vara fakeroot, sudo, super eller really. su är inte lämpligt eftersom det kräver flaggan -c för att köra ett kommando och även då kan det bara starta användarens skal med -c istället för att sända flaggor individuellt till kommandot som ska startas.
För att bygga ett Debianpaket körs normalt kommandot debian/rules med flera olika standardparametrar (sedan dpkg 1.14.17, lång flagga sedan dpkg 1.18.8). Den här flaggan gör det möjligt att använda ett annat programanrop för att bygga paketet (det kan innehålla blankstegsavdelade parametrar). Den kan även användas för att exekvera standardregelfilen med ett annat make-program (till exempel genom att använda /usr/local/bin/make -f debian/rules som regelfil).
Kommando som kontrollerar själva .changes-filen och byggda artefakter som refereras i filen (sedan dpkg 1.17.6). Kommandot ska ta sökvägen till .changes som argument. Kommandot är normalt lintian.
Sänder flaggan val till det kontrollkommando som anges med DEB_CHECK_COMMAND eller --check-command (sedan dpkg 1.17.6). Kan användas flera gånger.
Sätter den angivna skalkoden i krokkommando som kroken kroknamn, vilket körs vid de tidpunkter som anges i byggstegen (sedan dpkg 1.17.6). Kroken kommer alltid att exekveras även om de efterföljande funktionerna inte utförs (förutom kroken binary). Alla krokar körs i den uppackade källkodskatalogen.

Några krokar kan få ytterligare information genom miljövariabler (sedan dpkg 1.22.0). Alla krokar får krokens namn i miljövariabeln DPKG_BUILDPACKAGE_HOOK_NAME (since dpkg 1.22.0).

Observera: Hakar kan påverka byggprocessen och orsaka att byggen misslyckas om deras kommandon misslyckas, så se upp för oförutsedda konsekvenser.

För närvarande stöds följande kroknamn:

Hämtar DPKG_BUILDPACKAGE_HOOK_SOURCE_OPTIONS med den blankstegsavdelade listan över flaggor som kommer sändas med i anropet till dpkg-source.
Gets DPKG_BUILDPACKAGE_HOOK_BUILD_TARGET with the name of the debian/rules build target called. Before dpkg 1.22.7 the variable was only set if the target was called.
Hämtar DPKG_BUILDPACKAGE_HOOK_BINARY_TARGET med namnet på det binärmål i debian/rules som anropades, men bara om anropat.
Hämtar DPKG_BUILDPACKAGE_HOOK_BUILDINFO_OPTIONS med den blankstegsavdelade listan över flaggor som kommer sändas med i anropet till dpkg-genbuildinfo.
Hämtar DPKG_BUILDPACKAGE_HOOK_CHANGES_OPTIONS med den blankstegsavdelade listan över flaggor som kommer sändas med i anropet till dpkg-genchanges.
Hämtar DPKG_BUILDPACKAGE_HOOK_CHECK_OPTIONS med den blankstegsavdelade listan över flaggor som kommer sändas med i kontroll-kommandanropet.

krokkommando stöder följande substitueringsformatsträng, som appliceras på den föra exekvering:

%%
Ett ensamt %-tecken.
%a
Ett booleskt värde (0 eller 1) som anger om följande funktion utförs.
%p
Namnet på källkodspaketet.
%v
Version för källkodspaketet.
%s
Version för källkodspaketet (utan epoken).
%u
Uppströmsversionen.
Ange filnamn att använda för den skapade .buildinfo-filen (sedan dpkg 1.21.0).
Sänder flaggan val till dpkg-genbuildinfo (sedan dpkg 1.18.11). Kan användas flera gånger.
Ange ett OpenPGP-funktionsgränssnitt att använda när sign-command körs (sedan dpkg 1.21.10).

Förvalet är auto, där det bästa för närvarande tillgängliga funktionen kommer användas. De specifika OpenPGP-funktioner som stöds är, med det bästa först:

(valfri korrekt implementation av ”Stateless OpenPGP”)
(från Sequoia-PGP)
(från GnuPG)
När dpkg-buildpackage måste exekvera en OpenGPG-funktion för att signera ett källkodsstyrfil (.dsc), en .buildinfo-fil eller en .changes-fil kör det signeringskommando (det letar i PATH om så behövs) istället för förvalet eller autodetekterat funktionskommando (lång flagga sedan dpkg 1.18.8). signeringskommando får alla de argument specifika för programmet som anges av --sign-backend. signeringskommando bör inte innehålla blanksteg eller andra skalmetatecken.
Ange en Open PGP-nyckel-id (antingen ett fingeravtryck eller ett användar-ID) för den hemliga nyckeln att använda vid signering av paket (--sign-key sedan dpkg 1.18.8, --sign-keyid sedan dpkg 1.21.10).
Ange en OpenPGP-nyckelfil som innehåller den hemliga nyckeln att använda vid signering av paket (sedan dpkg 1.21-10).

Observera: Av säkerhetsskäl är det bäst att hålla nyckelfil låst med ett lösenord.

Signera inte källkodspaketet (lång flagga sedan dpkg 1.18.8).
Signera inte .buildinfo-filen (sedan dpkg 1.18.19).
Signera inte .buildinfo- och .changes-filerna (lång flagga sedan dpkg 1.18.8).
Signera inga filer, detta omfattar källkodspaketet, .buildinfo-filen och .changes-filen (sedan dpkg 1.18.20).
Tvinga signering av de slutliga filerna (sedan dpkg 1.17.0), oberoende av -us, --unsigned-source, -ui, --unsigned-buildinfo, -uc, --unsigned-changes eller annan intern heuristik.
Sänds vidare utan ändringar till dpkg-source. Se dess manualsida.
Sänd flaggan val till dpkg-source (sedan dpkg 1.15.6). Kan användas flera gånger.
Använd filnamn för den genererade .changes-filen (sedan dpkg 1.21.0).
Sänder flaggan val till dpkg-genchanges (sedan dpkg 1.15.6). Kan användas flera gånger.
Ändra platsen för dpkg-databasen (sedan dpkg 1.14.0). Förvald plats är /var/lib/dpkg.
-?, --help
Visar hjälpskärm och avslutar.
Visar version och avslutar.

MILJÖVARIABLER

Extern miljö

Om satt, används som kommandot för att kontrollera .changes-filen (sedan dpkg 1.17.6). Överstyrs av flaggan --check-command.
Används för att signera filerna .changes, .buildinfo och .dsc-filerna om satt (sedan dpkg 1.17.2). Överstyrs av flaggan --sign-key.
Används för att signera filerna .changes, .buildinfo och .dsc-filerna om satt (sedan dpkg 1.21.10). Överstyrs av flaggan --sign-keyfile.
Om satt, innehåller en blankstegsavdelad lista med flaggor som påverkar beteendet för några dpkg-verktyg som används i paketbyggandet, och kan påverka paketbyggprocessen om koden i debian/rules stöder dem. Dessa flaggor kan ha parametrar angivna omedelbart efter ett likhetstecken (”=”). För flaggor som stöder flera parametrar avdelas de inte med blanksteg, eftersom dessa reserverats för att avdela flaggor.

Följande flaggor känns och stöds av dpkg-verktygen, andra flaggor som stöds av debian/rules kan anges av distributionsspecifika policydokument.

Paketets debian/rules kan använda den här flaggan för att ställa in byggprocessen att utföra N parallella jobb. Överstyrs av flaggorna --jobs och --jobs-force.
dpkg-buildpackage ignorerar variabeln DEB_CHECK_COMMAND. Paketets debian/rules förvändas inte att köra testsviter under bygget.
Om debian/rules anropar dpkg-buildflags för att ställa in byggflaggorna kommer de ställas in till att inte aktivera några optimaliseringar.
Paketets debian/rules bör se till att objekt inte får felsökningsinformation borttagen. Om debian/rules innehåller fragmentet mk/buildtools.mk kommer make-variabeln STRIP respektera denna flagga.
dpkg-buildpackage lägger till make(1)-flaggan --no-print-directory till miljövariabeln MAKEFLAGS. Paketets debian/rules bör minska pratsamheten, utan att bli helt tyst.
Detta är funktionsområden som styr funktioner i byggflaggor. Se dpkg-buildflags(1) för ytterligare detaljer.
Om satt, används som aktiv(a) byggprofil(er) för paketet som byggs (sedan dpkg 1.17.2). Det är en blankstegsavdelad lista med profilnamn. Överstyrs av flaggan -P.
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.
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).

Intern miljö

Även om dpkg-buildpackage exporterar några variabler bör inte debian/rules vara beroende av deras närvaro och bör istället använda respektive gränssnitt för att hämta de värden som behövs, eftersom filen är huvudstartpunkt för att bygga paket och det även bör stödas att köra den fristående.

dpkg-architecture anropas med flaggorna -a och -t vidaresända. Variabler som skrivs ut via dess -s-flagga integreras i byggmiljön.
Den här variabeln sätts till värdet som hämtas från fältet Rules-Requires-Root, dpkg-build-api-nivån eller från kommandoraden. När satt kommer det vara ett giltigt värde för fältet Rules-Requires-Root. Det används för att meddela debian/rules huruvida rootless-builds.txt-specifikation stöds.
Den här variabeln sätts till få-root-kommando när fältet Rules-Requires-Root är satt till ett värde annat än no och binary-targets.
Den är variabeln sätts till Unix-tidsstämpeln sedan epoken för den senaste posten i debian/changelog, om den inte redan definierats.

FILER

/etc/dpkg/buildpackage.conf
Konfigurationsfil för hela systemet
$XDG_CONFIG_HOME/dpkg/buildflags.conf eller
$HOME/.config/dpkg/buildflags.conf
Användarens konfigurationsfil.

ANTECKNINGAR

Kompileringsflaggor exporteras inte längre.

Mellan dpkg 1.14.17 och 1.16.1 exporterade dpkg-buildpackage kompilatorflaggor (CFLAGS, CXXFLAGS, CPPFLAGS och LDFLAGS) med värden enligt dpkg-buildflags. Detta gäller inte längre.

Förvalda byggmål

dpkg-buildpackage is using the build-arch and build-indep targets since dpkg 1.16.2. Before dpkg 1.22.7, there was code to try to detect the missing targets and fallback on the build target. Those targets are thus mandatory.

SÄKERHET

Bygga binär- eller källkodspaket ska bara göras med betrodd källdata.

PROGRAMFEL

Det borde vara möjligt att ange blanksteg och skalmetatecken och inledande argument för få-root-kommando och signeringskommando.

SE ÄVEN

/usr/share/doc/packages/dpkg/spec/rootless-builds.txt, dpkg-source(1), dpkg-architecture(1), dpkg-buildflags(1), dpkg-genbuildinfo(1), dpkg-genchanges(1), fakeroot(1), lintian(1), <https://datatracker.ietf.org/doc/draft-dkg-openpgp-stateless-cli/>, sq(1), gpg(1).

ÖVERSÄTTNING

Peter Krefting och Daniel Nylander.

2024-08-01 1.22.11