RPM może być wykorzystywany do tworzenia pakietów
dla Intel i386, Digital Alpha pracujących pod Linux,
oraz Sparc. Są też doniesienia o jego wykorzystaniu
na platformach SGI i HP.
RPM ma parę cech które czynią tworzenie pakietów na
wiele platform prostszymi.
Pierwszą z nich jest dyrektywa ``optflags''
w pliku /etc/rpmrc
.
Może ona być wykorzystana do ustawienia odpowiednich
opcji i flag, specyficznych dla architektury,
potrzebnych do kompilacji bądź instalacji.
Następną cechą ułatwiającą tworzenie pakietów na wiele
platform są makra ``arch'' w pliku specyfikującym.
Mogą one być wykorzystane do wykonania różnych
rzeczy zależnych od architektury na której pakiet
jest instalowany. Następną taką cechą jest
dyrektywa ``Exclude'' w nagłówku.
Poniżej zamieszczona jest część pliku specyfikującego dla pakietu ``fileutils''. Jest on przygotowany do instalacji na dwóch platformach: Alphach i Intelu.
Summary: GNU File Utilities
Name: fileutils
Version: 3.16
Release: 1
Copyright: GPL
Group: Utilities/File
Source0: prep.ai.mit.edu:/pub/gnu/fileutils-3.16.tar.gz
Source1: DIR_COLORS
Patch: fileutils-3.16-mktime.patch
%description
These are the GNU file management utilities. It includes
programs
to copy, move, list, etc, files.
The ls program in this package now incorporates color ls!
%prep
%setup
%ifarch alpha
%patch -p1
autoconf
%endif
%build
configure --prefix=/usr --exec-prefix=/
make CFLAGS="$RPM_OPT_FLAGS" LDFLAGS=-s
%install
rm -f /usr/info/fileutils*
make install
gzip -9nf /usr/info/fileutils*
.
.
.
W poniższym przykładzie przedstawione zostanie użycie
dyrektywy ``optflags'' z /etc/rpmrc
.
RPM_OPT_FLAGS
przyjmują odpowiednią wartość
w zależności od tego na jakiej platformie instalowany
jest pakiet. Do pliku Makefile użytego w pakiecie
należy nanieść poprawki by korzystał z tej zmiennej
zamiast standardowych opcji (np. -m486
lub -O2
).
Możesz się zorientować co powinno być zrobione
poprzez zainstalowanie pakietu źródłowego,
jego rozpakowanie i przyjrzenie się plikowi Makefile.
Następnie należy zajrzeć do plików z poprawkami
dla pliku Makefile i sprawdzić jakie zmiany powinny być
wprowadzone.
Makro %ifarch
jest bardzo istotne dla tworzenia
pakietów na wiele architektur.
W większości przypadków potrzebujesz nanieść jedną
lub dwie poprawki specyficzne tylko dla jednej, konkretnej
architektury. W takiej sytacji RPM pozwala na
naniesienie poprawki wyłącznie dla tej jednej architektury.
W powyższym przypadku, pakiet fileutils ma poprawkę
dla maszyn 64-bitowych.
To naturalnie w chwili obecnej stosuje się tylko do Alf.
Tak więc dodajemy makro %ifarch
nanoszące odpowiednią poprawkę:
%ifarch axp
%patch1 -p1
%endif
To zapewni, że poprawka nie będzie naniesiona
na żadnej innej architekturze a wyłącznie na alfach.
Można opiekować się źródłowymi RPM-ami w jednym katalogu dla wszystkich platform. Uzyskuje się to poprzez ``wyłączenie'' (ang. exclude) pewnych pakietów z tworzenia ich dla pewnych architektur, tak, że ciągle możliwym jest:
rpm --rebuild /usr/src/SRPMS/*.rpm
dające w wyniku poprawne pakiety. Jeśli aplikacja nie została
jeszcze do tej pory przeniesiona na daną platformę to wystarczy
dodać wiersz wygladający mniej więcej tak:
ExcludeArch: axp
do nagłówka pliku specyfikującego pakiet źródłowy.
Następnie przebuduj pakiet na platformę na której
już pracuje. W ten sposób uzyskuje się pakiet,
który kompiluje się/tworzy się np. na Intel-u
podczas gdy może być łatwo pominięty (skipped) na Alphie.
Wykorzystanie RPM to tworzenia pakietów przeznaczonych na wiele platform jest zazwyczaj prostsze niż doprowadzenie pakietu do stanu w którym daję się on na nich zainstalować. Jednakże w miarę jak powstaje więcej i więcej pakietów w postaci binarnej staje się to coraz prostsze. Jeśli przy tworzeniu pakietu zabrniesz w ślepą uliczkę to jak zwykle, rozwiązaniem może być zajrzenie do kodu źródłowego podobnego pakietu.