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...] [--] [filename.dsc|directory]

DESCRIÇÃO

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.
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.
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.
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.
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.
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.
If a .dsc file has been specified, it removes the extracted source directory.
13.
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.
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.
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 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.

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-08-01 1.22.11