Creating packages for other distributions (Português)

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

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.

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), (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: (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:

  • dh-autoreconf Complemento ao Debhelper para chamar autoreconf e limpar após a compilação
https://packages.debian.org/sid/dh-autoreconf || dh-autoreconfAUR
  • dpkg O gerenciador de pacotes do Debian
https://packages.debian.org/sid/dpkg || dpkg

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 :

$ dpkg-buildpackage -d -us -uc

Você também pode precisar sobrescrever adicionando as seguintes linhas ao :

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.

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.

  • , e são necessários.
  • eatmydata está disponível como . Para evitar erros de , 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

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
  2. Instale o pacote oscAUR. A documentação upstream está disponível aqui.
  3. Crie um projeto exemplo .
  4. Crie um subprojeto exemplo (opcional, mas recomendável).
  5. Crie um novo pacote exemplo com . 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: .
  7. Agora, use cd para ir entrar nele: .

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 com o seguinte conteúdo:

Aqui está um exemplo para :

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

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: .
  • 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

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.