rpm-programmet finder automatisk ud af, hvilke dynamiske libraries en pakke behøver, og hvilke biblioteker en pakke eventuelt stiller til rådighed for andre. Så det behøver man ikke bekymre sig om, og det er jo heldigvis de fleste af den slags afhængigheder.
Hvis en pakke indeholder scripts som skal fortolkes (f.eks. Perl-programmer, eller Tcl/Tk scripts), vil rpm-programmet også automatisk opdage det, og notere i pakken at den pågældende fortolker er nødvendig.
Men ud over det, så er der to tags: Provides og Requires som man bruger til at fortælle hvilke pakker et program stiller til rådighed eller kræver.
Et eksempel på dette er sammenhængen mellem fetchmail programmet og sendmail. fetchmail fungerer ved at hente post fra en mail-server, og så aflevere det til den lokale smtp-dæmon, almindeligvis sendmail. D.v.s. for at kunne bruge fetchmail, er man nødt til at have sendmail installeret også. Dette gøres i spec-filerne for de to pakker, ved at have linien
Provides: smtpdaemon
i sendmail's spec-fil, og den tilsvarende
Requires: smtpdaemon
i fetchmail's spec-fil. Ordet "smtpdaemon" er tilfældig valgt - det kunne være hvad som helst - men det giver selvfølgelig mening at beskrive den service som sendmail stiller til rådighed som en "smtp dæmon".
Man kan også kræve, at det ikke bare er en bestemt pakke, der er installeret, men en bestemt version. F.eks. kræver util-linux pakken i RedHat 5.1's en bestemt version af pam pakken, som er en "authentication" pakke (bruges bl.a. til at verificere et login). pam-pakken skal være mindst version 0.59, så i util-linux spec-filen står der:
Requires: pam >= 0.59
Det kontrolleres selvfølgelig også via spec-filen. Man skal ikke til at lave flere spec-filer med samme source - i stedet er der en udvidet syntaks i spec filen, så man kan fortælle rpm-programmet hvilke binære rpm-pakker der skal dannes, og hvordan filerne skal fordeles imellem dem.
Et eksempel er glibc spec-filen. Den starter på normal vis (jeg har klippet lidt):
Summary: GNU libc
Name: glibc
Version: 2.0.7
%description
Contains the standard libraries that are used
by multiple programs on
the system.
men så kommer der noget nyt: Det beskriver glibc-devel pakken:
%package devel
Summary: Additional libraries required to compile
Group: Development/Libraries/Libc
Requires: kernel-headers
%description devel
To develop programs which use the standard C
libraries (which nearly all
programs do), the system needs to have these
standard header files and object
files available for creating the executables.
Det starter med en %package devel linie - det betyder, at
de efterfølgende tags beskriver en ny, binær rpm-pakke, som
hedder det samme som "hoved-pakken", men med "-devel" tilføjet.
Man kan skrive værdier for alle tags i forbindelse med %package -
f.eks. har glibc og glibc-devel forskellig værdi af "Group:" tag'en,
og glibc-devel har andre requirements end hoved-pakken.
Sådan en ekstra pakke skal selvfølgelig også have nogle filer, og her bruger man samme udvidede syntaks som med %description. F.eks. nogle filer i glibc-devel pakken:
%files devel
/usr/lib/libc.a
/usr/lib/libcrti.o
Det kan man godt - hvis ellers spec-filen indeholder oversættelser til det sprog, man ønsker. Hvis du har RedHat 5.1 installeret, kan du f.eks. få beskrivelser af alle rpm-pakkerne på flydende tysk - prøv
LANGUAGE=de rpm -qi mount
I spec filen ser det således ud:
Name: mount
Summary: Programs for mounting and unmounting
filesystems
Summary(de): Programme zum Montieren und Abmontieren
von Dateisystemen
%description
Mount is used for adding new filesystems, both
local and networked, to
your current directory structure.
%description -l de
Mount wird zum Hinzufügen neuer Dateisysteme
(lokal und im Netzwerk)
zu Ihrer aktuellen Verzeichnisstruktur verwendet.
Syntaksen skulle være til at forstå - man skal blot kende
sprog-koden, som er en eller anden ISO standard kode. Dansk hedder
da og svensk se, men desværre er der ikke dansk/svenske
oversættelser med i RedHat's pakker - endnu!