RPM kan nu användas för att bygga paket för Intel i386, Digital Alpha
som kör Linux och Sparc. Det har även rapporterats att det fungerar
på SGIs och HPs arbetsstationer. Det finns flera funktioner som gör
det enkelt att skapa paket på alla plattformar. Den första av dessa är
"optflags"-direktivet i /etc/rpmrc
. Det kan användas för att
ange flaggor, vilka används när mjukvara byggs med
arkitektur-specifika värden. En annan funktion är "arch"-makrona i
spec-filen. De kan användas för att utföra olika saker, beroende på
vilken arkitektur du skapar paketen på. En annan funktion är
"Exclude"-direktivet i rubrik-delen.
Det följande är delar av spec-filen till "fileutils"-paketet. Det är konfigurerat för att kunna byggas på både Alpha och Intel.
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*
.
.
.
I det här exemplet kan du se hur "optflags"-direktivet används från
/etc/rpmrc
. Beroende på vilken arkitektur det byggas på, så
ges det korrekta värdet till RPM_OPT_FLAGS
. Du måste patcha
Makefilen för ditt paket, för att använda denna variabel, istället för
de vanliga direktiven som kanske används (som -m486
och
-O2
). Du kan få en bättre känsla för vad som behöver göras, genom
att installera detta källkods-paket och sedan packa upp källkoden och
undersöka Makefilen. Ta sedan en titt på patchen för Makefilen och se
vilka ändringar som måste göras.
%ifarch
-makron är väldigt viktig i allt detta. I de flesta fall
behöver du skapa en patch eller två, som är specifika för endast en
arkitektur. I det här fallet kommer RPM tillåta dig att lägga till den
patchen till endast en arkitektur.
I exemplet ovan har fileutils en patch för 64-bitars maskinter. Denna
ska uppenbarligen endast läggas till på Alpha. Så vi la till en
%ifarch
-makro kring 64-bitars-patchen, på följande sätt:
%ifarch axp
%patch1 -p1
%endif
Detta ser till så att patchen inte läggs till på någon annan
arkitektur än alpha.
För att du ska kunna underhålla källkods-paket i en katalog, för alla plattformar, så har vi implementerat möjligheten att "utesluta" paket från att byggas på vissa arkitekturer. Detta är för att du fortfarande ska kunna göra saker som
rpm --rebuild /usr/src/SRPMS/*.rpm
och få rätt paket att byggas. Om du fortfarande inte har portat en
applikation till en viss plattform, så är allt du behöver göra att
lägga till en rad som:
ExcludeArch: axp
till rubrik-delen av spec-filen i källkods-paketet. Bygg sedan om
paketet på plattformen som det ska kunna byggas på. Du har sedan ett
källkods-paket som går att bygga på en Intel, och kan som enkelt kan
hoppas över på en Alpha.
Att använda RPM för att bygga paket för flera arkitekturer är oftast enklare att göra än att skaffa paketet självt och bygga det på båda ställena. Detta blir dock mycket enklare, i det att fler av de "hårda" paketen byggs. Som alltid så är den bästa hjälpen, om du fastnar, då du bygger RPM-paket, att titta på andra, liknande paket.