Creating packages for other distributions (Português)

From ArchWiki
Status de tradução: Esse artigo é uma tradução de Creating packages for other distributions. Data da última tradução: 2020-04-08. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglês.

Arch é o melhor. Mas você ainda pode querer empacotar para outras distribuições.

Geral

  • Virtualização é uma forma óbvia, mas requer manutenção de sistema(s) adicional(is).
  • Use ferramentas de empacotamento específica de distribuição. Exemplos: dh-makeAUR, dpkg (Debian), rpm-tools (Fedora). Atalhos como dpkg-deb pode ser adequado para tarefas menos complexas.
  • Chroot para criar um sistema base dentro (apesar de separada do) Arch. Por exemplo: debootstrap (Debian), dnf (Fedora). Isso foi adicionado para beneficiar a construção em um ambiente mínimo e limpo.
  • Use chroot com ferramentas de empacotamento de uma forma automatizada. Exemplos: pbuilder-ubuntuAUR (Debian).
  • Uma forma diferente de lidar (possivelmente incompatível) com dependências é com vínculo estático. Por favor, note que a maioria das distribuições não gostam dessa prática.
  • A prática comum se aplica independentemente da distribuição usada. Por exemplo, não compilar pacotes como root.

Debian

Debian Packaging Tutorial explica as bases, descrevendo o uso das seguintes ferramentas:

  • cowdancer — Interface de cópia e escrita para o pbuilder
https://packages.debian.org/sid/cowdancer || cowdancerAUR
  • debootstrap — Uma ferramenta usada para criar um sistema base Debian do zero, sem exibir a disponibilidade de dpkg ou apt.
https://packages.debian.org/sid/debootstrap || debootstrap
  • devscripts — Scripts para facilitara vida de um mantenedor de pacote do Debian
https://packages.debian.org/sid/devscripts || devscriptsAUR
  • dh-autoreconf — Complemento ao Debhelper para chamar autoreconf e limpar após a compilação
https://packages.debian.org/sid/dh-autoreconf || dh-autoreconfAUR
  • dh-make — Ferramenta que converte os arquivos fonte em fonte de pacote do Debian
https://packages.debian.org/sid/dh-make || dh-makeAUR
  • dpkg — O gerenciador de pacotes do Debian
https://packages.debian.org/sid/dpkg || dpkg
  • dput — Ferramenta de envio de pacotes do Debian
https://packages.debian.org/sid/dput || dputAUR
  • equivs — Contorne dependências de pacotes do Debian
https://launchpad.net/ubuntu/+source/equivs || equivsAUR
  • git-buildpackage — Ferramentas do Debian para integrar o sistema de compilação de pacotes com Git
https://honk.sigxcpu.org/piki/projects/git-buildpackage/ || git-buildpackageAUR
  • pbuilder-ubuntu — Ambiente de chroot para compilação de pacotes do Debian
https://launchpad.net/ubuntu/+source/pbuilder || pbuilder-ubuntuAUR
  • quilt — Gerencia uma série de patches mantendo rastro de alterações que cada patch faz
https://savannah.nongnu.org/projects/quilt || quilt

Dicas e truques sobre o Debian

Sobrescrever tratamento de dependências

O dpkg não reconhece as dependências instaladas pelo pacman. Isso significa que dpkg-buildpackage geralmente falhará com erros como:

dpkg-checkbuilddeps: Unmet build dependencies: build-essential:native debhelper (>= 8.0.0)
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting

Para contornar isso, use a opção -d:

$ dpkg-buildpackage -d -us -uc

Você também pode precisar sobrescrever dh_shlibdeps adicionando as seguintes linhas ao debian/rules:

override_dh_shlibdeps:
   dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
Nota: Quaisquer dependências de tempo de execução (e números de versão correspondentes) devem ser adicionadas manualmente ao debian/control, onde ${shlibs:Depends} agora não tem significado.
Atenção: Mesmo se você conseguir compilar um pacote com sucesso desta forma, é fortemente recomendado construir em um ambiente limpo (como o chroot) para prevenir qualquer incompatibilidade.

Configurar um chroot

Veja o How-To do Pbuilder para uma introdução ao pbuilder-ubuntu. O uso de cowdancer, além disso, é recomendado, pois cópia em gravação oferece um benefício de desempenho significativo.

  • debian-archive-keyring, ubuntu-keyring e gnupg1AUR são necessários.
  • eatmydata está disponível como libeatmydata. Para evitar erros de LD_PRELOAD, deve ser instalado dentro e fora do chroot. Como os caminhos são diferentes no Arch e Debian, crie os links simbólicos a seguir:
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so
# ln -s /usr/lib/libeatmydata.so.1.1.1 /usr/lib/libeatmydata/libeatmydata.so.1
$ dpkg-buildpackage -d -us -uc -S

