Aprenda como criar pacotes RPM e DEB – Parte I

Troque o seu habitual “make install” pela criação de pacotes RPM e DEB. Se olhar para as distribuições Linux mais conhecidas, verá que quase todas utilizam dois tipos de pacotes: DEB ou RPM. O primeiro vem do mundo Debian e chegou ao Ubuntu e seus derivados, enquanto que o RPM, originalmente criado pela Red Hat, é utilizado no Fedora, Mageia, OpenSUSE, e outros. Ambos os “mundos” compartilham do mesmo princípio: todo arquivo em um sistema deve fazer parte de um pacote, assim, toda a instalação é uma coleção de pacotes binários.
Talvez você (sendo um usuário avançado ou não) já esteja acostumado em compilar programas no Linux à partir do código-fonte, ou apenas queira entregar uma configuração personalizada de arquivos ou aplicativos binários em um determinado caminho. Neste tutorial, descobriremos o que é preciso para criar um pacote DEB ou RPM de forma customizada, bem como ver as vantagens que se tem ao manter tudo em seu sistema utilizando pacotes.
O tutorial será divido em duas partes, pois os pacotes para Debian e Red Hat são diferentes, possuindo portanto, um conjunto diferente de comandos. Como verá adiante, o procedimento é simples e fácil de executar, uma vez que siga os exemplos aqui mostrados.

1 – Qual a aplicabilidade?

Veremos algumas situações comuns onde o empacotamento de seus arquivos pode ser útil. Para começar, geralmente pode faltar em sua distribuição algum pacote que esteja precisando, então você poderá tentar construir do zero (da maneira mais difícil) ou adaptar um pacote semelhante de outra distribuição (geralmente a forma preferida). Nem todo software é open source, deste modo, você poderá empacotar somente um binário do aplicativo ou mesmo um conjunto de arquivos aleatórios e torná-los instaláveis com apenas alguns cliques do mouse. Geralmente isso é necessário para compensar algumas pendências do software proprietário, como os populares navegador Vivaldi ou do aplicativo de VoIP Skype.

2 – Por dentro do RPM

Quando você clica duas vezes sob um arquivo RPM, provavelmente ele será aberto em uma ferramenta de instalação de software, mas você pode executá-lo diretamente pelo terminal. O File Roller ou o Ark abrirá um RPM da mesma forma que abriria um arquivo ZIP. Haverá muito mais no RPM do que apenas uma árvore de diretórios e arquivos, como scripts que permitem executar ações extras com arquivos, para por exemplo corrigir permissões, copia e remoção de arquivos, ou qualquer outra ação customizada no Bash.
Aprenda como criar pacotes RPM e DEB - Parte I
Gerenciador de Arquivos ArkQualquer que seja a arquitetura projetada para um arquivo RPM, seja x86_64, i586 ou noarch, ele é gerado a partir do código-fonte de um RPM, também conhecido como SRPM. Ele contém as fontes do aplicativo desejado e um arquivo de configurações que define todos os comandos e rotinas que você precisará para compilá-lo em um arquivo RPM. Caso precise empacotar novamente uma aplicação proprietária, às vezes será necessário apenas o arquivo spec devidamente escrito, uma vez que ele conseguirá obter os arquivos do aplicativo automaticamente.
Aprenda como criar pacotes RPM e DEB - Parte I

3 – Compilando um arquivo RPM a partir de um RPM fonte

Para os impacientes, o comando é simplesmente este:  rpmbuild /tmp/meupacote-1.0.0-1.src.rpm -rebuild. Outra maneira é instalar o pacote fonte da seguinte maneira:
rpm -i /tmp/meupacote-1.0.0-1.src.rpm
E então informar o arquivo de especificações:
cd ~/rpmbuild/SPECS && rpmbuild -ba meupacote.spec
Tenha em mente que todos os comandos devem ser executados utilizando uma conta de usuário normal e não o root, por razões óbvias de segurança.
Para fazer as coisas funcionarem, você precisará do pacote rpm-build e de todas as bibliotecas de desenvolvimento e compiladores necessários para criar as fontes de sua aplicação. Se estiver compilando algo que já exista nos repositórios do seu sistema, você poderá executar o seguinte comando (de acordo com a sua distribuição):
OpenSUSE:
zypper si -d meupacote
OpenMandriva/Mageia:
urpmi -buildrequires meupacote
Fedora:
yum-builddep meupacote
Como deve ter percebido, o conteúdo do arquivo src.rpm é descompactado no diretório rpmbuild de sua pasta home (~). Este é o caminho padrão onde o “empacotador” RPM reside, juntamente com um conjunto completo de subdiretórios: build, buildroot, rpms, source, specs e srpms.

4 – Escrevendo um arquivo spec

A segunda figura mostra um arquivo de especificação simples, que será compilado em um RPM e conterá dois arquivos: dummy.file e dummy.another.file. Para tudo ficar OK antes de executar o rpmbuild, coloque estes arquivos no diretório %{buildroot}/etc/dummy.
Durante o processo de execução do rpmbuild, poderão aparecer algumas mensagens sobre pequenos problemas, somando uma contagem de erros. Se a contagem ultrapassar determinado número, a compilação poderá falhar. Obviamente é melhor corrigir os problemas em vez de apenas cancelar a contagem de erros encontrados. Caso precise da última opção, use o comando setBadness no seu arquivo spec. Por exemplo, para permitir a construção de um pacote que inclua um arquivo com permissões não autorizadas, adicione a seguinte linha:
setBadness(‘permissions-unauthorized-file’, 0)

5 – Um jeito simples: use o checkinstall

Você pode usar o checkinstall em vez do make install quando estiver criando um aplicativo ou uma biblioteca fonte. O checkinstall funciona no Debian e Red Hat, e poderá solicitar algumas informações (como o nome do pacote, versão, descrição, etc), criando automaticamente o pacote em seguida. A principal vantagem é que você pode manter o seu sistema limpo e em ordem. Caso precise apagar os arquivos, basta remover o pacote com seu gestor de pacotes padrão (yepme, zypper rm, yum remover).
A grande desvantagem é a limitação de recursos. Por exemplo, você não pode incluir scripts de pós-instalação junto com ele, e com isso, o empacotamento de algumas aplicações proprietárias pode não funcionar, pois ele precisa de apoios extras em muitos sistemas.
No entanto, o checkinstall é perfeito para instalações locais ou pequenas tarefas de OEM (Fabricante original do equipamento). Teste o funcionamento e nos conte como foi.
Esta foi a primeira parte do tutorial de como criar pacotes RPM e DEB. A segunda parte será sobre os pacotes DEB.
Espero que tenha gostado. Até a próxima!

Comentários