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

Let’s explore more fundamentals of Debian packaging.

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”.

You should address the root cause of the Debian packaging problem in the least invasive way possible. This approach will make the generated package more robust for future upgrades.

[Nota]Nota

If the patch addressing the root cause is useful to the upstream project, send it to the upstream maintainer.

Flexible customization of the Secção 6.5, “Ficheiro debian/rules is achieved by adding appropriate override_dh_* targets and their rules.

When a special operation is required for a certain dh_foo command invoked by the dh command, its automatic execution can be overridden by adding the makefile target override_dh_foo in the debian/rules file.

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.

In this case, you should add the override_dh_auto_build target with dh_auto_build -- arguments. This ensures that arguments are passed to the build system after the default parameters that dh_auto_build usually passes.

[Dica]Dica

Avoid executing bare build system commands directly if they are supported by the dh_auto_build command.

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).

For example, you can add an extra option to CONFIGURE_FLAGS for linux-any target architectures by adding the following to 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.