#linux #rpm #rpmbuild #rpm-spec
#linux #rpm #rpmbuild #rpm-спецификация
Вопрос:
Возможно, это очень глупый вопрос, но я не могу найти ответ. Я никогда не пытался написать файл спецификации для пакета rpm до сегодняшнего дня. Я нашел пример спецификации и вижу много %{__install}
мыслей в %install
разделе. Насколько я понимаю по синтаксису, это король макросов. Но в файлах спецификации для этого нет определения. В моем примере это выглядит так:
%install
%{__install} -pD -m 644 $RPM_BUILD_DIR/my-project-%{version}/deploy/my-project.service $RPM_BUILD_ROOT/usr/lib/systemd/system/my_project-emperor.service
Я также видел много примеров с этими макросами в других спецификациях, которые я нашел. Например
это или то. У них одинаковый синтаксис:
%{__install} -s %{name} %{buildroot}%{_sbindir}/
%{__install} -c -m 644 examples/acl-content-sw.cfg %{buildroot}%{_sysconfdir}/%{name}/%{name}-acl-content-sw.cfg.example
%{__install} -c -m 644 examples/auth.cfg %{buildroot}%{_sysconfdir}/%{name}/%{name}-auth.cfg.example
Но что %{__install}
на самом деле? Какие-то встроенные макросы для rpm builder? Это трудно погуглить или найти в официальных документах, но похоже, что это какая-то обычная вещь.
Ответ №1:
К сожалению, волшебного ответа нет. Макросы Rpm могут быть переопределены по-разному в разных ОС и даже могут быть переопределены впоследствии другими пакетами.
Определения по умолчанию можно найти в /usr/lib/rpm/macros
, но другие пакеты могут устанавливать дополнительные макросы в /usr/lib/rpm/macros.d/
.
в моем /usr/lib/rpm/macros
if найдено это определение:
%__install /usr/bin/install
итак, в этом случае макрос %__install
на самом деле ничего не добавляет.
Но я нахожу %make_install
макрос довольно удобным; который определяется как:
%make_install %{__make} install DESTDIR=%{?buildroot} INSTALL="%{__install} -p"
итак, вместо того, чтобы поместить
make install DESTDIR=%{?buildroot}
Я могу просто поместить
%make_install
в моем файле спецификации… (и, объясняя это; я только что познакомился с -p
опцией install 🙂 )
Ответ №2:
%__install
это макрос.
Если вы хотите получить значение макроса, то используйте ‘rpm —eval’:
$ rpm --eval '%__install'
/usr/bin/install
$ rpm --eval '%{__install} -s %{name} %{buildroot}%{_sbindir}/'
/usr/bin/install -s %{name} /home/msuchy/rpmbuild/BUILDROOT/%{NAME}-%{VERSION}-%{RELEASE}.x86_64/usr/sbin/
Во втором примере вы можете видеть, что %{name}
не был расширен, потому что это не системный макрос, но он определен в файле спецификации с помощью Name
тега.
Кроме того, rpm --showrc
показывает вам список системных макросов, определенных в вашей системе. Он показывает определение, а не развернутые макросы.