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.