Creating packages for other distributions (Portuguê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
- debootstrap — Uma ferramenta usada para criar um sistema base Debian do zero, sem exibir a disponibilidade de dpkg ou apt.
- devscripts — Scripts para facilitara vida de um mantenedor de pacote do Debian
- dh-autoreconf — Complemento ao Debhelper para chamar autoreconf e limpar após a compilação
- dh-make — Ferramenta que converte os arquivos fonte em fonte de pacote do Debian
- dpkg — O gerenciador de pacotes do Debian
- dput — Ferramenta de envio de pacotes do Debian
- equivs — Contorne dependências de pacotes do Debian
- https://launchpad.net/ubuntu/+source/equivs || equivsAUR[link quebrado: package not found]
- git-buildpackage — Ferramentas do Debian para integrar o sistema de compilação de pacotes com Git
- pbuilder-ubuntu — Ambiente de chroot para compilação de pacotes do Debian
- quilt — Gerencia uma série de patches mantendo rastro de alterações que cada patch faz
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
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.
- 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
Fedora
- rpm-tools — Fork do RPM.org, usado na maioria das distros RPM
- mock — Pega RPMs fonte e compila RPMs a partir deles em um chroot
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
Criando um pacote
- Crie uma conta no [1]
- Instale o pacote oscAUR. A documentação upstream está disponível aqui.
- Crie um projeto exemplo
home:foo
. - Crie um subprojeto exemplo
home:foo:bar
(opcional, mas recomendável). - Crie um novo pacote exemplo
ham
comosc meta pkg -e home:foo:bar ham
. Salve o XML criado e, então, sai. - 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
. - 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:
- 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;
- 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