Next Previous Contents

## 49. Построение RPM для нескольких архитектур

Сейчас RPM может использоваться для построения пакетов для Intel i386, Digital Alpha с работающим Linux и the Sparc. Также было сообщено, что RPM работает на SGI и рабочих станциях HP. Существует несколько свойств, которые делают построение пакетов не всех платформах легким. Первое из этих свойств это директива ``optflags'' в файле `/etc/rpmrc`. Она может быть использована для установки используемых для построения программного обеспечения флагов в значения соответствующие определенной архитектуре. Другое свойство это макрос ``arch'' в spec-файле. Оно может быть использована чтобы делать разные вещи в зависимости от архитектуры на которой производится посторонние. Еще одно свойство это директива ``Exclude'' в заголовке.

## 49.1 Простой spec-файл

Следующая информация это часть 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*

>     .

>     .

>     .

> `

## 49.2 Директива Optflags

В этом примере вы видите как директива ``optflags'' используется из файла `/etc/rpmrc`. В зависимости от того на какой архитектуре вы производите построение, соответствующее значение дается переменной `RPM_OPT_FLAGS`. Вы должны изменить Makefile вашего пакета для использования этой переменной вместо директив, которые вы могли бы использовать (подобно директивам `-m486` и `-O2`). Вы можете лучше почувствовать что надо сделать если загрузите этот пакет с исходными текстами, распакуйте исходные тексты и посмотрите на Makefile. Затем посмотрите на заплатку для Makefile и вы увидите какие изменения должны быть сделаны.

## 49.3 Макросы

Макрос `%ifarch` очень важен. Очень часто вам необходимо сделать одну или несколько заплаток, специфических только для одной архитектуры. В этом случае RPM позволит вам приложить эти заплатки только на этой архитектуре.

В вышеприведенном примере, fileutils имеют заплатку для 64-битовых машин. Очевидно, что она должна быть приложена только на Alpha. Так что ма добавим макрос `%ifarch` вокруг применения 64-битовой заплатки как приведено:

> `

>     %ifarch axp

>     %patch1 -p1

>     %endif

> `

Это будет обеспечивать, что заплатка не будет приложена на любой архитектуре за исключением alpha.

## 49.4 Исключение архитектур из пакетов

Для того чтобы вы могли сопровождать пакеты с исходным текстом в одной директории для всех платформ мы реализовали возможность ``исключения'' построения пакетов на определенных архитектурах. Так что вы все равно можете делать такие вещи как:

> `

>     rpm --rebuild /usr/src/SRPMS/*.rpm

> `

и иметь правильно построенные пакеты. Если вы еще не перенесли приложение на определенную платформу, все что вам надо сделать это добавить примерно следующую строку:

> `

>     ExcludeArch: axp

> `

к заголовку spec-файла пакета с исходными текстами. Затем заново постройте пакет на платформе на которой он может строится. Вы будете иметь пакет с исходными текстами, который может строиться на платформе Intel и может быть легко пропущен на платформе Alpha.

## 49.5 Окончание

Использование RPM для создания многоплатформенных пакетов обычно более легко сделать, чем заставить сам пакет быть построенным в обоих местах. Как всегда наилучшая помощь когда вы застряли это посмотреть как сделан похожий пакет.

Next Previous Contents