Creating packages for other distributions (Português) - ArchWiki

# Creating packages for other distributions (Português)

From ArchWiki
Jump to navigation Jump to search
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.

Artigos relacionados

- Criando pacotes

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

  http://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

- Exemplo de pbuilderrc
- Para criar um pacote fonte para o pbuilder lidar:

    $ dpkg-buildpackage -d -us -uc -S

### Veja também sobre o Debian

- Política do Debian
- Novo Guia do Mantenedor
- Quilt no empacotamento do 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

- Copr

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

- Repo exemplo: cpu-x-git
- Diretrizes de empacotamentos do openSUSE
- Portal:Packaging do wiki do openSUSE

## Veja também

- BBS - PKGBUILD equivalentes para outras distros
- BBS - Discussão original

Category:

- Package development (Português)