Capítulo 9. Mais sobre empacotamento

Índice

9.1. Personalização do pacote
9.2. debian/rules personalizado
9.3. Variáveis para debian/rules
9.4. Novo lançamento do autor
9.5. Gerir a lista de patch com dquilt
9.6. Comandos de compilação
9.7. Nota sobre o sbuild
9.8. Casos especiais de compilação
9.9. Enviar orig.tar.gz
9.10. Envios saltados
9.11. Relatórios de bug

Vamos explorar mais fundamentos do empacotamento Debian.

Todos os dados de personalização para o pacote fonte Debian residem no directório debian/ como apresentado em Secção 5.7, “Passo 3: Modificação dos ficheiros modelo””:

Quando estes não são suficientes para fazer um bom pacote Debian, ficheiros patches -p1 de debian/patches/* são implantados para modificar a fonte do autor. Estes são aplicados uma sequência definida no ficheiro debian/patches/series antes de compilar o pacote como apresentado em Secção 5.9, “Passo 3 (alternativos): Modificação da fonte do autor”.

Você deve endereçar a causa raiz do problema de empacotamento Debian pela maneira menos invasiva possível. Esta abordagem irá fazer o pacote gerado mais robusto para atualizações futuras.

[Nota]Nota

Se a patch que endereça a causa raiz é útil para o projeto do autor, envie-a para o maintainer do autor.

A personalização flexível do Secção 6.5, “Ficheiro debian/rules é alcançado ao adicionar alvos override_dh_* apropriados e suas regras.

Quando uma operação especial é requerida para um certo comando dh_foo invocado pelo comando dh, a sua execução automática pode ser sobreposta ao adicionar o alvo makefile override_dh_foo no ficheiro debian/rules.

O processo de compilação pode ser personalizado via interface fornecida pelo autor como argumentos para os comandos do sistema de compilação de fonte de autor, tais como:

  • configure,
  • Makefile,
  • python -m build, ou
  • Build.PL.

Neste caso, você deve adicionar o alvo override_dh_auto_build com dh_auto_build -- argumentos. Isto assegura que os argumentos são passados para o sistema de compilação após os parâmetros predefinidos que o dh_auto_build geralmente passa.

[Dica]Dica

Evite executar os comandos crus do sistema de compilação diretamente se eles forem suportados pelo comando dh_auto_build.

Veja:

Algumas definições de variável úteis para personalizar o debian/rules podem ser encontradas em ficheiros sob /usr/share/dpkg/. A notar:

pkg-info.mk
Define variáveis DEB_SOURCE, DEB_VERSION, DEB_VERSION_EPOCH_UPSTREAM, DEB_VERSION_UPSTREAM_REVISION, DEB_VERSION_UPSTREAM, e DEB_DISTRIBUTION obtidas de dpkg-parsechangelog(1). (úteis para suporte a backport etc...)
vendor.mk
Define variáveis DEB_VENDOR e DEB_PARENT_VENDOR; e macro dpkg_vendor_derives_from obtidas de dpkg-vendor(1). (úteis para suporte a fornecedor (Debian, Ubuntu, …​).)
architecture.mk
Veja variáveis DEB_HOST_* e DEB_BUILD_* obtidas de dpkg-architecture(1).
buildflags.mk
Define as bandeiras de compilação CFLAGS, CPPFLAGS, CXXFLAGS, OBJCFLAGS, OBJCXXFLAGS, GCJFLAGS, FFLAGS, FCFLAGS, e LDFLAGS obtidas de dpkg-buildflags(1).

Por exemplo, você pode adicionar uma opção extra ao CONFIGURE_FLAGS para alvo linux-any de arquitecturas ao adicionar o seguinte ao debian/rules:

DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS)
 ...
ifeq ($(DEB_HOST_ARCH_OS),linux)
CONFIGURE_FLAGS += --enable-wayland
endif

Veja Secção 10.10, “Multiarch””, dpkg-architecture(1) e dpkg-buildflags(1).

Quando um novo tarball de lançamento de autor foo-novaversão.tar.gz é lançado, o pacote fonte Debian pode ser atualizado ao invocar comandos na árvore fonte antiga como:

$ uscan
 ... foo-newversion.tar.gz downloaded
$ uupdate -v newversion ../foo-newversion.tar.gz
  • O ficheiro debian/watch na árvore fonte antiga tem de ser um válido.
  • Isto cria um link simbólico ../foo_novaversão.orig.tar.gz a apontar para ../foo-novaversão.tar.gz.
  • Ficheiros são extraídos de ../foo-novaversão.tar.gzpara ../foo-novaversão/
  • Ficheiros são copiados de ../foo-versãoantiga/debian/ para ../foo-novaversão/debian/ .

Após o de cima, você deve refrescar os ficheiros debian/patches/* (veja Secção 9.5, “Gerir a lista de patch com dquilt”) e atualizar debian/changelog com o comando dch(1).

Quando debian uupdate é especificado no final da linha no ficheiro debian/watch, o uscan executa automaticamente uupdate(1) após descarregar o tarball.

Você pode adicionar, retirar, e refrescar ficheiros debian/patches/com dquilt para gerir a lista de patch.

  • Adiciona uma nova patch debian/patches/nomebug.patch registando a modificação à fonte do autor no ficheiro ficheiro_buggy como:

    $ dquilt push -a
    $ dquilt new bugname.patch
    $ dquilt add buggy_file
    $ vim buggy_file
      ...
    $ dquilt refresh
    $ dquilt header -e
    $ dquilt pop -a
  • Drop (== desactiva) um caminho existente

    • Comenta linha pertinente em debian/patches/series
    • Apagar o próprio caminho (opcional)
  • Refresca ficheiros debian/patches/* para fazer o dpkg-source -b funcionar como esperado após atualizar um pacote Debian para o novo lançamento do autor.

     $ uscan; uupdate  # updating to the new upstream release
     $ while dquilt push; do dquilt refresh ; done
     $ dquilt pop -a
    • Se, em cima, forem encontrados conflitos com dquilt push, resolva-os e depois corra dquilt refresh manualmente para cada um deles.

Aqui vamos recapitular os comandos de compilação de pacotes de baixo nível disponíveis. Existem muitas maneiras de se fazer a mesma coisa.

  • dpkg-buildpackage = núcleo da ferramenta de compilação de pacote
  • debuild = dpkg-buildpackage + lintian (compilação sob as variáveis de ambiente higienizadas)
  • schroot = núcleo da ferramenta de ambiente chroot de Debian
  • sbuild = dpkg-buildpackage em schroot personalizado (compilar na chroot)

O comando sbuild(1) é um script invólucro do dpkg-buildpackage o qual compila pacotes binário Debian num ambiente chroot gerido pelo comando schroot(1). Por exemplo, compilar para a suite Debian unstable pode ser feito assim:

 $ sudo sbuild -d unstable

Em terminologia do schroot(1), isto compila um pacote Debian num limpo e efémero chroot chroot:unstable-amd64-sbuild começando como uma cópia do mínimo persistente limpo chroot source:unstable-amd64-sbuild.

Este ambiente de compilação foi configurado como descrito em Secção 4.6, “Configuração do sbuild com sbuild-debian-developer-setup -s unstable o que essencialmente fez o seguinte:

 $ sudo mkdir -p /srv/chroot/dist-amd64-sbuild
 $ sudo sbuild-createchroot unstable /srv/chroot/unstable-amd64-sbuild http://deb.debian.org/debian
 $ sudo usermod -a -G sbuild <your_user_name>
 $ sudo newgrp -

A configuração schroot(1) para unstable-amd64-sbuild foi gerada em /etc/schroot/chroot.d/unstable-amd64-sbuild.$suffix :

[unstable-amd64-sbuild]
description=Debian sid/amd64 autobuilder
groups=root,sbuild
root-groups=root,sbuild
profile=sbuild
type=directory
directory=/srv/chroot/unstable-amd64-sbuild
union-type=overlay

Aqui:

  • O perfil definido no directório /etc/schroot/sbuild/ é usado para configurar o ambiente chroot.
  • /srv/chroot/unstable-amd64-sbuild directório que contém o sistema de ficheiros da chroot.
  • /etc/sbuild/unstable-amd64-sbuild é ligado por link simbólico a /srv/chroot/unstable-amd64-sbuild .

Você pode atualizar esta chroot fonte source:unstable-amd64-sbuild fazendo:

 $ sudo sbuild-update -udcar unstable

Você pode iniciar sessão nesta chroot fonte source:unstable-amd64-sbuild assim:

 $ sudo sbuild-shell unstable
[Dica]Dica

Se o seu sistema de ficheiros chroot fonte tem falta de pacotes como libeatmydata1, ccache, e lintian, para as suas necessidades, você pode querer instalar estes ao iniciar sessão nele.

O ficheiro orig.tar.gz pode precisar de ser enviado para uma revisão Debian diferente de 0 ou 1 sob alguns casos excecionais (ex. para um envio de segurança).

Quando um pacote essencial se torna não-essencial (ex, adduser), você precisa de remove-lo manualmente do ambiente chroot existente para o seu uso pelo piuparts.

Quando você faz o primeiro envio do pacote para o arquivo, você tem de incluir a fonte orig.tar.gz original, também.

Se o número de revisão Debian do pacote for um de 1 ou 0, isto é a predefinição. Caso contrário, você tem de fornecer a opção do dpkg-buildpackage -sa ao comando dpkg-buildpackage.

  • dpkg-buildpackage -sa
  • debuild -sa
  • sbuild
  • Para gbp buildpackage, edite o ficheiro ~/.gbp.conf.
[Dica]Dica

Por outro lado, a opção -sd irá forçar a exclusão da fonte orig.tar.gz original.

[Dica]Dica

Envios de segurança requerem incluir o ficheiro orig.tar.gz.

Se você criou múltiplas entradas no debian/changelog enquanto saltou envios, você tem de criar um ficheiro *_.changes apropriado que inclui todas as alterações desde o último envio. Isto pode ser feito ao especificar a opção do dpkg-buildpackage -v com a última versão enviada, ex., 1.2.

  • dpkg-buildpackage -v1.2
  • debuild -v1.2
  • sbuild --debbuildopts -v1.2
  • Para gbp buildpackage, edite o ficheiro ~/.gbp.conf.

O comando reportbug(1) usado para o relatório de bug de pacote-binário pode ser personalizado pelos ficheiros em usr/share/bug/pacote-binário/.

O comando dh_bugfiles instala estes ficheiros a partir dos ficheiros modelo no directório debian/.

  • debian/pacote-binário.bug-controlusr/share/bug/pacote-binário/control

    • Este ficheiro contém algumas direcções tais como redirecionar o relatório de bug para outro pacote.
  • debian/pacote-binário.bug-presubjusr/share/bug/pacote-binário/presubj

    • Este ficheiro é mostrado ao utilizador pelo comando reportbug.
  • debian/pacote-binário.bug-scriptusr/share/bug/pacote-binário ou usr/share/bug/pacote-binário/script

    • O comando reportbug corre este script para gerar um ficheiro modelo para o relatório de bug.

Veja dh_bugfiles(1) e Funcionalidades do reportbug para Desenvolvedores (README.developers)”

[Dica]Dica

Se você está sempre a lembrar o relatador de bug de algo ou a pergunta sobre a sua situação, use estes ficheiros para o automatizar.