dpkg-architecture(1)

NAMN
dpkg-architecture - ställ in och bestäm arkitektur för paket som byggs

SYNOPS
dpkg-architecture [flagga...] [åtgärd]

BESKRIVNING
dpkg-architecture innehåller en funktion för att bestämma och ställa in bygg- och värdarkitekturerna för att bygga paket.

Byggarkitekturen bestäms alltid av antingen variabeln DEB_BUILD_ARCH om den är satt (och --force inte anges) eller genom ett externt anrop till dpkg(1) och kan inte väljas från kommandoraden.

Du kan ange värdarkitektur genom att ange en av, eller båda, flaggorna --host-arch och --host-type, annars används variabeln DEB_HOST_ARCH om den är satt (och --force inte anges). Förvalet bestäms av ett externt anrop till gcc(1), eller är detsamma som byggarkitekturen varken CC eller gcc är tillgängliga. Det räcker att ange en av --host-arch och -host-type, värdet på den andra kommer ställas in till ett fungerande förval. Det är faktiskt oftast bättre att bara ange den ena eftersom dpkg-architecture kommer varna dig om ditt val inte överensstämmer med förvalet.

KOMMANDON

-l, --list
    Skriv miljövariabler, en per rad, på formatet VARIABEL=värde. Detta är förvald åtgärd.

-e, --equal arkitektur
    Kontrollera arkitektur för likhet (sedan dpkg 1.13.13). Det jämför den aktuella eller angivna Debian-värdarkitekturen mot arkitektur, för att se om de är lika. Åtgärden expanderar inte jokertecken i arkitekturer. Kommandot avslutar med status 0 om det är en träff, 1 om det inte är en träff.

-i, --is arkitektur-jokertecken
    Kontrollera arkitekturens identitet (sedan dpkg 1.13.13). Det jämför den aktuella eller angivna Debian-värdarkitekturen mot arkitektur-jokertecken efter att ha expanderat det som ett arkitektur-jokertecken, för att se om de är lika. Kommandot avslutar med status 0 om det är en träff, 1 om det inte är en träff.

-q, --query variabelnamn
    Skriv värdet på en enkel variabel.

-s, --print-set
    Visar ett exportkommando. Detta kan användas för att sätta miljövariabler med POSIX-skalet eller make eval, beroende på utdataformatet.

-u, --print-unset
    Visar ett kommando liknande --print-set men för att ta bort värdet för alla variabler.

-c, --command kommandosträng
    Exekvera en kommandosträng i en miljö som har alla variabler satta till det bestämda värdet.

    Om kommandosträng innehåller skalmetatecken kommer det att anropas genom systemets bourne-skal.

-L, --list-known
    Visar en lista över giltiga arkitekturnamn. Möjligen begränsad av en eller flera av träffvalen --match-wildcard, --match-bits eller --match-endian (sedan dpkg 1.17.14).

-?, --help
    Visar hjälpskärm och avslutar.

--version
    Visar version och avslutar.

FLAGGOR

-a, --host-arch arkitektur
    Ange värd-Debianarkitekturen.

-t, --host-type gnu-system-typ
    Ange värd-GNU-systemtypen.

-A, --target-arch arkitektur
    Ange mål-Debian-arkitekturen (sedan dpkg 1.17.14).

-T, --target-type gnu-system-typ
    Ange mål-GNU-systemtypen (sedan dpkg 1.17.14).

-W, --match-wildcard arkitektur-jokertecken
    Begränsa arkitekturerna som visas med --list-known till en som motsvarar det angivna arkitektur-jokertecknet (sedan dpkg 1.17.14).

-B, --match-bits arkitektur-bitar
    Begränsa arkitekturerna som visas med --list-known till en med angivet antal CPU-bitar (sedan dpkg 1.17.14). Antingen 32 eller 64.

-E, --match-endian architecture-endian
    Begränsa arkitekturerna som visas med --list-known till en som har angiven endian (sedan dpkg 1.17.14). Antingen little (liten endian) eller big (stor endian).

--print-format format
    Väljer utdataformatet för --print-set och --print-unset (sedan dpkg 1.20.6), till antingen shell (förval) eller make.

