Tworzenie pakietów RPM

Do tworzenia pakietów RPM służy przełącznik -b polecenia rpmbuild. W niektórych dystrybucjach konieczne jest zainstalowanie odpowiedniej wersji narzędzia (na przykład rpm-build lub rpm-devel), w innych do budowania pakietów służy ten sam program, co do późniejszego zarządzania nimi - rpm.

W przypadku dystrybucji Debian, standardowym formatem pakietów jest DEB. Można jednak zainstalować program rpm i przy jego pomocy tworzyć pakiety RPM, a nawet instalować je. Poniższe przykłady powstały właśnie w ten sposób. Dwa systemy zarządzania pakietami mają jednak rozłączne bazy, instalowanie rpm-ów w Debianie prowadzi więc szybko do bałaganu.

rpmbuild -ba foo-util-1.0.spec

Wszystkie definicje i polecenia, które narzędzie musi wykonać aby zbudować pakiet, zawarte są w pliku .spec.

foo-util-1.0.spec
# spec file for foo-util 1.0
Summary: A utility that do foo
Name: foo-util
Version: 1.0
Release: 1
License: GPL
Group: Application/Misc
Source: project.tgz
Distribution: MyDist
Vendor: bis.org.pl
Packager: Marcin Bis <marcin@bis.org.pl>

%description
The Foo-util is the foo tool doing bar.
Lorem ipsum ...

%prep
%setup
%build
mkdir -p $RPM_BUILD_ROOT
%install
cp -a srv $RPM_BUILD_ROOT/
%files
/srv/target
%clean
rm -rf $RPM_BUILD_ROOT

Pliki, które mają znaleźć się w pakiecie, umieszczamy w archiwum o nazwie wskazanej w dyrektywie Source (liczy się tylko ostatni element ścieżki - nazwa pliku). Po rozpakowaniu archiwum powinien tworzyć się katalog o nazwie <Name-Version>, czyli w naszym przypadku: foo-util-1.0.

mkdir foo-util-1.0
mkdir -p foo-util-1.0/srv/target/usr/bin
cp pipe foo-util-1.0/srv/target/usr/bin
 
tar -czf project.tgz foo-util-1.0

Plik źródłowy (archiwum) umieszczamy w katalogu roboczym narzędzia rpm:

mv project.tgz $HOME/rpmbuild/SOURCES/

W kolejnych sekcjach umieszczonych w pliku należy umieścić skrypty wykonywane podczas budowania pakietu:

  • %prep - czynności niezbędne do przygotowania procesu budowania pakietu (wyczyszczenie poprzednich prób budowania, usunięcie tymczasowych plików, rozpakowanie źródeł, itp.). Z reguły deklaracja wygląda tak:
%prep
%setup

Dyrektywa %setup wykonuje standardowe czynności przygotowawcze podczas budowania pakietu ze źródeł (przede wszystkim rozpakowuje go).

  • %build - polecenia służące do zbudowania programu, w przypadku, gdy pakiet tworzony jest z plików źródłowych korzystających z programu make do zbudowania programu, wystarczą następujące linie:
%build
make
  • %install - polecenia instalujące zbudowany uprzednio program:
%install
make install

Program powinien zostać zainstalowany do podkatalogu głównego katalogu budowania buildroot), określonego w zmiennej RPM_BUILD_ROOT.

  • %files - lista plików, które mają znaleźć się w pakiecie; należy wymienić wszystkie wchodzące w skład

aplikacji (z reguły korzystamy w tym celu z listy plików używanej przez plik Makefile). Wszystkie ścieżki są względem głównego katalogu budowania.

%files
%doc README
/usr/bin/foo-util
/usr/share/man/man1/foo-util.1

Jeżeli zamiast pojedynczych plików, podamy ścieżkę do podkatalogu, zostanie on umieszczony w pakiecie wraz z zawartością (rekurencyjnie).

  • %clean - czyszczenie plików i katalogów po zbudowaniu pakietów.

Zbudowane pakiety trafiają do:

  • $HOME/rpmbuild/RPMS/i386/foo-util-1.0-1.i386.rpm - pakiet z plikami.
  • $HOME/rpmbuild/SRPMS/foo-util-1.0-1.src.rpm - pakiet źródłowy (plik spec oraz archiwum).

Pakiet można zainstalować przy pomocy polecenia:

rpm -i foo-util-1.0-1.i386.rpm

A odinstalować przy pomocy:

rpm -e foo-util-1.0-1.i386.rpm
ostatnio zmienione: 2011/07/17 21:02