janeiro 14, 2011

Criando um pacote RPM

Um pacote RPM é como o pacote deb do post anterior, porém utilizado em distribuições como o openSuSE e Mandriva. Neste post vou comentar como criar um pacote deste tipo.

Enquanto os pacotes deb são criados com os binários, o pacote RPM é criado com o código fonte. Na própria execução do comando o código é compilado. Este código tem q estar compactado em tar.bz2

Primeiro, temos que ter instalado o "rpmbuild", segue a linha
urpmi rpm-build

Como no caso do deb, temos que criar um arquivo de configurações, mas para o rpm ele é um pouco mais complexo. O nome dele deve ser terminado com .spec. Chamei o meu de calcula.spec
#
# This file and all modifications and additions to the pristine
# package are under the same license as the package itself.
#

# norootforbuild


Name:           libcalcula
Summary: Ferramenta para calcular alguns numeros
Version: 1.0.2
Release: 0
License: GPL
Group:  Calc
Url:  http://slothsalvation.blogger.com.br
Vendor:  Luiz
Packager: Luiz
#PreReq:
#Provides:
#BuildRequires:
Source:  %{name}-%{version}.tar.bz2
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}
AutoReqProv:    on

%description

Ferramenta para calcular alguns numeros

%prep
%setup
%build
#%make
make -j `/usr/bin/getconf _NPROCESSORS_ONLN`

%install
#makeinstall
make install DESTDIR=%{buildroot}

%clean
#rm -rf %{buildroot}
#rm -rf $RPM_BUILD_ROOT

%post
%postun

%files
%defattr(-,root,root)
#doc ChangeLog README COPYING

#binaries
%{_libdir}/%{name}.so*
%{_libdir}/%{name}.a
%{_libdir}/%{name}.la

%changelog
#* Fri Jan 14 2011 luiz@machine
Aqui fiz uso de algumas macros para caso eu mude algo, não precisar mudar em todo o arquivo, além de ficar mais fácil de entender que nome vai aonde.

Como pode ser visto na Linha do Source, usei o nome do tar como %{name}-%{version}.tar.bz2, que no meu caso seria libcalcula-1.0.2.tar.bz2.

Algo que se deve destacar é com relacao ao comando make, usei "make -j `/usr/bin/getconf _NPROCESSORS_ONLN`" para que seja feita uma busca do número de processadores na máquina, e utilizar todos na compilação.

Agora temos que criar uma estrutura onde os arquivos serão compilados, vou criar eles na pasta temp.
O próprio rpm tem algumas funcionalidades que podemos usar, como no caso esta linha, ela me retorna o caminho do source que o rpm vai usar
export SOURCEDIR=$(rpm --define "_topdir %{_tmppath}/libcalcula" --eval %{_sourcedir})

Agora podemos criar a estrutura de pastas.
mkdir -p $SOURCEDIR
mkdir -p $SOURCEDIR/../SPECS
mkdir -p $SOURCEDIR/../BUILD
mkdir -p $SOURCEDIR/../BUILDROOT
mkdir -p $SOURCEDIR/../RPMS/i586
Devemos entao copiar o arquivo spec para dentro da pasta SPECS
cp calcula.spec $SOURCEDIR/../SPECS

Agora usamos o comando rpmbuild dessa maneira para que ele compile e crie o pacote
rpmbuild --define "_topdir %{_tmppath}/libcalcula" -bb $SOURCEDIR/../SPECS/calcula.spec

Com isso temos o pacote compilado e pronto dentro da pasta
ls $SOURCEDIR/../RPMS/i586

Nenhum comentário:

Postar um comentário