-f, --force
    Värden som sätts av befintliga miljövariabler med samma namn som de som används av skriptet används (t.ex av dpkg-architecture), såvida inte denna tvingande flagga anges. Det gör det möjligt för användaren att överstyra ett värde även om anropet till dpkg-architecture är begravt djupt inuti ett annat skript (till exempel dpkg-buildpackage(1)).

TERMINOLOGI

byggmaskin
    Maskinen paketet byggs på.

värdmaskin
    Maskinen paketet byggs för.

målmaskin
    Maskinen kompilatorn bygger för, eller emulatorn kör kod för. Endast nödvändigt för att bygga en korsverktygskedja (eller emulator), en som byggs på byggarkitekturen och körs på målarkitekturen, och som själv kommer att bygga (eller köra under emulering) kod för målarkitekturen.

Debianarkitektur
    En Debianarkitektur beskriver en ”maskin” (tänk på det som en abstraktion som inte nödvändigtvis motsvarar en fysisk enhet) som representerar en specifik exekveringsmiljö, däribland dess CPU (processor) och attribut (såsom byteordning och antal bitar), ett operativsystem (vanligtvis en kärna, men andra paradigmer som använder tjänster på användarnivå är möjliga) och dess gränssnitt mot användarprogram, såsom format på exekverbara filer och deras ABI, samt ett libc-bibliotek och dess ABI.

    Den speciella arkitekturen all anger en arkitekturoberoende exekveringsmiljö, som används av saker såsom skal- och Perl-skript eller dokumentation.

    En Debianarkitektur används i binärpaketmetadata och -filnamn (och anger binärträdet i paketarkivet), och kan förekomma i paketberoenden.

    Ett arkitektur måste inledas med ett alfanumeriskt tecken (”0-9a-zA-Z”), som sedan följs av alfanumeriska tecken och bindestreck (”-”).

    Exempel: amd64, i386, sparc64, hurd-amd64, musl-linux-riscv64.

Debianarkitektur-tupel
    En Debianarkitektur-tupel är den fullt kvalificerade arkitekturen med alla dess komponenter detaljerat redogjort för. Den skiljer sig från Debianarkitekturen i det att åtminstone cpu-komponenten inte innehåller abi. Den nuvarande tupeln har formen abi-libc-os-cpu.

    Exempel: base-gnu-linux-amd64, eabihf-musl-linux-arm.

Debianarkitektursökmönster
    Ett Debianarkitektursökmönster är en speciell arkitektursträng som fungerar som ett mönster som träffar alla ”maskin”-arkitekturer som är en del av den (bortsett från all).

    Den genella formen är en Debianarkitektur-tupel med fyra eller färre element, och där åtminstone ett av dem är any. Saknade element i tupeln läggs till i början implicit som any, och följande par är därmed ekvivalenta:

    any-any-any-any = any
    any-any-os-any = os-any
    any-libc-any-any = libc-any-any

    Exempel: linux-any, any-i386, hurd-any, eabi-any-any-arm, musl-any-any.

GNU-systemtyp
    En GNU-arkitekturspecificeringssträng som består av två delar, avdelade med bindestreck: processor och system.

    Processordelen innehåller aldrig ett bindestreck, medan systemdelen kan i sig innehålla ett bindestreck för att skilja mellan en kärna och dess generella ABI, där det generella ABI:et kan innehålla både ABI-angivelser både för körtid (såsom libc) och program, sammanslagna utan bindestreck.

    Exempel: i586-linux-gnu, sparc64-linux-gnu, i686-gnu, x86_64-netbsd.

multiark-triplett
    Den förtydligade GNU-systemtypen, använd i filsystemssökväg. Tripletten förändras inte när baslinje-ISA:en uppdateras, vilket innebär att de resulterande sökvägarna är stabila över tid. De enda skillnaderna mot GNU-systemtypen är för närvarande att CPU-delen för i386-baserade system alltid är i386.

    Exempel: i386-linux-gnu, x86_64-linux-gnu. Exempel på sökvägar: /lib/powerpc64le-linux-gnu/, /usr/lib/i386-gnu/.

VARIABLER
Följande variabler läses från miljön (med mindre --force har angivits) och sätts av dpkg-architecture (se stycket TERMINOLOGI för en beskrivning av hur namngivningen är uppbyggd):

