InhaltWeiter

9. RPM's für verschiedene Architekturen

RPM unterstützt jetzt das Erstellen von Paketen für Intel i386, Digital Alpha mit Linux, Sparc und andere. 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.

9.1 Beispiel für eine Spec-Datei

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*

.
.
.

9.2 Optflags

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

9.3 Makros

Sehr wichtig ist das Makro %ifarch. Meistens ist der eine oder andere Patch notwendig, welcher 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 für die jeweilige Architektur. 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.

9.4 Ausschließen von Architekturen in Paketen

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 dann nur die passenden Pakete wirklich übersetzt werden. Falls ein Programm noch nicht auf eine bestimmte Plattform portiert wurde, reicht ein Einfügen einer Zeile wie:
ExcludeArch: alpha
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.

9.5 Zusammenfassung

Oft ist es einfacher, den RPM zum Erstellen von Paketen für mehrere Architekturen einzusetzen als das Paket selber dazu zu bringen überall zu kompilieren. In dem Maße, wie die komplizierteren Pakete entsprechend angepaßt werden, wird dieses jedoch immer einfacher. Wie üblich ist der beste Weg, wenn man mit seinem rpm nicht mehr weiter weiß, einen Blick auf ähnliche rpm's mit Quellen von anderen zu werfen.


InhaltWeiter