|
RPM unterstüzt jetzt das Erstellen von Paketen für Intel i386, Digital
Alpha mit Linux und Sparc. Berichte besagen, daß es auch auf SGI's und
HP's funktionieren soll. Eine Reihe von Eigenschaften vereinfachen das
Erstellen von Paketen auf allen Plattformen. Die erste ist die ``optflags''
Direktive in /etc/rpmrc
. Sie kann dazu benutzt werden, Flags, die
beim Übersetzen von Paketen verwendet werden, auf architekturspezifische
Werte zu setzen. Ein anderes Beispiel sind die ``arch'' Makros in der
Spec-Datei. Sie können dazu benutzt werden, unterschiedliche Aktionen
auszulösen, je nachdem, auf welcher Architektur übersetzt wird. Eine andere
Möglichkeit ist die ``Exclude'' Direktive im Header.
Der folgende Ausschnitt ist Teil des ``fileutils''-Paketes. Es ist für das Übersetzen auf der Intel- und Alphaplattform konfiguriert.
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*
.
.
.
In diesem Beispiel wird gezeigt, wie man die ``optflags''-Direktive aus
/etc/rpmrc
einsetzt. In Abhängigkeit von der jeweiligen Architektur
wird die Variable RPM_OPT_FLAGS
auf den entsprechenden Wert gesetzt.
Das Makefile muß angepaßt werden, damit hier dann diese Variable anstelle
der üblichen Direktiven wie -m486
oder -O2
verwendet
wird. Man kann sich ein Gefühl dafür verschaffen, was gemacht werden muß,
indem man sich erwähntes Quellpaket installiert und das Makefile
ansieht. Dazu kann man sich dann im Vergleich den Patch anschauen, um zu
sehen, welche Änderungen notwendig sind.
Sehr wichtig ist das Makro %ifarch
. Meistens muß man den einen oder
anderen Patch machen, der nur für eine bestimmte Architektur angewandt
werden soll. In diesem Fall sorgt der RPM mit Hilfe dieses Makros für die
korrekte Verwendung der Patches. Im obigen Beispiel hat das fileutils-Paket
einen Patch für 64-bit Architekturen. Dieser Patch soll natürlich im Moment
nur für Alpha-Rechner angewandt werden. Deshalb wird ein %ifarch
Makro
um den 64-bit Patch herumgelegt:
%ifarch axp
%patch1 -p1
%endif
Das stellt sicher, daß der Patch ausschließlich für Alphas verwendet wird.
Damit man die Quell-rpm's für alle Plattformen weiterhin in einem Verzeichnis aufbewahren kann, haben wir die Möglichkeit geschaffen, Pakete von der Übersetzung auf bestimmten Architekturen auszuschließen. Das ermöglicht weiterhin Dinge wie eine Übersetzung ganzer Gruppen von Paketen mit einem Mal, z.B. mit einem
rpm --rebuild /usr/src/SRPMS/*.rpm
,wobei man trotzdem dann nur die passenden übersetzten Pakete erhält.
Falls ein Programm noch nicht auf eine bestimmte Plattform portiert wurde,
reicht ein Einfügen einer Zeile wie:
ExcludeArch: axp
in den Header der Spec-Datei des Quellpaketes. Danach erstellt man das rpm auf
der Architektur, auf der es läuft, und erhält so ein Paket, das
z.B. auf Intel übersetzt wird, aber auf Alphas einfach übergangen wird.
Oft ist es einfacher, den RPM zum Erstellen von Paketen für mehrere Architekturen einzusetzen als das Paket selber dazu zu bringen. Wie üblich ist der beste Weg, wenn man mit seinem rpm nicht mehr weiter weiß, einen Blick auf ähnliche andere rpm's zu werfen.
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 17:56:57