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. Upload orig.tar.xz
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).

When a new upstream release tarball debhello-newvwesion.tar.xz is released, the Debian source package can be updated by invoking commands in the old source tree as:

[debhello-0.0] $ uscan
 ... debhello-newversion.tar.xz downloaded
[debhello-0.0] $ uupdate -v newversion ../debhello-newversion.tar.xz
  • O ficheiro debian/watch na árvore fonte antiga tem de ser um válido.
  • This make symlink ../debhello_newvwesion.orig.tar.xz pointing to ../debhello-newvwesion.tar.xz.
  • Files are extracted from ../debhello-newvwesion.tar.xz to ../debhello-newversion/
  • Files are copied from ../debhello-oldversion/debian/ to ../debhello-newvesion/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:

    [debhello-0.0] $ dquilt push -a
    [debhello-0.0] $ dquilt new bugname.patch
    [debhello-0.0] $ dquilt add buggy_file
    [debhello-0.0] $ vim buggy_file
      ...
    [debhello-0.0] $ dquilt refresh
    [debhello-0.0] $ dquilt header -e
    [debhello-0.0] $ 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.

    [debhello-0.0] $ uscan; uupdate  # updating to the new upstream release
    [debhello-0.0] $ while dquilt push; do dquilt refresh ; done
    [debhello-0.0] $ 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:

[debhello-0.0] $ 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.7, “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.

The orig.tar.xz file may need to be uploaded for a Debian revision other than 0 or 1 under some exceptional cases (e.g., for a security upload).

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.

When you first upload the package to the archive, you need to include the original orig.tar.xz source, too.

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 --debbuildopts=-sa
  • gbp buildpackage -sa
[Dica]Dica

On the other hand, the -sd option will force the exclusion of the original orig.tar.xz source.

[Dica]Dica

Security uploads require including the orig.tar.xz file.

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
  • gbp buildpackage -v1.2

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.