Empacotamento RPM básico

Empacotamento RPM

editar

RPM pode significar a abreviatura de Red Hat Package Manager ou RPM Package Manager. É um sistema de gerenciamento de pacotes de software que é utilizado em todas as distribuições Red Hat(Fedora,Centos) e SUSE(OpenSuse). Este pode ser utilizado para instalar e desinstalar, atualizar, e criar pacotes.

Instalação das dependências de empacotamento

editar

Para manipulação de pacotes RPM é recomendado que se utilize um ambiente que seja tão “limpo” quanto possível. Para tal, recomenda-se a utilização de alguma forma de virtualização.

CentOS

$ yum groupinstall "Development Tools"

Fedora

$ yum install @development-tools
$ yum install fedora-packager

Inicialização do processo de empacotamento

editar

A seguinte linha de comando cria a estrutura de diretórios rpm-build para organização dos arquivos de configuração a serem utilizados no empacotamento.

$ rpmdev-setuptree

/home/myuser/rpmbuild/

|-- BUILD
|-- RPMS
|-- SOURCES
|-- SPECS
|-- SRPMS

Diretório BUILD: Diretório onde serão compilados os arquivos durante o processo de `build` do pacote.

Diretório RPMS: Neste diretório serão mantidos os pacotes RPM gerados;

Diretório SOURCES: Neste diretório estarão todos os arquivos fonte compactados e patches a serem utilizados. É nesse diretório que estes arquivos serão buscados quando o comando `rpmbuild` for executado;

Diretório SPECS: Neste diretório serão mantidos os arquivos SPEC, arquivos de configuração utilizados durante o processo de build;

Diretório SRPMS: Neste diretório serão mantidos os arquivos SRPM(Source RPM).Um arquivo SRPM é um arquivo criado a partir da junção de um Tarball com um arquivo SPEC. O rpm permite que seja possível gerar um SRPM ao invés de um binário RPM.


Geração de arquivo SPEC

editar
$ rpmdev-newspec
  ou
$ rpmbuild -ba package_name.spec

Uma vez definida a estrutura de diretórios principal, é necessário gerar um arquivo SPEC do pacote. Este é o arquivo chave para empacotamento RPM, nele serão definidas todas as configurações e parâmetros a serem utilizados no processo de empacotamento. Resumidamente, o arquivo SPEC pode ser interpretado como uma receita que diz ao `rpmbuild` as instruções que definem o processo de construção do pacote. Um pacote RPM será o resultado da operação de aplicação das configurações de um arquivo SPEC sobre um tarball.

Os arquivos SPEC são divididos em duas partes principais: Preamble e body;

Preamble

editar

Metadados dos pacotes que representam tags em geral;

Name: Nome do pacote, este deve coincidir com o nome do arquivo SPEC;

Version: A versão mais atual deste pacote de software;

Release: Versionamento geralmente utilizado para definir diferentes pacotes quando o programa foi pouco ou não foi modificado.

Summary: Um breve resumo a respeito do pacote;

License: Licença a ser utilizada; (e.g: GPL-2,GPL-3, ...)

URL: Caminho completo para informações importantes sobre o software sendo empacotado. Em geral é uma boa prática colocar a URL para o repositório com a versão mais atual e estável do software;

Source0: Caminho ou URL para o arquivo fonte do projeto. Pode-se utilizar a sintaxe de macros para tal. e.g. :%{name}-%{version}.tar.gz

Patch0: Nome do primeiro patch a ser aplicado sobre o código fonte. Caso necessário adicionar mais patches pode-se criar diretivas com o número em sequência crescente. e.g. :Patch1,patch2.

BuildRequires: Lista de pacotes, separados por vírgulas ou espaços, que indicam as dependências necessárias ao processo de build do pacote.

Requires: Lista de pacotes, separados por vírgulas ou espaços, que indicam as dependências necessárias para que o pacote seja executado uma vez que já foi instalado.


Diretivas SPEC, que são seções representativas de cada etapa do empacotamento;

%description: Descrição completa do software empacotado;

%prep: Série de comandos a serem executados com o objetivo de preparar as condições necessárias ao processo de build;

%build: Série de comandos onde será efetivamente executado o processo de build do pacote(Compilação principal do pacote);

%install: Série de comandos para efetivamente realizar a instalação do pacote, e criar seus arquivos nos diretórios corretos;

%check: Série de comandos de teste do software;

%files: Descreve uma lista dos arquivos que serão instalados;

%changelog: Registro das mudanças ocorridas entre releases e versões dos pacotes;


Preparar arquivos fonte (tarball)

editar

1 - Clonar repositório do projeto ou os arquivos fontes já compactados no formato .tar.

2 - Caso seja um repositório Git, é importante gerar uma tag para o projeto para em seguida gerar o tarball vinculado àquela versão específica do software:

$ git tag <versão>
$ git archive --format=tar.gz --prefix=<nome-do-programa>-<versão>/ <nome-da-tag> > <nome-do-programa>-<versão>.tar.gz

Uma vez gerados os arquivos fonte, estes devem ser colocados no diretório /SOURCES, onde este arquivo será procurado durante o processo de build.

Buildar o pacote

editar
rpmbuild -ba package_name.spec

Após o processo de build o pacote será gerado e movido para o diretório /RPMS.


Referências:

editar

RPM Packaging Guide. disponível em http://rpm-guide.readthedocs.io/en/latest/rpm-guide.html. Acessado em 09/04/2017 às 10:00;

RPM: O pacote mais rápido que você fará na vida. Criado por David Carlos. Contato: ddavidcarlos1392@gmail.com, davidcarlos.github.io;