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:
-
sop (qualquer implementação conforme
Stateless OpenPGP)
-
sq (de Sequoia-PGP)
-
gpg (de GnuPG)
-
-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 <
[email protected]>.