Сейчас RPM может использоваться для построения пакетов для
Intel i386, Digital Alpha с работающим Linux и the Sparc. Также
было сообщено, что RPM работает на SGI и рабочих станциях HP.
Существует несколько свойств, которые делают построение пакетов не
всех платформах легким. Первое из этих свойств это директива
``optflags'' в файле /etc/rpmrc
. Она может быть использована
для установки используемых для построения программного обеспечения
флагов в значения соответствующие определенной архитектуре. Другое
свойство это макрос ``arch'' в spec-файле. Оно может быть
использована чтобы делать разные вещи в зависимости от архитектуры
на которой производится посторонние. Еще одно свойство это
директива ``Exclude'' в заголовке.
Следующая информация это часть spec-файла для пакета ``fileutils''. Он настроен для построения и на Alpha и на 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*
.
.
.
В этом примере вы видите как директива ``optflags'' используется
из файла /etc/rpmrc
. В зависимости от того на какой
архитектуре вы производите построение, соответствующее значение
дается переменной RPM_OPT_FLAGS
. Вы должны изменить Makefile
вашего пакета для использования этой переменной вместо директив,
которые вы могли бы использовать (подобно директивам -m486
и
-O2
). Вы можете лучше почувствовать что надо сделать если
загрузите этот пакет с исходными текстами, распакуйте исходные
тексты и посмотрите на Makefile. Затем посмотрите на заплатку для
Makefile и вы увидите какие изменения должны быть сделаны.
Макрос %ifarch
очень важен. Очень часто вам необходимо
сделать одну или несколько заплаток, специфических только для одной
архитектуры. В этом случае RPM позволит вам приложить эти заплатки
только на этой архитектуре.
В вышеприведенном примере, fileutils имеют заплатку для 64-битовых
машин. Очевидно, что она должна быть приложена только на Alpha. Так
что ма добавим макрос %ifarch
вокруг применения 64-битовой
заплатки как приведено:
%ifarch axp
%patch1 -p1
%endif
Это будет обеспечивать, что заплатка не будет приложена на любой архитектуре за исключением alpha.
Для того чтобы вы могли сопровождать пакеты с исходным текстом в одной директории для всех платформ мы реализовали возможность ``исключения'' построения пакетов на определенных архитектурах. Так что вы все равно можете делать такие вещи как:
rpm --rebuild /usr/src/SRPMS/*.rpm
и иметь правильно построенные пакеты. Если вы еще не перенесли приложение на определенную платформу, все что вам надо сделать это добавить примерно следующую строку:
ExcludeArch: axp
к заголовку spec-файла пакета с исходными текстами. Затем заново постройте пакет на платформе на которой он может строится. Вы будете иметь пакет с исходными текстами, который может строиться на платформе Intel и может быть легко пропущен на платформе Alpha.
Использование RPM для создания многоплатформенных пакетов обычно более легко сделать, чем заставить сам пакет быть построенным в обоих местах. Как всегда наилучшая помощь когда вы застряли это посмотреть как сделан похожий пакет.