Scroll to navigation

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

NOME

dpkg-buildpackage - compila pacotes binários ou fonte a partir de fontes

RESUMO

dpkg-buildpackage [option...]

DESCRIÇÃO

dpkg-buildpackage é um programa que automatiza os processos de compilar um pacote Debian. Consiste nos seguintes passos:

1.
Corre o hook preinit antes de ler qualquer ficheiro fonte. Prepara o ambiente de compilação ao definir várias variáveis de ambiente. (veja ENVIRONMENT), corre o hook init, e chama dpkg-source --before-build (a menos que -T ou --target sejam usados).
2.
Verifica se as dependências de compilação e os conflitos de compilação estão satisfeitos (a menos que -d ou --no-check-builddeps seja especificado).
3.
Se um ou mais alvos específicos foram seleccionado com a opção -T ou --target, chama esses alvos e pára aqui. Caso contrário corre o hook preclean e chama fakeroot debian/rules clean para limpar a árvore de compilação (a menos que -nc ou --no-pre-clean seja especificado).
4.
Corre o hook source e chama dpkg-source -b para gerar o pacote fonte. (se foi requerida uma compilação source com --build ou com opções equivalentes).
5.
Corre o hook build e chama debian/rules build-target, depois corre o hook binary seguido de fakeroot debian/rules binary-target (a menos que tenha sido requerido uma compilação apenas-fonte com --build=source ou opções equivalentes). Note que build-target e binary-target são ou build e binary (caso predefinido, ou se uma compilação any e all foi requerida com --build ou opções equivalentes), ou build-arch e binary-arch (se uma compilação any e não all foi requerida com --build ou opções equivalentes), ou build-indep e binary-indep (se uma compilação all e não any foi requerida com --build ou opções equivalentes).
6.
Corre o hook buildinfo, e chama dpkg-genbuildinfo para gerar um ficheiro .buildinfo. Várias opções de dpkg-buildpackage são reencaminhadas para o dpkg-genbuildinfo.
7.
Corre o hook changes e chama dpkg-genchanges para gerar um ficheiro .changes. O nome do ficheiro .changes irá depender do tipo de compilação e será tão específico quanto necessário mas não mais; o nome irá ser:
para uma compilação que inclua any
caso contrário para uma compilação que inclua all
caso contrário para uma compilação que inclua source

Muitas opções do dpkg-buildpackage são reencaminhadas para dpkg-genchanges.

8.
Corre o hook postclean e se -tc ou --post-clean for especificado, irá chamar fakeroot debian/rules clean outra vez.
9.
Chama dpkg-source --after-build.
10.
Corre o hook check e chama um verificados de pacote para o ficheiro .changes (se um comando for especificado em DEB_CHECK_COMMAND ou com --check-command).
11.
Corre o hook sign e assina usando o backend OpenPGP (desde que não seja uma compilação NÃO-LANÇADA, ou se --no-sign for especificado) para assinar o ficheiro .dsc (se algum, a menos que -us ou --unsigned-source sejam especificados), o ficheiro .buildinfo (a menos que -ui, --unsigned-buildinfo, -uc ou --unsigned-changes sejam especificados) e os ficheiros .changes (a menos que -uc ou --unsigned-changes sejam especificados).
12.
Corre o hook done.

OPÇÕES

