18.2.5 Построение окружения сборки RPM
Индекс18.2.5 Построение окружения сборки RPM
Если дело начато с идеи сборки пакета для нескольких версий Linux, можно установить такое окружение сборки, которое поможет четко разделить вендор-зависимые характеристики.
Ключевые темы в данном подходе:
* Определение вендора
* Использование макросов для задания процесса сборки
* Обработка различных зависимостей
18.2.5.1 Определение вендора
Для получения чистой среды сборки необходима возможность определения вендора, и, в зависимости от этого, нужных установок при сборке. Для облегчения решения этой задачи большинство вендоров помещают в определенное место файловой системы файл или устанавливают специальный пакет, который содержит имя производителя. Это имя может быть получено в процессе сборки.
Соглашение для файлов следующее:
/etc/vendor-release |
Например:
$ more /etc/redhat-release |
Для пакетов соглашение касается имен пакетов:
$ rpm -q redhat-release |
Также можно использовать простое определение макроса для имени вендора и затем опцию --define для rpmbuild. Например:
# rpmbuild ba --define 'linuxVendor suse' |
С такой опцией используется макрос %linuxVendor.
Альтернативный подход - автоматическое определение вендора скриптами сборки. Ручное определение работает, однако требует введения информации от пересборщика пакета.
18.2.5.2 Построение окружения сборки и макросов
Будучи единожды установленным, значение макроса "вендор" позволяет задать другие макросы, учитывающие различия дистрибутивов, которые влияют на ваши приложения.
Для учета платформы используют главным образом условные определения, заключенные между %if и %endif. Кроме того, часто бывает полезным использование опций --with, --without и --target утилиты rpmbuild, позволяющие контролировать особенности сборки путем передачи условий в скрипты и макросы, определенные в spec-файле.
Макрос %if позволяет задать условия. Например:
%if %{old_5x} && %{old_6x} |
Также %if можно использовать для настройки таких полей, как
Requires: (показано в нижеследующем примере):
%if %{build6x} |
Опция командной строки --with задает значение специального макроса _with_. Например, следующая команда вносит установки в макросы spec-файла: