Nästa Föregående Innehållsförteckning

7. RPM-skapande för flera arkitekturer

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.

7.1 Exempel på spec-filer

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*

.
.
.

7.2 Opt-flaggor

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.

7.3 Makron

%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.

7.4 Utesluta arkitekturer från paket

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.

7.5 Avslutning

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.


Nästa Föregående Innehållsförteckning