Veja também sobre o Debian

Fedora

Como criar um pacote RPM

  • rpm-tools — Fork do RPM.org, usado na maioria das distros RPM
http://www.rpm.org/ || rpm-tools
  • mock — Pega RPMs fonte e compila RPMs a partir deles em um chroot
https://github.com/rpm-software-management/mock/wiki || mockAUR

Veja também sobre o Fedora

openSUSE

O Open Build Service (OBS) é um sistema genérico para criar e distribuir pacotes de fontes de uma maneira automática, consistente e reproduzível. Suporta pelo menos pacotes .deb, .rpm e Arch.

Criando pacotes do Arch no OBS com OSC

Nota: Para criar, você deve enviar o arquivo PKGBUILD, bem como dos arquivos de origem (carregando ou permitindo que o OBS baixe os arquivos). O OBS usa máquinas virtuais sem suporte de rede e não pode baixar nenhum arquivo.

Criando um pacote

  1. Crie uma conta no [1]
  2. Instale o pacote oscAUR. A documentação upstream está disponível aqui.
  3. Crie um projeto exemplo home:foo.
  4. Crie um subprojeto exemplo home:foo:bar (opcional, mas recomendável).
  5. Crie um novo pacote exemplo ham com osc meta pkg -e home:foo:bar ham. Salve o XML criado e, então, sai.
  6. Mude para um diretório de trabalho limpe e, então, façacheckout do projeto que você acabou de criar: osc co home:foo:bar/ham.
  7. Agora, use cd para ir entrar nele: cd home:foo:bar/ham.

Gerenciando um pacote

Agora é hora de decidir como administraremos nosso projeto. Existem duas maneiras práticas de fazer isso:

  1. Manter um PKGBUILD mais seus arquivos auxiliares (como scripts *.install) em um sistema de controle de versão (como git, hg) e faça o OBS rastreá-lo;
  2. Manter um pacote inteiramente no próprio OBS.

A primeira versão é mais flexível e dinâmica. Para prosseguir:

  • A partir do diretório do seu projeto, crie um arquivo _service com o seguinte conteúdo:
<services>
  <service name="tar_scm">
    <param name="scm">git</param>
    <param name="url">git://<seu_repo_aqui></param>
    <param name="versionformat">git%cd~%h</param>
    <param name="versionprefix"><sua_versão_aqui></param>
    <param name="filename"><nome_do_seu_pacote></param>
  </service>
  <service name="recompress">
    <param name="file">*.tar</param>
    <param name="compression">xz</param>
  </service>
  <service name="set_version"/>
</services>

Aqui está um exemplo para gimp-gitAUR:

<services>
  <service name="tar_scm">
    <param name="scm">git</param>
    <param name="url">git://git.gnome.org/gimp.git</param>
    <param name="versionformat">git%cd~%h</param>
    <param name="versionprefix">2.9.1</param>
    <param name="filename">gimp-git</param>
  </service>
  <service name="recompress">
    <param name="file">*.tar</param>
    <param name="compression">xz</param>
  </service>
  <service name="set_version"/>
</services>
  • Faça o OBS rastreá-lo: osc add _service
  • Se você tiver outros arquivos para incluir no repositório, apenas continue como antes: adicione os arquivos no diretório do projeto e faça a OBS rastreá-los (o OBS usa o subversion como seu SCM subjacente, portanto, esse processo pode já ser familiar para você)
  • Faça check-in (=upload) seus arquivos no repo osc ci -m "mensagem de commit (p.ex., atualiza pacote xxx para versão yyy".

Agora, após um tempo, OBS vai começar a compilar seu pacote.

Dicas e truques sobre o openSUSE

  • Para ver o progresso da compilação do seu pacote, faça cd para seu diretório de trabalho, então: osc results.
  • Há três repositórios, Arch:Core, Arch:Extra e Arch:Community. [community] pode ser anexado como um "caminho de repositório" após adicionar o repositório principal do Arch ao projeto.

Programa com o pacote ca-certificates-utils

Se a criação do OBS falhar por causa do pacote ca-certificates-utils, você poderá adicionar essa linha à configuração do seu projeto (na página do projeto, vá para Advanced -> Project Config).

Prefer: ca-certificates-utils ca-certificates

Veja também sobre o openSUSE

Veja também