Todas as opções longas podem ser especificadas em ambos linha de comandos e no sistema dpkg-buildpackage e nos ficheiros de configuração do utilizador. Cada linha no ficheiro de configuração é ou uma opção (exatamente igual a uma opção de linha de comandos mas sem os hífens iniciais) ou um comentário (se começar com ‘#’).

Especifica o type de compilação a partir de uma lista separada por vírgulas de componentes (desde dpkg 1.18.5). Todos os componentes especificados são combinados para selecionar o único tipo de compilação a usar, o que implica uma única execução de compilação com um único ficheiro changes gerado. Passado para dpkg-genchanges.

Os valores permitidos são:

Compila o pacote fonte.

Nota: Quando se usa este valor autónomo e se o que você quer é simplesmente (re-)compilar o pacote fonte a partir de uma árvore fonte limpa, usar dpkg-source directamente é sempre uma melhor opção pois não requer que sejam instaladas quaisquer dependências de compilação as quais, caso contrário, são precisas para ser capaz de chamar o alvo clean.

Compila os pacotes binários específicos de arquitectura.
Compila os pacotes binários independentes de arquitectura.
Compila os pacotes binários independentes e específicos de arquitectura. Isto é um alias para any,all.
Compila tudo. Isto é um alias para source,any,all, e o mesmo que o caso predefinido quando não é especificada nenhuma opção de compilação.
Equivalente a --build=source,all (desde dpkg 1.17.11).
Equivalente a --build=source,any (desde dpkg 1.17.11).
Equivalente a --build=binary ou --build=any,all.
Equivalente a --build=any.
Equivalente a --build=all.
Equivalente a --build=source.
Equivalente a --build=full, --build=source,binary ou --build=source,any,all (desde dpkg 1.15.8).
Chama debian/rules target uma vez por cada alvo especificado, após ter configurado o ambiente de compilação (excepto para chamar dpkg-source --before-build), e pára o processo de compilação do pacote aqui (desde dpkg 1.15.0, opção longa desde dpkg 1.18.8, suporte a multi-alvo desde dpkg 1.18.16). Se --as-root for também fornecido, então o comando é executado como root (veja --root-command). Note que alvos conhecidos que são obrigados a correr como root não precisam desta opção (isto é, os alvos clean, binary, binary-arch e binary-indep).
Apenas significativo junto com --target (desde dpkg 1.15.0). Requer que o alvo seja corrido com direitos de root.
Passado sem alterações ao dpkg-genchanges. Veja o seu manual.
Passa como -m ao dpkg-genchanges. Veja o seu manual.
Passa como -e ao dpkg-genchanges. Veja o seu manual.
Especifica a arquitectura Debian para qual compilamos (opção longa desde dpkg 1.17.17). A arquitectura da máquina onde compilamos é determinada automaticamente, e é também a predefinida para a máquina anfitriã.
Especifica o tipo de sistema GNU para qual compilamos (opção longa desde dpkg 1.17.17). Pode ser usado no lugar de --host-arch ou como um complemento para sobrepor o tipo de sistema GNU predefinido da arquitectura Debian anfitriã.
Especifica a arquitectura Debian para que os binários são compilados (desde dpkg 1.17.17). O valor predefinido é o da máquina anfitriã.
Especifica o tipo de sistema GNU para que os binários são compilados (desde dpkg 1.17.17). Pode ser usado no lugar de --target-arch ou como um complemento para sobrepor o tipo de sistema GNU predefinido da arquitectura Debian do alvo.
Especifica os perfil(es) que compilamos, como uma lista separada por vírgulas (desde dpkg 1.17.2, opção longa desde dpkg 1.18.8). O comportamento predefinido é compilar para nenhum perfil específico. Também os define (como uma lista separada por espaços) como a variável de ambiente DEB_BUILD_PROFILES o que permite, por exemplo, ficheiros debian/rules usarem esta informação para compilações condicionais.
Especifica se o número de trabalhos permitidos para serem corridos em simultâneo (desde dpkg 1.14.7, opção longa desde dpkg 1.18.8). O número de trabalhos correspondente ao número de processadores online se auto for especificado (desde dpkg 1.17.10), ou número ilimitado se jobs não for especificado. O comportamento predefinido é auto (desde dpkg 1.18.11) em modo não-forçado (desde dpkg 1.21.10), e como tal é sempre mais seguro usar com qualquer pacote incluindo aqueles que não seguros para compilação paralela. Definir o número de trabalhos para 1 irá restaurar a execução em série.

Irá adicionar parallel=jobs ou parallel à variável de ambiente DEB_BUILD_OPTIONS que permite a ficheiros debian/rules optarem por usar esta informação para os seus próprios objectivos. O valor jobs irá sobrepor a opção parallel=jobs ou parallel na variável de ambiente DEB_BUILD_OPTIONS. Note que o valor auto irá ser substituído pelo número real de processadores actuais activos, e como tal, não será propagado para nenhum processo filho. Se o número de processadores online não poder ser deduzido, então o código ira cair para o uso de execução em série (desde dpkg 1.18.15), no entanto isto apenas deverá acontecer em sistemas exóticos e não suportados.

Esta opção (desde dpkg 1.18.2, opção longa desde dpkg 1.18.8) é equivalente a -j em cima.

Como o comportamento do -j alterou no dpkg 1.21.10 para o modo opt-in, você pode usar esta opção se precisar de garantir semânticas entre séries de lançamento do dpkg.

Esta opção (desde dpkg 1.21.10) é equivalente à opção --jobs excepto que irá activar o modo paralelo forçado, ao adicionar a opção make -j com o número computado de trabalhos em paralelo para a variável de ambiente MAKEFLAGS.

Isto deverá causar que todas as invocações make subsequentes herdam a opção assim forçando a definição paralela no empacotamento (e possivelmente o sistema de compilação do autor se isso usar make(1)) independentemente do seu suporte para compilações paralelas, o que pode causar falhas na compilação.

Nota: Qualquer Makefile que não seja seguro-paralelo deve ser considerado defeituoso. Estes devem ou tornados seguro-paralelo, ou marcados como não seguros com o alvo make(1) .NOTPARALLEL.

Verifica dependências e conflitos de compilação; aborta se não satisfeitos (opção longa desde dpkg 1.18.8). Este é o comportamento predefinido.
Não verifica dependências e conflitos de compilação (opção longa desde dpkg 1.18.8).
Não verifica dependências de compilação embutidas e conflitos (desde dpkg 1.18.2). Estas as dependências de compilação implícitas e específicas da distribuição requeridas num ambiente de compilação, o chamado conjunto de pacotes Build-Essential.
Não respeita o campo Rules-Requires-Root, caindo para o seu valor de predefinição antiga (desde dpkg 1.19.1).
Não limpa a árvore fonte antes de compilar (opção longa desde dpkg 1.18.8). Implica -b se nada mais foi seleccionado entre -F, -g, -G, -B, -A ou -S. Implica -d com -S (desde dpkg 1.18.0).
Limpa a árvore fonte antes de compilar (desde dpkg 1.18.8). Este é o comportamento predefinido.
Limpa a árvore fonte (usando gain-root-command debian/rules clean) após o pacote ter sido compilado (opção longa desde dpkg 1.18.8).
Não limpa a árvore fonte após o pacote ter sido compilado (desde dpkg 1.19.1). Este é o comportamento predefinido.
Higieniza o ambiente de compilação (desde dpkg 1.20.0). Isto irá repor ou remover variáveis de ambiente, umask, e quaisquer outros atributos de processo que poderiam caso contrário afectar adversamente a compilação dos pacotes. Porque o ponto de entrada oficial para compilar pacotes é debian/rules, os pacotes não podem confiar que estas definições estejam no lugar, e assim devem funcionar mesmo quando elas não estão. O que há a higienizar é específico do fornecedor.
Quando o dpkg-buildpackage precisa de executar parte do processo de compilação como root, prefixa o comando que executa com gain-root-command se foi especificado um (opção longa desde dpkg 1.18.8). Caso contrário, se nenhum foi especificado, será usado por predefinição o fakeroot, se o comando estiver presente. gain-root-command deverá começar com o nome de um programa presente na PATH e receberá como argumentos o nome do comando real a correr e os argumentos que este deve receber. O gain-root-command pode incluir parâmetros (têm se ser separados por espaços) mas não meta-caracteres da shell. O gain-root-commandpode ser tipicamente fakeroot, sudo, super ou really. O su não é apropriado, pois ele só pode invocar a shell do utilizador com -c em vez de passar argumentos individualmente aos comandos que corre.
Compilar um pacote Debian geralmente involve invocar debian/rules como um comando com vários parâmetros standard (desde dpkg 1.14.17, opção longa desde dpkg 1.18.8). Com esta opção é possível usar outra invocação de programa para compilar o pacote (pode incluir parâmetros separados por espaços). Em alternativa pode ser usado para executar o ficheiro de regras standard com outro programa make (por exemplo ao usar /usr/local/bin/make -f debian/rules como rules-file).
Comando usado para verificar o próprio ficheiro .changes e qualquer artefacto de compilação referenciado no ficheiro (desde dpkg 1.17.6). O comando deve receber o nome de caminho de .changes como um argumento. Este comando é geralmente o lintian.
Passa a opção opção ao comando-de-verificação especificado com DEB_CHECK_COMMAND ou --check-command (desde dpkg 1.17.6). Pode ser usado várias vezes.
Define o código shell especificado hook-command como o hook hook-name, o qual vai correr nos tempos especificados nos passos de execução (desde dpkg 1.17.6). Os hooks irão sempre ser executados mesmo que a acção seguinte não seja executada (excepto para o hook binary). Todos os hooks irão correr no directório fonte desempacotado.

Alguns hooks podem receber informação adicional através de variáveis de ambiente (desde dpkg 1.22.0). Todos os hooks obtêm o nome de hook na variável de ambiente DPKG_BUILDPACKAGE_HOOK_NAME (desde dpkg 1.22.0).

Nota: Os hooks podem afectar o processo de compilação, e causar falhas ao compilar se os seus comandos falharem, portanto esteja atento a consequências indesejadas.

Os nome-de-hook actualmente suportados são:

Obtém DPKG_BUILDPACKAGE_HOOK_SOURCE_OPTIONS com as listas de opções separadas-por-espaços que serão passadas à chamada dpkg-source.
Obtém DPKG_BUILDPACKAGE_HOOK_BUILD_TARGET com o nome do alvo de compilação debian/rules chamado, mas apenas se chamado.
Obtém DPKG_BUILDPACKAGE_HOOK_BINARY_TARGET com o nome de alvo binário debian/rules chamado, mas apenas se chamado.
Obtém DPKG_BUILDPACKAGE_HOOK_BUILDINFO_OPTIONS com as listas de opções separadas-por-espaços que serão passadas à chamada dpkg-genbuildinfo.
Obtém DPKG_BUILDPACKAGE_HOOK_CHANGES_OPTIONS com as listas de opções separadas-por-espaços que serão passadas à chamada dpkg-genchanges.
Obtém DPKG_BUILDPACKAGE_HOOK_CHECK_OPTIONS com as listas de opções separadas-por-espaços que serão passadas à chamada do comando de verificação.

O comando-hook suporta as seguintes strings de formato de substituição, que lhes serão aplicadas antes da execução.

%%
Um único caracteres %.
%a
Um valor booleano (0 ou 1), que representa se a seguinte acção foi executada.
%p
O nome do pacote fonte.
%v
A versão do pacote fonte
%s
A versão do pacote fonte (sem a época).
%u
A versão do autor.
Define o nome-ficheiro para o ficheiro .buildinfo gerado (desde dpkg 1.21.0).
Passa a opção opt ao dpkg-genbuildinfo (desde dpkg 1.18.11). Pode ser usado várias vezes.
Especifica uma interface backend OpenPGP a usar quando se invoca o sign-command (desde dpkg 1.21.10).

A predefinição é auto, onde o melhor backend actual disponível irá ser usado. Os backends OpenPGP específicos suportados em ordem de preferência são:

(qualquer implementação em conformidade com Stateless OpenPGP)
(de Sequoia-PGP)
(de GnuPG)
Quando dpkg-buildpackage precisa de executar comando backend OpenPGP para assinar um ficheiro de controle de fonte (.dsc), um ficheiro .buildinfo ou um ficheiro .changes irá correr sign-command (procurando na PATH se necessário) em vez do predefinido ou auto-detectado comando backend (opção longa desde dpkg 1.18.8). O sign-command irá obter todos os argumentos específicos de backend de acordo com o --sign-backend selecionado. sign-command não deve conter espaços ou outros meta-caracteres de shell.
Especifica um ID-chave OpenPGP (seja uma impressão digital ou um ID de utilizador) para a chave secreta a usar ao assinar pacotes (--sign-key desde dpkg 1.18.8, --sign-keyid desde dpkg 1.21.10).
Especifica um key-file OpenPGP que contem a chave secreta usada quando assinar pacotes (desde dpkg 1.21.10).

Nota: Por razões de segurança é melhor o key-file ser mantido bloqueado com uma palavra passe.

Não assina o pacote fonte (opção longa desde dpkg 1.18.8).
Não assina o ficheiro .buildinfo (desde dpkg 1.18.19).
Não assina os ficheiros .buildinfo e .changes (opção longa desde dpkg 1.18.8).
Não assina nenhum ficheiro, isto inclui o pacote fonte, o ficheiro .buildinfo e o ficheiro .changes (desde dpkg 1.18.20).
Força o assinar dos ficheiros resultantes (desde dpkg 1.17.0), independentemente de -us, --unsigned-source, -ui, --unsigned-buildinfo, -uc, --unsigned-changes ou de outras heurísticas internas.
Passado sem alterações ao dpkg-source. Veja o seu manual.
Passa a opção opção ao dpkg-source (desde dpkg 1.15.6. Pode ser usado várias vezes.
Define o nome-ficheiro para o ficheiro .changes gerado (desde dpkg 1.21.0).
Passa a opção opção ao dpkg-genchanges (desde dpkg 1.15.6). Pode ser usado várias vezes.
Altera a localização da base de dados do dpkg (desde dpkg 1.14.0). A localização predefinida é /var/lib/dpkg.
-?, --help
Mostra a mensagem de utilização e termina.
Mostra a versão e termina.

AMBIENTE

Ambiente externo

Se definido, será usado como o comando para verificar o ficheiro .changes (desde dpkg 1.17.6). Sobreposto pela opção --check-command.
Se definido, será usado para assinar os ficheiros .changes, .buildinfo e .dsc (desde dpkg 1.17.2). Sobreposto pela opção --sign-key.
Se definido, será usado para assinar os ficheiros .changes, .buildinfo e .dsc (desde dpkg 1.21.10). Sobreposto pela opção --sign-keyfile.
Se definido, irá conter uma lista de opções separadas por espaços que afectam o comportamento de algumas ferramentas do dpkg envolvidas na compilação de pacote, e pode afectar o processo de compilação se o código em debian/rules as honrar. Estas opções podem ter parâmetros especificados imediatamente após um sinal de igual (‘=‘). Para opções que suportem múltiplos parâmetros, estes não serão separadas por espaços, pois estes estão reservados para opções separadas.

O seguinte são opções conhecidas e suportadas pelas ferramentas do dpkg, outras opções honradas por debian/rules podem ser definidas por políticas específicas da distribuição.

O debian/rules no empacotamento pode usar esta opção para definir o processo de compilação a usar N trabalhos em paralelo. É sobreposto pelas opções --jobs e --jobs-force.
dpkg-buildpackage irá ignorar a variável DEB_CHECK_COMMAND. Não é esperado que o debian/rules no empacotamento corra suites de teste durante a compilação.
Se debian/rules chamar dpkg-buildflags para definir as bandeiras de compilação, essas serão definidas para não activar nenhumas optimizações.
O debian/rules no empacotamento deve assegurar que os objectos não ficam com a sua informação de depuração removida. Se debian/rules incluir o fragmento de make mk/buildtools.mk a variável de make STRIP irá respeitar esta opção.
dpkg-buildpackage irá acrescentar a bandeira --no-print-directory make(1) à variável de ambiente MAKEFLAGS. O debian/rules no empacotamento deve reduzir nos detalhes, não sendo completamente silencioso.
Estas são áreas de característica que controlam as características da bandeira de compilação. Veja dpkg-buildflags(1) para mais detalhes.
Se definido, será usado como perfil(es) de compilação activos para o pacote a ser compilado (desde dpkg 1.17.2). É uma lista separada por espaços de nomes de perfis. Sobreposto pela opção -P.
Define o modo de cor (desde dpkg 1.18.5). Os valores actualmente aceites são: auto (predefinido), always e never.
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).

Ambiente interno

Mesmo que dpkg-buildpackage exporte algumas variáveis, o debian/rules não deve confiar na sua presença e deve em vez disso usar a interface respectiva para obter os valore que precisa, porque esse ficheiro é o ponto de entrada principal para compilar pacotes e deve ser suportado poder fazê-lo sozinho.

dpkg-architecture é chamado com os parâmetros -a e -t reencaminhados. Qualquer variável que seja resultante da sua opção -s é integrada no ambiente de compilação.
Esta variável é definida para o valor obtido a partir do campo Rules-Requires-Root, o nível dpkg-build-api ou a partir da linha de comandos. Quando definida, será um valor válido para o campo Rules-Requires-Root. É usada para notificar debian/rules se a especificação rootless-builds.txt é suportada.
Esta variável é definida para gain-root-command quando o campo Rules-Requires-Root é definido para um valor diferente de no e binary-targets.
Esta variável é definida à marca temporal de Unix desde a época da última entrada em debian/changelog, se não estiver já definida.

FICHEIROS

/etc/dpkg/buildpackage.conf
Ficheiro de configuração geral do sistema
$XDG_CONFIG_HOME/dpkg/buildpackage.conf ou
$HOME/.config/dpkg/buildpackage.conf
Ficheiro de configuração do utilizador.

NOTAS

As bandeiras de compilador já não são exportadas

Entre dpkg 1.14.17 e 1.16.1, dpkg-buildpackage exportava as bandeiras de compilador (CFLAGS, CXXFLAGS, FFLAGS, CPPFLAGS e LDFLAGS) com valores como retornados por dpkg-buildflags. Isto já não acontece.

Metas de compilação predefinidas

dpkg-buildpackage está a usar os alvos build-arch e build-indep desde dpkg 1.16.2. Esses alvos são assim obrigatórios. Mas para evitar ruturas de pacotes existentes, e facilitar a transição, se o pacote fonte não compilar ambos pacotes binários independentes e dependentes da arquitectura (desde dpkg 1.18.8) irá regressar ao uso de alvo build se make -f debian/rules -qn build-target retornar 2 como código de saída.

SEGURANÇA

A compilação de pacotes binário ou fonte só deve ser executada sobre dados de fonte de confiança.

BUGS

Deverá ser possível especificar espaços e meta-caracteres de shell e argumentos iniciais para gain-root-command e sign-command.

VEJA TAMBÉM

/usr/share/doc/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).

TRADUÇÃO

Américo Monteiro

Se encontrar algum erro na tradução deste documento, por favor comunique para Américo Monteiro <a_monteiro@gmx.com>.

2024-03-10 1.22.6