dpkg-architecture - define e determina a arquitectura para compilação de pacotes
dpkg-architecture [option...] [command]
dpkg-architecture disponibiliza uma habilidade para determinar e definir a arquitectura de compilação e da máquina para compilação de pacotes.
A arquitectura de compilação é sempre determinada seja ou pela variável DEB_BUILD_ARCH se definida (e se --force não for especificada) ou por uma chamada externa ao dpkg(1), e não pode ser definida na linha de comandos.
Você pode especificar a arquitectura da máquina ao fornecer uma ou ambas as opções --host-arch e --host-type, caso contrário é usada a variável DEB_HOST_ARCH se definida (e não sendo especificado --force). A predefinição é determinada por uma chamada externa ao gcc(1), ou o mesmo como a arquitectura de compilação se CC ou gcc estiverem ambos não disponíveis. Um de --host-arch e --host-type é suficiente, o valor do outro será definido para uma predefinição utilizável. De facto, é muitas vezes melhor apenas especificar um, porque dpkg-architecture vai avisa-lo se a sua escolha não corresponder ao predefinido.
- -l, --list
- Escreve as variáveis de ambiente, uma em cada linha, no formato VARIÁVEL=valor. Esta é a acção predefinida.
- -e, --equal architecture
- Verifica a igualdade da arquitectura (desde dpkg 1.13.13). Compara a actual ou a arquitectura de maquina Debian especificada com architecture, para verificar se são iguais. Esta acção não irá expandir as wildcards de arquitectura. O comando termina com um estado de saída 0 de corresponderem, 1 se não corresponderem.
- -i, --is architecture-wildcard
- Verifica a identidade da arquitectura (desde dpkg 1.13.13). Compara a actual ou a arquitectura de máquina Debian especificada com architecture-wildcard após a ter expandido como uma wildcard de arquitectura, para verificar se correspondem. O comando termina com estado de saída 0 se corresponderem, 1 se não corresponderem.
- -q, --query variable-name
- Escreve o valor de uma variável única.
- -s, --print-set
- Escreve um comando de exportação. Isto pode ser usado para definir as variáveis de ambiente usando a shell POSIX ou make eval, dependendo do formato dos resultados.
- -u, --print-unset
- Escreve um comando semelhante ao --print-set mas para limpar o valor de todas as variáveis.
- -c, --command command-string
- Executa uma command-string num ambiente que tem todas as variáveis definidas para o determinado valor.
Se a string-de-comando conter meta-caracteres de shell, então será invocada através da shell limite do sistema.
- -L, --list-known
- Escreve uma lista de nomes de arquitecturas válidos. Possivelmente restringidos por uma ou mais das opções de correspondência --match-wildcard, --match-bits ou --match-endian (desde dpkg 1.17.14).
- -?, --help
- Mostra a mensagem de utilização e termina.
- --version
- Mostra a versão e termina.
- -a, --host-arch architecture
- Define a arquitectura da máquina Debian
- -t, --host-type gnu-system-type
- Define o tipo de sistema GNU da máquina.
- -A, --target-arch architecture
- Define a arquitectura Debian de destino (desde dpkg 1.17.14).
- -T, --target-type gnu-system-type
- Define o tipo de sistema GNU do destino (desde dpkg 1.17.14).
- -W, --match-wildcard architecture-wildcard
- Restringe as arquitectura listadas por --list-known a aquelas que correspondem à wildcard de arquitectura especificada (desde dpkg 1.17.14).
- -B, --match-bits architecture-bits
- Restringe as arquitectura listadas por --list-known a aquelas com os bits de CPU especificados (desde dpkg 1.17.14). Seja 32 ou 64.
- -E, --match-endian architecture-endianness
- Restringe as arquitectura listadas por --list-known a aquelas com a categoria endian especificada (desde dpkg 1.17.14). Seja little ou big.
- --print-format format
- Define o formato de resultados para --print-set e --print-unset (desde dpkg 1.20.6), para ou shell (predefinição) ou make.
- -f, --force
- Os valores definidos pelas variáveis de ambiente existentes com os mesmos nomes usados como usados pelos scripts são respeitados (isto é, usados por dpkg-architecture), excepto se esta bandeira de forçar estiver presente. Isto permite ao utilizador sobrepor um valor mesmo quando a chamada a dpkg-architecture está enterrada em algum outro script (por exemplo dpkg-buildpackage(1)).
- máquina de compilação
- A máquina onde o pacote é compilado.
- máquina anfitriã
- A máquina para onde o pacote é compilado.
- máquina destino (alvo)
- A maquina para a qual o compilador foi construído, ou o que emulador que irá correr código para. Isto é apenas necessário quando se compila ferramenta-corrente-cruzada (ou emulador), uma que será compilada sobre a arquitectura de compilação, para ser corrida na arquitectura anfitriã, e para compilar código (ou correr emulado) para a arquitectura alvo.
- Arquitectura Debian
- A string de arquitectura Debian, a qual especifica a árvore binária no arquivo FTP. Exemplos: i386, sparc, hurd-i386.
- Tuple de arquitectura Debian
- Um tuple de arquitectura Debian é a arquitectura totalmente qualificada com todos os seus componentes soletrados. Isto difere das arquitecturas Debian em que pelo menos o componente cpu não trás embutido o abi. O tuple actual tem o formato abi-libc-os-cpu. Exemplos: base-gnu-linux-amd64, eabihf-musl-linux-arm.
- Wildcard de arquitectura Debian
- Um wildcard de arquitectura Debian é uma string especial de arquitectura que irá corresponder a qualquer arquitectura real que faça parte dela. O formato geral é um tuple de arquitectura Debian com quatro ou menos elementos, e com pelo menos um deles a ser any. Elementos em falta no tuple são prefixados implicitamente como any, e assim os seguintes pares são equivalentes:
Exemplos: linux-any, any-i386, hurd-any, eabi-any-any-arm, musl-any-any.
- Tipo de sistema GNU
- Uma string de especificação de arquitectura consiste de duas partes separadas por um hífen: cpu e sistema. Exemplos: i586-linux-gnu, sparc-linux-gnu, i686-gnu, x86_64-netbsd.
- multiarch triplet
- O tipo de sistema GNU clarificado, usado para caminhos do sistema de ficheiros. Este triplet não altera mesmo quando a linha base ISA entra em colisão, para que os caminhos resultantes fiquem estáveis com o tempo. A única diferença actual com o tipo de sistema GNU é que a parte de CPU para os sistemas baseados em i386 é sempre i386. Exemplos: i386-linux-gnu, x86_64-linux-gnu. Exemplos de caminhos: /lib/powerpc64le-linux-gnu/, /usr/lib/i386-kfreebsd-gnu/.
As seguintes variáveis são lidas a partir do ambiente (a menos que --force seja especificado) e definidas por dpkg-architecture (veja a secção TERMS para uma descrição do esquema de nomeação):
- DEB_BUILD_ARCH
- A arquitectura Debian da máquina de compilação.
- DEB_BUILD_ARCH_ABI
- O nome ABI Debian da máquina de compilação (desde dpkg 1.18.11).
- DEB_BUILD_ARCH_LIBC
- O nome libc Debian da máquina de compilação (desde dpkg 1.18.11).
- DEB_BUILD_ARCH_OS
- O nome de sistema Debian da máquina de compilação (desde dpkg 1.13.2).
- DEB_BUILD_ARCH_CPU
- O nome de CPU de Debian da máquina de compilação (desde dpkg 1.13.2).
- DEB_BUILD_ARCH_BITS
- O tamanho do ponteiro da máquina de compilação (em bits, desde dpkg 1.15.4).
- DEB_BUILD_ARCH_ENDIAN
- A classe endian da máquina de compilação (ittle / big; desde dpkg 1.15.4).
- DEB_BUILD_GNU_CPU
- A parte CPU GNU de DEB_BUILD_GNU_TYPE.
- DEB_BUILD_GNU_SYSTEM
- A parte de system GNU de DEB_BUILD_GNU_TYPE.
- DEB_BUILD_GNU_TYPE
- O tipo de sistema GNU da máquina de compilação.
- DEB_BUILD_MULTIARCH
- O tipo de sistema GNU clarificado da máquina de compilação, usado para caminhos do sistema de ficheiros (desde dpkg 1.16.0).
- DEB_HOST_ARCH
- A arquitectura Debian da máquina anfitriã.
- DEB_HOST_ARCH_ABI
- O nome ABI Debian da máquina anfitriã (desde dpkg 1.18.11).
- DEB_HOST_ARCH_LIBC
- O nome libc Debian da máquina anfitriã (desde dpkg 1.18.11).
- DEB_HOST_ARCH_OS
- O nome de sistema Debian da máquina anfitriã (desde dpkg 1.13.2).
- DEB_HOST_ARCH_CPU
- O nome de CPU de Debian da máquina anfitriã (desde dpkg 1.13.2).
- DEB_HOST_ARCH_BITS
- O tamanho do ponteiro da máquina anfitriã (em bits, desde dpkg 1.15.4).
- DEB_HOST_ARCH_ENDIAN
- A classe endian da máquina anfitriã (ittle / big; desde dpkg 1.15.4).
- DEB_HOST_GNU_CPU
- A parte CPU GNU de DEB_HOST_GNU_TYPE.
- DEB_HOST_GNU_SYSTEM
- A parte de system GNU de DEB_HOST_GNU_TYPE.
- DEB_HOST_GNU_TYPE
- O tipo de sistema GNU da máquina anfitriã.
- DEB_HOST_MULTIARCH
- O tipo de sistema GNU clarificado da máquina anfitriã, usado para caminhos do sistema de ficheiros (desde dpkg 1.16.0).
- DEB_TARGET_ARCH
- A arquitectura Debian da máquina de destino (desde dpkg 1.17.14).
- DEB_TARGET_ARCH_ABI
- O nome ABI Debian da máquina alvo (desde dpkg 1.18.11).
- DEB_TARGET_ARCH_LIBC
- O nome libc Debian da máquina alvo (desde dpkg 1.18.11).
- DEB_TARGET_ARCH_OS
- O nome de sistema Debian da máquina de destino (desde dpkg 1.17.14).
- DEB_TARGET_ARCH_CPU
- O nome de CPU de Debian da máquina de destino (desde dpkg 1.17.14).
- DEB_TARGET_ARCH_BITS
- O tamanho do ponteiro da máquina de destino (em bits, desde dpkg 1.17.14).
- DEB_TARGET_ARCH_ENDIAN
- A classe endian da máquina de destino (ittle / big; desde dpkg 1.17.14).
- DEB_TARGET_GNU_CPU
- A parte CPU GNU de DEB_TARGET_GNU_TYPE (desde dpkg 1.17.14).
- DEB_TARGET_GNU_SYSTEM
- A parte de system GNU de DEB_TARGET_GNU_TYPE (desde dpkg 1.17.14).
- DEB_TARGET_GNU_TYPE
- O tipo de sistema GNU da máquina de destino (desde dpkg 1.17.14).
- DEB_TARGET_MULTIARCH
- O tipo de sistema GNU clarificado da máquina de destino, usado para caminhos do sistema de ficheiros (desde dpkg 1.17.14).
Todos estes ficheiros têm de estar presentes para o dpkg-architecture funcionar. A sua localização pode ser sobreposta durante o funcionamento com a variável de ambiente DPKG_DATADIR. Estas tabelas contêm um pseudo-campo Version de formato na sua primeira linha para marcar o seu formato, para que os analisadores possam verificar se o compreendem, tal como "# Version=1.0".
- /usr/share/dpkg/cputable
- Tabela de nomes de CPU conhecidas e o mapear delas para o seu nome GNU. Formato versão 1.0 (desde dpkg 1.13.2).
- /usr/share/dpkg/ostable
- Tabela de nomes de sistemas operativos conhecidos e o mapear deles para o seu nome GNU. Formato versão 2.0 (desde dpkg 1.18.11).
- /usr/share/dpkg/tupletable
- Mapeamento entre tuples de arquitectura Debian e nomes de arquitectura Debian. Versão de formato 1.0 (desde dpkg 1.18.11).
- /usr/share/dpkg/abitable
- Tabela de sobreposições de atributos ABI de arquitectura Debian. Versão de formato 2.0 (desde dpkg 1.18.11).
- /usr/share/dpkg/architecture.mk
- Fragmento do Makefile cuja propriedade define e exporta todas as variáveis que o dpkg-architecture gera como resultado (desde dpkg 1.16.1).
dpkg-buildpackage aceita a opção -a e passa-a para dpkg-architecture. Outros exemplos:
CC=i386-gnu-gcc dpkg-architecture -c debian/rules build
eval $(dpkg-architecture -u)
Verifica se a arquitectura actual ou da máquina especificada é igual a uma arquitectura:
dpkg-architecture -elinux-alpha
dpkg-architecture -amips -elinux-mips
Verifica se a arquitectura actual ou da máquina especificada é um sistema Linux.
dpkg-architecture -ilinux-any
dpkg-architecture -ai386 -ilinux-any
As variáveis de ambiente definidas pelo dpkg-architecture são passadas para debian/rules como variáveis do make (veja a documentação do make). No entanto, você não deve confiar nelas, porque prejudicam a invocação manual do script. Em vez disso, você deve sempre inicializa-las usando dpkg-architecture com a opção -q. Aqui estão alguns exemplos, que também mostram como você pode melhorar o suporte a compilação cruzada no seu pacote:
Obter o tipo de sistema GNU e reencaminha-lo para ./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) Fazer algo apenas para uma arquitectura específica:
DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
ifeq ($(DEB_HOST_ARCH),alpha)
[...]
endif
ou se você apenas precisar de verificar o tipo de CPU ou SO, use as variáveis DEB_HOST_ARCH_CPU ou DEB_HOST_ARCH_OS
Note que você também pode confiar num retalho externo do Makefile para definir apropriadamente todas as variáveis que o dpkg-architecture pode fornecer.
include /usr/share/dpkg/architecture.mk
ifeq ($(DEB_HOST_ARCH),alpha)
[...]
endif
Em qualquer dos casos, você nunca deverá usar o dpkg --print-architecture para obter informação de arquitectura durante uma compilação de pacote.
- DPKG_DATADIR
- Se definida, será usada como o directório de dados do dpkg, onde as tabelas de arquitectura estão localizadas (desde 1.14.17). A predefinição é «/usr/share/dpkg».
- DPKG_COLORS
- Define o modo de cor (desde dpkg 1.18.5). Os valores actualmente aceites são: auto (predefinido), always e never.
- DPKG_NLS
- Se definida, será usada para decidir se deve activar o Suporte a Linguagem Nativa. Também como conhecido como suporte de internacionalização (ou i18n) (desde dpkg 1.19.0). Os valores aceites são 0 e 1 (predefinição).
Todos comandos e nomes de opções longos disponíveis apenas desde dpkg 1.17.17.
Américo Monteiro
Se encontrar algum erro na tradução deste documento, por favor comunique para Américo Monteiro <a_monteiro@gmx.com>.