quarta-feira, 17 de agosto de 2011

Criando seu RPM: Parte 1

Vou começar nesse post uma série de artigos mostrando, de forma prática, sem muito aprofundamento, como criar seu RPM. O processo não é muito díficil, o que acontece é que a maioria dos guias existentes que falam do assunto se destinam a empacotadores de distribuições, que precisam de um conhecimento mais profundo. Como você está começando, o melhor é conhecer o básico, antes de escolher se vai se aprofundar no assunto ou não.


Mas o que é um RPM? De acordo com a Wikipedia:




RPM, originalmente abreviatura de Red Hat Package Manager, e atualmente um acrónimo recursivo de RPM Package Manager (“Gerenciador de Pacotes RPM”) é um sistema de gerenciamento de pacotes de software, assim como o formato de arquivo usado por esse sistema.



O que isso quer dizer? Basicamente, que o RPM é o gerenciador de pacotes de distros como o Red Hat Enterprise Linux e o Fedora e também é o formato de arquivo suportado por esse gerenciador. Como dito no primeiro parágrafo, vamos nos focar no pacote RPM em si, na sua criação.


A primeira coisa a se conhecer para criar um RPM é o arquivo .spec. Esse arquivo deve conter todas as informações relativas a criação do pacote, ou seja, ele é a espinha dorsal do seu RPM. Nele deverão constar o nome do programa, a versão, as dependências, as dependências da compilação (se ele precisar ser compilado), as instruções de compilação, instalação e tudo mais. Aí vai um exemplo do arquivo spec que eu criei quando empacotei o gkt3-unico-engine:



Summary: Unico GTK3 Engine

Name: gtk3-unico-engine

Version: 0.1.0+r69

Release: 1%{?dist}

License: LGPL3

Group: System Environment/Libraries

URL: https://launchpad.net/unico

Source: gtk3-engines-unico_0.1.0+r69.orig.tar.gz

BuildRequires: gtk3-devel, cairo-devel, glib2-devel

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)


%description

Unico is a GTK3 theme engine.


%prep

%setup -q -n unico-%{version}


%build

%configure

make %{?_smp_mflags}


%install

rm -rf $RPM_BUILD_ROOT

make install DESTDIR=$RPM_BUILD_ROOT


#remove .la files

find $RPM_BUILD_ROOT -name *.la | xargs rm -f || true


%clean

rm -rf $RPM_BUILD_ROOT


%files

%defattr(-,root,root,-)

%doc AUTHORS ChangeLog NEWS COPYING README TODO

%{_libdir}/gtk-3.0/*/theming-engines/*


%changelog

Mas, como começar nesse complicado meio de empacotamento? Muitos guias recomendam que você crie logo de cara seu arquivo SPEC e faça tudo sozinho. Na minha visão, isso afasta um pouco as pessoas que estão chegando. O caminho que eu tomei para aprender a criar os pacotes foi o da observação: baixando os pacotes src.rpm de alguns programas e analisando, estudando, tentando entender o que estava sendo feito naquele SPEC. Tentar reempacotar um RPM já criado anteriormente também pode ser uma boa aprendizagem antes de você tentar criar o seu pacote.


Para montar a estrutura, você precisará do pacote rpmdevtools, então:


su -c "yum install rpmdevtools"


Antes de montar a estrutura, aí vai uma dica básica: nunca utilize o seu usuário padrão para criar os pacotes RPM. Crie um usuário novo no sistema apenas dedicado a essa tarefa. Isso irá ajudar no caso de você fazer alguma besteira e detonar aquela conta. #FikDik


Dado o conselho, vamos criar a estrutura de diretórios para criação do RPM:


rpmdev-setuptree


Esse comando irá criar a pasta "rpmbuild" em sua pasta pessoal, e dentro dela estarão todas as pastas necessárias para a criação do RPM. Vamos explicá-las:




  • RPMS: Nessa pasta ficarão os RPMS que serão criados, separados por arquitetura da sua distro. Falaremos disso mais adiante;

  • SRPMS: Nessa pasta ficarão os arquivos source dos RPMs criados, os src.rpm;

  • SOURCES: Aqui deve ficar o código fonte do pacote que você está criando;

  • SPECS: Já nessa pasta ficará o arquivo SPEC do seu RPM;

  • BUILD: É o diretório de compilação;

  • BUILDROOT: Onde acontece a compilação.


Entre todos esses diretórios, nós só mexeremos no SPECS e no SOURCES. Conforme eu disse, o melhor a se fazer na hora de começar é recriar um RPM bem fácil. Vou usar como exemplo o Gtk3-Unico-Engine, você pode dar uma olhada no repositório aqui.


Nessa primeira parte, você foi apresentado ao mundo dos RPMs, conheceu um arquivo SPEC e montou a estrutura de pastas necessária para a criação de um RPM. No próximo artigo nos iremos nos aprofundar um pouco mais nos arquivos SPEC. Até a próxima semana.

Nenhum comentário:

Postar um comentário