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

# Creating packages for other distributions (Português)

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

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

  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

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