Product SiteDocumentation Site

6.3. RPM Макросы

Макросы RPM — это прямые текстовые подстановки, которые выполняются путем замены определенных выражений и условий на соответствующий текст во время процесса сборки пакета. Иными словами, макросы являются псевдонимами для часто используемых фрагментов текста. Их применение сокращает не только объем ввода, но и делает спецификацию легче читаемой и воспринимаемой. Имена макросов начинаются с символа «%».
Список пакетов, содержащих макросы можно получить, выполнив команду:
$ apt-cache search rpm | grep '^rpm-[bm]' | sort -n
rpm-build-apache2 - Набор утилит для автоматической Web серверов и приложений
rpm-build-browser-plugins - Netscape Gecko Plug-in API common packaging files
rpm-build-compat - ALT Linux compatibility macros for backport purposes
rpm-build-dmd - RPM build environment to build D lang(dmd) packages
rpm-build-emacs - Helper scripts and RPM macros to build GNU Emacs extensions
rpm-build-erlang - RPM helper scripts to calculate Erlang dependencies
rpm-build-extra-targets - Build packages for other platforms
rpm-build-fedora-compat-fonts - Build-stage rpm automation for fonts packages
rpm-build-file - Утилита для определения типов файлов
rpm-build-firefox - RPM helper macros to rebuild firefox packages
rpm-build-fonts - RPM helper scripts for building font packages
…
Для использования данных макросов необходимо добавить в spec-файл строку:
BuildRequires(pre): имя-пакета-с-макросами
Например:
BuildRequires(pre): rpm-build-java
Списки макросов находятся в каталоге /usr/lib/rpm/macros.d/.
Получить список доступных макросов и их значения можно, выполнив команду:
$ rpm --showrc
Получить значение, раскрываемое макросом, можно командой:
$ rpm --eval <имя_макроса>
Например:
$ rpm --eval %_sysconfdir
/etc
Макросы можно использовать внутри других макросов. Например, если имя архива исходных текстов формируется из имени и версии проекта (директивы Name и Version транслируются в соответствующие макросы), то директива задания пути к файлу может выглядеть следующим образом:
Source0: %{name}-%{version}.tar.gz

Примечание

Не следует использовать в spec-файлах внутренние макросы RPM, которые начинаются с двух подчеркиваний (например, %__install или %__mkdir_p).
В Макросы путей системных каталогов перечислены некоторые макросы.

Таблица 6.3. Макросы путей системных каталогов

Макрос
Описание
%homedir
Домашний каталог пользователя, вызывающего этот макрос
%_licensedir
Каталог лицензий (/usr/share/license)
%_controldir
Каталог control (/etc/control.d/facilities)
%_defaultdocdir
Каталог документации (/usr/share/doc)
%_defattr
Атрибуты файлов и каталогов по умолчанию для каждой секции %files и для каждого файла, включаемого в таких секциях (-,root,root,755)
%_man1dir, %_man2dir, %_man3dir, %_man4dir, %_man5dir, %_man6dir, %_man7dir, %_man8dir, %_man9dir
Каталог man-файлов (/usr/share/man/manX)
%java_dir, %_javadir
Каталог для некоторых jar-файлов (/usr/share/java)
%_rpmmacrosdir
Каталог для установки сторонних макросов (/usr/lib/rpm/macros.d)
С целью сокращения объёма кода и упрощения записи часто используемых команд при сборке пакета в блоках тела spec-файла существует ряд встроенных макросов. Некоторые из них рассмотрены ниже.
Макрос %setup — используется в блоке %prep. Этот макрос распаковывает архив с исходным кодом (ключ -q подавляет подробный вывод при распаковке архива). По умолчанию распаковывается первый архив с исходным кодом (Source0); для остальных необходимо дополнительный параметр -a X, где X — номер Source.
%prep
%setup -a1 -a100 -a101 -a102 -a103 -a104 -a105
%patch1 -p1
В Sisyphus RPM макрос %setup использует ключ -q по умолчанию. Записи %setup и %setup -q эквивалентны. Для включения подробного вывода следует использовать ключ -v.
%patch[X] — используется в блоке %prep и применяет указанный патч (X — номер патча, такой же, как и при их описании в преамбуле, если патчей несколько). Патчи применяются относительно текущего каталога сборки. При необходимости можно обрезать часть пути с помощью ключа –p (как и у самой утилиты patch). Например:
%patch3 -p1
Макрос %autopatch позволяет применить все патчи, описанные в основной секции spec-файла, в порядке возрастания их номеров. Макрос поддерживает ключи -p и -F, аналогичные таким же опциям директивы %patch.
Макрос %configure — используется в блоке %build и используется для упрощения запуска ./configure с параметрами, соответствующими текущей платформе. В большинстве случаев достаточно вызвать %configure без параметров.
%build
%configure
%make_build
Если в исходниках отсутствует скрипт configure (например, при сборке из git), но есть configure.ac, перед вызовом %configure следует выполнить макрос %autoreconf.
Макрос %make_build — используется в блоке %build для запуска make с поддержкой параллельной сборки.
Макрос %makeinstall_std — применяется в блоке %install и рекомендуется вместо %make_install с ключами install и DESTDIR=%buildroot:
%make_install DESTDIR=%buildroot install
Макрос %make_install — применяется в блоке %install. Используется для упрощения установки ПО. Вызывает make install с указанием каталога для установки (DESTDIR=%buildroot) и рядом других ключей:
%make_install DESTDIR=%buildroot install
или
%make_install DESTDIR=%buildroot %_make_install_target
Макрос %makeinstall — применяется в блоке %install. Это редко используемый макрос, предназначенный для случаев, когда Makefile не поддерживает DESTDIR.
Макрос %dir — используется в блоке %files и указывает, что путь является каталогом, который должен принадлежать этому RPM. Это указание важно для того, чтобы RPM точно знал, какие каталоги нужно очистить при удалении пакета.
Макрос %doc — используется в блоке %files для создания каталога документации (%_defaultdocdir/%name-%version) и копирования в него указанных файлов. Пути к файлам строятся относительно каталога сборки проекта, например:
%doc Examples