DEB_BUILD_ARCH
    Debianarkitekturen för byggmaskinen.

    Observera: Om du inte bygger verktyg som behöver köras under bygget är det här antagligen inte variablerna du ser efter. Se stycket "TERMINOLOGI" för betydelsen av dessa termer.

DEB_BUILD_ARCH_ABI
    Debian-ABI-namnet för byggmaskinen (sedan dpkg 1.18.11).

DEB_BUILD_ARCH_LIBC
    Debian-libc-namnet för byggmaskinen (sedan dpkg 1.18.11).

DEB_BUILD_ARCH_OS
    Debiansystemnamnet på byggmaskinen (sedan dpkg 1.13.2).

DEB_BUILD_ARCH_CPU
    Debian-processornamnet för byggmaskinen (sedan dpkg 1.13.2).

DEB_BUILD_ARCH_BITS
    Pekarstorleken för byggmaskinen (i bitar; sedan dpkg 1.15.4).

DEB_BUILD_ARCH_ENDIAN
    Endian för byggmaskinen (little / big; sedan dpkg 1.15.4).

DEB_BUILD_GNU_CPU
    GNU CPU-delen av DEB_BUILD_GNU_TYPE.

DEB_BUILD_GNU_SYSTEM
    GNU-systemdelen av DEB_BUILD_GNU_TYPE.

DEB_BUILD_GNU_TYPE
    GNU-systemtypen för byggmaskinen.

DEB_BUILD_MULTIARCH
    Den förtydligade GNU-systemtypen för byggmaskinen, används för sökvägar i filsystemet.

DEB_HOST_ARCH
    Debianarkitekturen för värdmaskinen.

DEB_HOST_ARCH_ABI
    Debian-ABI-namnet för värdmaskinen (sedan dpkg 1.18.11).

DEB_HOST_ARCH_LIBC
    Debian-libc-amnet för värdmaskinen (sedan dpkg 1.18.11).

DEB_HOST_ARCH_OS
    Debiansystemnamnet för värdmaskinen (sedan dpkg 1.13.2).

DEB_HOST_ARCH_CPU
    Debian-processornamnet för värdmaskinen (sedan dpkg 1.13.2).

DEB_HOST_ARCH_BITS
    Pekarstorleken för värdmaskinen (i bitar; sedan dpkg 1.15.4).

DEB_HOST_ARCH_ENDIAN
    Endian för värdmaskinen (little / big; sedan dpkg 1.15.4).

DEB_HOST_GNU_CPU
    GNU-processordelen av DEB_HOST_GNU_TYPE.

DEB_HOST_GNU_SYSTEM
    GNU-systemdelen av DEB_HOST_GNU_TYPE.

DEB_HOST_GNU_TYPE
    GNU-systemtypen för värdmaskinen.

DEB_HOST_MULTIARCH
    Den förtydligade GNU-systemtypen för värdmaskinen, används för sökvägar i filsystemet (sedan dpkg 1.16.0).

DEB_TARGET_ARCH
    Debianarkitekturen för målmaskinen (sedan dpkg 1.17.14).

    Observera: Om du inte bygger korsverktygskedjor (eller emulatorer) är det här antagligen inte variablerna du ser efter. Se stycket "TERMINOLOGI" för betydelsen av dessa termer.

DEB_TARGET_ARCH_ABI
    Debian-ABI-namnet för målmaskinen (sedan dpkg 1.18.11).

DEB_TARGET_ARCH_LIBC
    Debian-libc-namnet för målmaskinen (sedan dpkg 1.18.11).

DEB_TARGET_ARCH_OS
    Debiansystemnamnet för målmaskinen (sedan dpkg 1.17.14).

DEB_TARGET_ARCH_CPU
    Debian-processornamnet för målmaskinen (sedan dpkg 1.17.14).

DEB_TARGET_ARCH_BITS
    Pekarstorleken för målmaskinen (i bitar; sedan dpkg 1.17.14).

DEB_TARGET_ARCH_ENDIAN
    Endian för målmaskinen (little / big; sedan dpkg 1.17.14).

DEB_TARGET_GNU_CPU
    GNU CPU-delen av DEB_TARGET_GNU_TYPE (sedan dpkg 1.17.14).

DEB_TARGET_GNU_SYSTEM
    GNU-systemdelen av DEB_TARGET_GNU_TYPE (sedan dpkg 1.17.14).

