Creating packages for other distributions (Português)

From ArchWiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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), dnfAUR (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