RPM Макросы
Макросы RPM — это прямые текстовые подстановки, которые происходят путём замены определённых выражений и условий на соответствующий текст во время процесса сборки пакета. Имена макросов начинаются с символа %. Они представляют собой сокращённые псевдонимы для часто используемых фрагментов текста.
Для чего нужны макросы:
- Обеспечить желаемую функциональность: Пакеты в репозитории Сизиф должны отвечать определённым правилам, для этого Spec-файлы должны обеспечивать выполнение этих правил;
- Помочь разработчику: Spec-файлы пишут люди, следовательно, их работу нужно свести к минимуму, который и требует участия человека. Мейнтейнер не должен копировать блоки кода из файла в файл, так как данная работа занимает время, силы и может привести к ошибкам. Для таких случаев существуют макросы. Если какой-то код появляется в разных Spec-файлах более одного раза, то надо написать макрос(ы);
- Сделать Spec-файлы более читаемыми: Людям, пересобирающим или собирающим новый аналогичный пакет, опираясь на другие Spec-файлы, будет проще адаптировать их, если в наименовании, расположении и использовании различных элементов Spec-файлов будет определённый порядок.
Просмотреть список доступных макросов и их значения можно, выполнив команду:
rpm --showrcПолучить значение, раскрываемое макросом можно, использовав команду rpm --eval {<имя_макроса>}.
К примеру, так можно узнать значение макроса %_sysconfdir:
$ rpm --eval %_sysconfdir
/etcМакросы можно использовать внутри других макросов. Если название архива исходных текстов проекта формируется из его имени и версии (директивы Name и Version транслируются в определённые макросы, о чём будет рассказано ниже), то директива пути к файлу может выглядеть следующим образом:
Source0: %{name}-%{version}.tar.gzМакросы путей системных каталогов
Основные каталоги
| Макрос | Замена | Описание |
|---|---|---|
%_usr | /usr | ------ |
%_var | /var | ----- |
%_bindir | /usr/bin | ---- |
%_sbindir | /usr/sbin | ---- |
%_libexecdir | /usr/lib | ---- |
%_localstatedir | /var/lib | ---- |
%_datadir | /usr/share | ---- |
%_tmpfilesdir | /lib/tmpfiles.d | ---- |
%_desctopdir | /usr/share/application | ---- |
Макросы меню
| Макрос | Замена | Описание |
|---|---|---|
%_menudir | /usr/lib/menu | ---- |
%_iconsdir | /usr/share/icons | ---- |
%_miconsdir | /usr/share/icons/hicolor/16x16/apps | ---- |
%_liconsdir | /usr/share/icons/hicolor/48x48/apps | ---- |
Другие системные макросы
| Макрос | Замена | Описание |
|---|---|---|
%_initdir | /etc/rc.d/init.d | ---- |
%_lockdir | /var/lock | ---- |
%_logdir | /var/log | ---- |
Прочие макросы
| Макрос | Замена | Описание |
|---|---|---|
%intel | i386, i486, i586, i686, i786, i886, i986, pentium2, pentium3, pentium4 | Список архитектур Intel, совместимых с i386 |
%amd | k6, athlon, athlon_xp | Список архитектур AMD, совместимых с i386 |
%ix86 | i386, i486, i586, i686, i786, i886, i986, pentium2, pentium3, pentium4, k6, athlon, athlon_xp | Список всех архитектур, совместимых с i386 |
Подробный список предопределённых макросов можно найти на страницах: Предопределённые макросы и Макросы по категориям.
Список задач для участников ALT Packaging Guide
- Рассказать об пользовательских макросах