Criando pacotes RPM para o Fedora
RPM é um tipo de pacote e um gerenciador de pacotes que permite o fácil manuseio de softwares em determinadas distribuições Linux. Os arquivos RPM são, na verdade, meta pacotes que contém diversas informações úteis ao sistema como versão, releases, arquitetura, websites, descrições e dependências. Os arquivos RPM também são compactados via cpio e podem ser criptografados ou assinados de modo a garantir a autenticidade dos softwares.
Um RPM contém todos os arquivos, pastas, links e scripts utilizados na instalação dos softwares. A grosso modo, o que ele faz é colar sobre a árvore de diretórios já existente no sistema uma nova árvore contendo os componentes do software a ser instalado. De fato, dentro de um RPM hipotético teríamos as pastas /etc, /bin /usr/lib contendo somente o arquivos do novo software e essas pastas são coladas sobre as pastas já existentes no sistema. O resultado é que as pastas do sistema, caso não existam, são criadas e caso já existam são mantidas, apenas acrescentando-se os arquivos do novo software. Cada detalhe do novo software instalado é armazenado num banco de dados SQLite localizado em /var/lib/rpm e isso significa que será possível uma completa desinstalação, sem deixar rastros ou "sujeiras".
Tabela de conteúdo |
O que é preciso para montar um RPM?
Basicamente, um RPM é feito a partir do código fonte do programa que se deseja empacoter, então, essa é a primeira coisa que você precisa ter em mente: "qual programa desejo empacotar?". Adquira o código fonte do programa baixando-o do upstream. Depois disso é preciso criar o ambiente de desenvolvimento de RPMs, que veremos logo adiante no capítulo 3 e escrever o arquivo .spec, que conterá todas as especificações do futuro pacote RPM.
RPMs são feitos a partir do código fonte?
Sim. Na verdade o processo de criação de um RPM consiste de uma grande quantidade de macros inteligentes que são capazes de, sozinhas, realizar quase todos os passos de um procoesso de recompilação e instalação.
Quando você baixa um software a partir do código fonte e o instala, geralmente os passos seguidos são os seguintes:
- Descompactar o código fonte:
$ tar -zxvf nome_do_pacote.tar.gz
- Entrar na pasta criada pela descompactação:
$ cd nome_do_pacote/
- Verificar se seu sistema tem todos os requisitos para compilação e instalação a partir do código fonte:
$ ./configure
$ make
- E, enfim, instalá-lo:
# make install
A criação de um RPM faz a mesma coisa, mas instala o software em uma árvore de diretórios fake (fake root), executando todos os passos (descompactação, verificação, compilação e instalação) de forma automática, depois empacota tudo e gera o RPM.
RPMs ao estilo Fedora/Red Hat
A política de construção de RPMs para os padrões Fedora/Red Hat são bastante rigorosas e substancialmente diferentes dos padrões usados pelas outras distribuições. Se você está começando agora a entender como funciona um pacote RPM ou se está pretendendo empacotar um software já existente em outra distribuição, talvez um arquivo .spec de outra distro seja um bom ponto de partida mas, certamente, não será a solução desejada para o seu Fedora/Red Hat. O seu Fedora/Red Hat, por padrão, faz um melhor uso das macros e procura sempre o código mais limpo e elegante na hora de criar os .spec.
Veja uma comparação entre os arquivos .spec do Mandriva e do Fedora e compare a economia de códigos.
Preparando o ambiente de desenvolvimento
A regra de ouro na criação de RPMs é não crie RPMs como root. RPMs criados como root apresentam brechas de segurança potenciais, por isso, use sempre usuários sem privilégio durante o desenvolvimento. Fica a seu cargo criar um usuário especialmente para construir RPMs ou usar o seu próprio.
Se você tiver muito espaço em seu HD, instale todos os pacotes de desenvolvimento:
# yum groupinstall "Development Tools"
E depois instale as ferramentas de construção de RPM.
# yum install rpmdevtools
Depois de tudo instalado é preciso configurar os diretórios específicos prara criação de RPMs. Isso pode ser feito de duas maneiras:
- Através da ferramenta provida pelo rpmdevtools:
$ rpmdev-setuptree
- Ou manualmente:
$ mkdir -p rpmbuild/{SRPMS,RPMS,SPECS,BUILD,SOURCES}
$ echo "%_topdir %(echo $HOME)/rpmbuild" > .rpmmacros
A árvore de desenvolvimento contém, no seu nível mais alto, o diretório ~/rpmbuild, onde se encontram os diretórios SRPMS,RPMS,SPECS,BUILD,SOURCES para manipulação e criação de RPMs. Cada um desses diretórios tem uma função específica, a saber:
- SRPMS - Nesse diretório serão gravados os RPMs fonte de tudo o que você gerar em seu ambiente de desenvolvimento. Os RPMs Fonte contém uma tarball com o código fonte do software a ser empacotado, o arquivo .spec e quaisquer outros componentes adicionais como patches e arquivos .desktop.
- RPMS - Nesse diretório serão gravados os RPMs gerados durante o processo, separados em pastas que representam as arquiteturas dos processadores alvo.
- SPECS - Diretório onde devem ficar os arquivos de especificação do RPM. É conveniente trabalhar com os arquivos .spec diretamente nesse diretório para facilitar os testes.
- BUILD - O usuário dificilmente terá contato direto com esse diretórios. Esse é o diretório de trabalho onde as especificações do arquivo .spec serão aplicadas. Aqui é onde o tarball é descompactado e onde as modificações necessárias são feitas antes da instalação propriamente dita. Tudo isso é automático.
- SOURCES - Local onde devem ficar as tarballs contendo o código fonte do software a ser empacotado. Também é onde, usualmente, ficam os patches ou quaisquer outros componentes externos do processo de compilação.