dpkg-buildpackage - compila pacotes binários ou fonte a
partir de fontes
dpkg-buildpackage [option...]
dpkg-buildpackage é um programa que automatiza os
processos de compilar um pacote Debian. Consiste nos seguintes passos:
- 1.
- 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 quando necessário mas não mais; para uma
compilação que inclua any o nome será
source-name_binary-version_arch.changes,
ou caso contrário para uma compilação que inclua
all o nome será
source-name_binary-version_all.changes,
ou caso contrário para uma compilação que inclua
source o nome será
source-name_source-version_source.changes.
Muitas opções de 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.
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
‘#’).
- --build=type
- 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:
- source
- 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.
- any
- Compila os pacotes binários específicos de
arquitectura.
- all
- Compila os pacotes binários independentes de arquitectura.
- binary
- Compila os pacotes binários independentes e específicos de
arquitectura. Isto é um alias para any,all.
- full
- 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.
- -g
- Equivalente a --build=source,all (desde dpkg 1.17.11).
- -G
- Equivalente a --build=source,any (desde dpkg 1.17.11).
- -b
- Equivalente a --build=binary ou --build=any,all.
- -B
- Equivalente a --build=any.
- -A
- Equivalente a --build=all.
- -S
- Equivalente a --build=source.
- -F
- Equivalente a --build=full, --build=source,binary ou
--build=source,any,all (desde dpkg 1.15.8).
- --target=target[,...]
- --target
target[,...]
- -T,
--rules-target=target[,...]
- 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).
- --as-root
- Apenas significativo junto com --target (desde dpkg 1.15.0). Requer
que o alvo seja corrido com direitos de root.
- -si
- -sa
- -sd
- -vversion
- -Cchanges-description
- -mmaintainer-address
- -emaintainer-address
- Passado sem alterações ao dpkg-genchanges. Veja o seu
manual.
- --build-by=maintainer-address
- --source-by=maintainer-address
(desde dpkg 1.21.10)
- Passa como -m ao dpkg-genchanges. Veja o seu manual.
- --release-by=maintainer-address
- --changed-by=maintainer-address
(desde dpkg 1.21.10)
- Passa como -e ao dpkg-genchanges. Veja o seu manual.
- -a, --host-arch
architecture
- 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ã.
- -t, --host-type
gnu-system-type
- 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ã.
- --target-arch
architecture
- 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ã.
- --target-type
gnu-system-type
- 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.
- -P,
--build-profiles=profile[,...]
- 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.
- -j,
--jobs[=jobs|auto]
- 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.
- -J,
--jobs-try[=jobs|auto]
- 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.
- --jobs-force[=jobs|auto]
- 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.
- -D,
--check-builddeps
- 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.
- -d,
--no-check-builddeps
- Não verifica dependências e conflitos de
compilação (opção longa desde dpkg
1.18.8).
- --ignore-builtin-builddeps
- 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.
- --rules-requires-root
- Não respeita o campo Rules-Requires-Root, caindo para o seu
valor de predefinição antiga (desde dpkg 1.19.1).
- -nc,
--no-pre-clean
- 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).
- --pre-clean
- Limpa a árvore fonte antes de compilar (desde dpkg 1.18.8). Este
é o comportamento predefinido.
- -tc,
--post-clean
- 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).
- --no-post-clean
- Não limpa a árvore fonte após o pacote ter sido
compilado (desde dpkg 1.19.1). Este é o comportamento
predefinido.
- --sanitize-env
- 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.
- -r,
--root-command=gain-root-command
- 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.
- -R,
--rules-file=rules-file
- 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).
- --check-command=check-command
- 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.
- --check-option=opt
- 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.
- --hook-hook-name=hook-command
- 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.
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:
init preclean source build binary buildinfo changes
postclean check sign done
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.
- --buildinfo-file=filename
- Define o nome-ficheiro para o ficheiro .buildinfo gerado
(desde dpkg 1.21.0).
- --buildinfo-option=opt
- Passa a opção opt ao dpkg-genbuildinfo (desde
dpkg 1.18.11). Pode ser usado várias vezes.
- --sign-backend=sign-backend
- 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:
- -p,
--sign-command=sign-command
- Quando dpkg-buildpackage precisa de executar comando backend
OpenPGP para assinar um ficheiro de controle de fonte (.dsc) ou um
ficheiro .changes irá correr sign-command (procurando
na PATH se necessário) em vez do predefinido ou do comando
backend auto-detectado (opção longa desde dpkg 1.18.8).
sign-command irá obter todos os argumentos definidos por
--sign-backend. sign-command não deve conter
espaços ou outros meta-caracteres de shell.
- -k,
--sign-keyid=key-id
- --sign-key=key-id
- 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).
- --sign-keyfile=key-file
- 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.
- -us,
--unsigned-source
- Não assina o pacote fonte (opção longa desde dpkg
1.18.8).
- -ui,
--unsigned-buildinfo
- Não assina o ficheiro .buildinfo (desde dpkg 1.18.19).
- -uc,
--unsigned-changes
- Não assina os ficheiros .buildinfo e .changes
(opção longa desde dpkg 1.18.8).
- --no-sign
- Não assina nenhum ficheiro, isto inclui o pacote fonte, o ficheiro
.buildinfo e o ficheiro .changes (desde dpkg 1.18.20).
- --force-sign
- 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.
- -sn
- -ss
- -sA
- -sk
- -su
- -sr
- -sK
- -sU
- -sR
- -i,
--diff-ignore[=regex]
- -I,
--tar-ignore[=pattern]
- -z,
--compression-level=level
- -Z,
--compression=compressor
- Passado sem alterações ao dpkg-source. Veja o seu
manual.
- --source-option=opt
- Passa a opção opção ao
dpkg-source (desde dpkg 1.15.6. Pode ser usado várias
vezes.
- --changes-file=filename
- Define o nome-ficheiro para o ficheiro .changes gerado
(desde dpkg 1.21.0).
- --changes-option=opt
- Passa a opção opção ao
dpkg-genchanges (desde dpkg 1.15.6). Pode ser usado várias
vezes.
- --admindir=dir
- --admindir
dir
- 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.
- --version
- Mostra a versão e termina.
- DEB_CHECK_COMMAND
- Se definido, será usado como o comando para verificar o ficheiro
.changes (desde dpkg 1.17.6). Sobreposto pela opção
--check-command.
- DEB_SIGN_KEYID
- Se definido, será usado para assinar os ficheiros .changes,
.buildinfo e .dsc (desde dpkg 1.17.2). Sobreposto pela
opção --sign-key.
- DEB_SIGN_KEYFILE
- Se definido, será usado para assinar os ficheiros .changes,
.buildinfo e .dsc (desde dpkg 1.21.10). Sobreposto pela
opção --sign-keyfile.
- DEB_BUILD_OPTIONS
- Se definido, irá conter uma lista de opções separadas
por espaços que podem afectar o processo de
compilação em debian/rules, e o comportamento de
alguns comandos do dpkg.
Com nocheck a variável DEB_CHECK_COMMAND
será ignorada. com parallel=N os trabalhos
paralelos serão definidos para N, sobrepostos pela
opção --jobs-try.
- DEB_BUILD_PROFILES
- 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.
- 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).
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.
- DEB_BUILD_*
- DEB_HOST_*
- DEB_TARGET_*
- 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.
- DEB_RULES_REQUIRES_ROOT
- Esta variável é definida para o valor obtido a partir do
campo Rules-Requires-Root 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.
- DEB_GAIN_ROOT_CMD
- Esta variável é definida para gain-root-command
quando o campo Rules-Requires-Root é definido para um valor
diferente de no e binary-targets.
- SOURCE_DATE_EPOCH
- Esta variável é definida à marca temporal de Unix
desde a época da última entrada em debian/changelog,
se não estiver já definida.
- /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.
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.
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.
Deverá ser possível especificar espaços e
meta-caracteres de shell e argumentos iniciais para gain-root-command
e sign-command.
/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).
Américo Monteiro
Se encontrar algum erro na tradução deste documento,
por favor comunique para Américo Monteiro
<a_monteiro@gmx.com>.