DEB_TARGET_GNU_TYPE
    GNU-systemnamnet för målmaskinen (sedan dpkg 1.17.14).

DEB_TARGET_MULTIARCH
    Den förtydligade GNU-systemtypen för målmaskinen, används för sökvägar i filsystemet (sedan dpkg 1.17.14).

FILER

  Arkitekturtabeller
Alla dessa filer måste finnas för att dpkg-architecture ska fungera. Deras placering kan överstyras vid körning med miljövariabeln DPKG_DATADIR. Tabellerna innehåller ett pseudo-fält med format-Version på första raden för att ange format, så att tolkar kan kontrollera om de förstår det, såsom "# Version=1.0".

/usr/share/dpkg/cputable
    Tabell över kända processornamn och deras motsvarande GNU-namn. Formatversion 1.0 (sedan dpkg 1.13.2).

/usr/share/dpkg/ostable
    Tabell över kända operativsystemsnamn och deras motsvarande GNU-namn. Formatversion 2.0 (sedan dpkg 1.18.11).

/usr/share/dpkg/tupletable
    Mappning mellan Debianarkitektur-tuplar och Debianarkitekturnamn. Formatversion 1.0 (sedan dpkg 1.18.11).

/usr/share/dpkg/abitable
    Tabell över Debianarkitektur-ABI-attributöverstyrningar. Formatversion 2.0 (sedan dpkg 1.18.11).

  Paketeringsstöd

/usr/share/dpkg/architecture.mk
    Makefile-klipp som sätter alla variabler dpkg-architecture skriver (sedan dpkg 1.16.1):

EXEMPEL
dpkg-architecture godtar flaggan -a och sänder den vidare till dpkg-architecture. Andra exempel:

 CC=i386-gnu-gcc dpkg-architecture -c debian/rules build

 eval $(dpkg-architecture -u)

Kontrollera om aktuell eller angiven värdarkitektur är identisk till en arkitektur:

 dpkg-architecture -elinux-arm64

 dpkg-architecture -ariscv64 -elinux-riscv64

Se om den aktuella eller angivna arkitekturen är ett Linuxsystem:

    dpkg-architecture -ilinux-any

     dpkg-architecture -aamd64 -ilinux-any

  Använda i debian/rules
Miljövariablerna som sätts av dpkg-architecture sänds till debian/rules som make-variabler (se dokumentationen för make). Du bör dock inte bero på dem eftersom detta förhindrar manuella anrop till skriptet. Du bör istället alltid initiera dem med dpkg-architecture med -q-flaggan. Här är några exempel, vilka även visar hur du kan förbättra stödet för korskompilering i ditt paket:

Hämta GNU-systemtypen och vidaresänd den till ./configure:

 DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
 DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
 [...]
 ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
   confflags += --build=$(DEB_HOST_GNU_TYPE)
 else
   confflags += --build=$(DEB_BUILD_GNU_TYPE) \
                --host=$(DEB_HOST_GNU_TYPE)
 endif
 [...]
 ./configure $(confflags)

Gör något endast för en specifik arkitektur:

 DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

 ifeq ($(DEB_HOST_ARCH),arm64)
   [...]
 endif

eller, om du bara vill testa på processor- eller OS-typ, använd variablerna DEB_HOST_ARCH_CPU eller DEB_HOST_ARCH_OS.

Observera att du även kan bero på att ett externt Makefile-klipp sätter alla variabler dpkg-architecture kan tillhandahålla:

    include /usr/share/dpkg/architecture.mk

     ifeq ($(DEB_HOST_ARCH),arm64)
       [...]
     endif

Oavsett bör du aldrig använda dpkg --print-architecture för att hämta arkitekturinformation när paketet byggs.

MILJÖVARIABLER

DPKG_DATADIR
    Om satt, används som datakatalog för dpkg, där arkitekturtabellerna ligger (sedan dpkg 1.14.17). Förval är ”/usr/share/dpkg”.

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).

ANTECKNINGAR
De långa kommando- och flaggnamnen är endast tillgängliga sedan dpkg 1.17.17.

SE ÄVEN
dpkg-buildpackage(1).

ÖVERSÄTTNING
Peter Krefting och Daniel Nylander.