Przykładowy plik .spec
| Objaśnienie sekcji
|
Name: procps
Version: 3.1.7
Release: 1
Summary: System and process monitoring utilities
License: LGPL, GPL, BSD-like
Group: Applications/System
Packager: <procps-feedback@lists.sf.net>
Source: http://procps.sf.net/procps-%{version}.tar.gz
URL: http://procps.sf.net/
BuildRoot: %{_tmppath}/procps-root
%description
The procps package contains a set of system utilities
which provide system information. Procps includes ps,
free, sysctl, skill, snice, tload, top, uptime, vmstat,
w, and watch. You need some of these.
| Preambuła podaje informacje o pakiecie. Składa się z szeregu
jednolinijkowych pól, oraz dłuższego opisu rozpoczętego obowiązkową
dyrektywą %description. Część pól jest fakultatywna (np.
Packager:), inne, jak np. Name:, są obowiązkowe. Część
tych pól (jak np. Packager: można zdefiniować np. w pliku
~/.rpmmacros - ale definicje w specu mają zwykle pierwszeństwo.
Preambuła może (w nieco zmienionej postaci) wystąpić kilkukrotnie w pliku
.spec, w połączeniu ze zwielokrotnionymi sekcjami %files
- pozwala to na tworzenie z jednego speca kilku różnych pakietów (np.
*-libs, *-static, *-devel itp.).
|
%prep
%setup -q
| Sekcja rozpoczęta linią %prep służy przygotowaniu źródeł do
konfiguracji i kompilacji. Zwykle używa się tu po prostu makra
%setup, które weźmie pakiet ze źródłami i rozpakuje go do katalogu
przeznaczonego na kompilację. A wszystkie te dane (plik ze źródłami, katalog
docelowy) zawarte są albo w preambule, albo w plikach konfiguracyjnych RPM.
W sekcji %prep dokonuje się także nakładania patchy na rozpakowane
źródła (za pomocą makra %patch). Tutaj też często wywołuje się
popularne ./configure i nawet istnieje do tego celu specjalne makro
%configure (czego by się można spodziewać) - generalnie robi się
tutaj wszystko to, co musi nastąpić przed samą kompilacją, przed wywołaniem
,,make''.
|
%build
make CC="gcc $RPM_OPT_FLAGS" LDFLAGS=-s
| Sekcja %build odpowiada za kompilację pakietu. Zwykle wywołuje
się tutaj tylko ,,make'' z odpowiednimi w danej sytuacji parametrami. Oprócz
makr można w plikach .spec posługiwać się zwykłymi poleceniami
shella (sekcje pliku .spec są parsowane trochę jak skrypty
shellowe), tak że można umieszczać tutaj polecenia tak, jakby się je
wpisywało w linii poleceń. Co widać w tym tutaj wywołaniu ,,make'',
redefiniującym sobie własne ustawienia zmiennych $CC i $LDFLAGS.
|
%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install
| Sekcja %install odpowiada za zainstalowanie skompilowanych
plików. Jednak pliki nie są instalowane w /, ale w pustym katalogu
$RPM_BUILD_ROOT (co zwykle oznacza jakiś katalog w obrębie
/var/tmp. A więc ważne tutaj jest, by proces instalacji pozwolił
się dać ,,przekierować'' do jakiegoś katalogu (zwanego zwyczajowo ,,fake
root''). Większość plików Makefile pozwala na to za pośrednictwem zmiennej
$DESTDIR, ale niektóre używają innych metod, lub nie posiadają takiej
możliwości. W najgorszym wypadku trzeba będzie poprawić Makefile programu
aby zbudować pakiet rpm.
|
%clean
rm -rf $RPM_BUILD_ROOT
| Sekcja %clean nie jest wprawdzie obowiązkowa, ale jej zadaniem
jest zwykle usunięcie zawartości ,,fake root''. Ja lubię dodawać tutaj od
razu usuwanie rozpakowanych źródeł, ale to tylko kwestia moich
przyzwyczajeń. Ot, takie udogodnienie które wysprząta poligon po budowie
pakietu.
|
%post
# add libproc to the cache
/sbin/ldconfig
| Sekcja %post jest jedną z czterech sekcji, które nie są
wykonywane przy budowie pakietu, ale później, przy jego instalacji/usuwaniu.
Istnieją sekcje %post, %pre, %postun, %preun które mogą wykonywać
różne czynności odpowiednio po instalacji plików, przed instalacją plików
oraz po odinstalowaniu i przed odinstalowaniem. Np. po instalacji pakietów
zawierających biblioteki warto uruchomić ldconfig - ale trzeba to zrobić po
tym, jak pliki zostaną umieszczone gdzie trzeba - dlatego też jest to
robione w sekcji %post. Podobnie można by to robić po
odinstalowaniu pakietu, w sekcji %postun. Sekcje %pre* też
znajdują swoje zastosowanie, gdy trzeba wykonać jakąś ostatnią akcję przy
odinstalowywaniu a jest do tego jeszcze potrzebny rzeczony pakiet (np.
przywrócenie starego bootsektora przy odinstalowywaniu lilo)
|
%files
%defattr(0644,root,root,755)
%doc NEWS BUGS TODO COPYING COPYING.LIB README
%attr(555,root,root) /lib/libproc.so*
%attr(555,root,root) /bin/*
%attr(555,root,root) /sbin/*
%attr(555,root,root) /usr/bin/*
%attr(0644,root,root) /usr/share/man/man1/*
%attr(0644,root,root) /usr/share/man/man8/*
| %files to druga obok preambuły sekcja która może wystąpić
wielokrotnie. Ta sekcja odpowiada za oznaczenie plików które mają być
umieszczone w wynikowym pakiecie, dodatkowo określane są domyślne prawa
dostępu do plików i inne opcje które nie zostały jednak wykorzystane w tym
przykładowym pliku :) Pliki które są tutaj ,,wybierane'' będą wzięte
z ,,fake root'', więc muszą tam zostać umieszczone przez działania z sekcji
%install |