OK, to by były te najważniejsze podstawy dotyczące budowania pakietów. Po takiej części teoretycznej można się zabrać za normalne pakietowanie. Ale najpierw zobaczmy, jak ma się ten pierwszy, przykładowy plik .spec który zacytowałem na początku do wszystkich wytycznych które wymieniałem. Obejrzyjmy go jeszcze raz:
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.

%prep
%setup -q

%build
make CC="gcc $RPM_OPT_FLAGS" LDFLAGS=-s

%install
rm -rf $RPM_BUILD_ROOT
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%post
# add libproc to the cache
/sbin/ldconfig

%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/*
OK, przejrzyjmy to krytycznie. Najpierw preambuła... wygląda normalnie, tyle że w Source: nazwa pakietu jest zaszyta na sztywno - ja bym ją uzależnił od wartości Name:, ale to nic ważnego. Nie ma tutaj wszystkich możliwych do wpisania tagów, ale wystarcza.
Do %description też nie ma się co przyczepić - jest na swoim miejscu.
Sekcja %prep to makro %setup, dodatkowo ,,wyciszone'' opcją -q. Normalka.
Za to w sekcji %build dziwi mnie brak wywołania ./configure - ale najwidoczniej ten program tak może mieć. Przy wywołaniu make ustawiane są od razu zmienne CC i LDFLAGS. Też nic specjalnego.
Sekcja %install najpierw na wszelki wypadek próbuje usunąć stary fake root, potem wywołuje make i przekierowuje instalację za pomocą $DESTDIR. Znowu, wszystko w normie.
O, definicja sekcji %clean. Usunie fake root po zrobieniu pakietu. Nieczęsto widzi się sekcje %clean odbiegające od tego schematu.
Jest nawet sekcja %post, uruchamiająca ldconfig. Pewnie pakiet dodaje jakieś biblioteki do systemu. Nie wiem, czy ldconfig będzie tutaj akurat konieczny, ale nic nie popsuje... /sbin/ldconfig powinien się znajdować w sumie też w PreReq:, ale on należy do glibc więc zawsze powinien być w systemie i nie ma sensu go dodawać siłą do zależności.
I na koniec najciekawsze - sekcja %files. Domyślne atrybuty standardowe, dokopiowanie do dokumentacji paru plików z katalogu ze źródłami, a później błąd - nadawanie bibliotekom w /lib praw do wykonywania. Biblioteki nie potrzebują bitu wykonywalności... no dobra, może to nie jest jakiś straszny błąd, ale po prostu niepotrzebna czynność. Później jeszcze dziwniejsze kwiatki - nadawanie binarkom praw 0555, co oznacza prawo do odczytu i wykonania. Dziwne, odbiera się nawet rootowi prawo zapisu. Dziwne, choć niegroźne - root i tak może wszystko :) Na koniec jeszcze dwa niepotrzebne przypisania bitów 0644 stronom manuala - przecież one i tak by miały takie prawa (poprzez %defattr). Ktoś przesadził pisząc tę sekcję akurat. Niepotrzebne, martwe definicje, poślizg z nadawaniem praw do wykonywania bibliotekom, ogólnie niezbyt ładna sekcja, choć całkowicie funkcjonalna.
Główna wada: nie używa makr, ale jawnych ścieżek (/usr/share/man itp.). Pewnie przez to, że nie użyto ./configure i ścieżki są zaszyte na sztywno w pliku Makefile. Ogólnie plik .spec pewnie by zadziałał, ale nie jest to spec który by można rozpowszechniać w jakiejś dystrybucji.