Что означает "% {__ install}" с точки зрения спецификации rpm? - PullRequest
1 голос
/ 15 марта 2019

Может быть, это очень глупый вопрос, но я не могу найти ответ.До сегодняшнего дня я никогда не пытался написать файл спецификации для пакета rpm.Я нашел пример спецификации и вижу много %{__install} мыслей в разделе %install.Насколько я понимаю по синтаксису это король Макрос.Но в spec-файлах нет определения для этого.В моем примере это выглядит так:

%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?Трудно гуглить или найти его в официальных документах, но похоже, что это какая-то обычная вещь.

Ответы [ 2 ]

2 голосов
/ 15 марта 2019

%__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 показывает вам список системымакросы, определенные в вашей системе.Показывает определение - не развернутые макросы.

2 голосов
/ 15 марта 2019

К сожалению, нет волшебного ответа. Макросы Rpm могут быть переопределены по-разному в разных ОС и впоследствии могут быть переопределены другими пакетами.

Определения по умолчанию можно найти в /usr/lib/rpm/macros, но другие пакеты могут устанавливать больше макросов в /usr/lib/rpm/macros.d/.

в моем /usr/lib/rpm/macros, если найдено это определение:

%__install              /usr/bin/install

, поэтому в этом случае макрос %__install на самом деле ничего не добавляет.

Но я считаю макрос %make_install довольно удобным; который определяется как:

%make_install %{__make} install DESTDIR=%{?buildroot} INSTALL="%{__install} -p"

так что вместо

make install DESTDIR=%{?buildroot}

я могу просто поставить

%make_install

в моем spec-файле ... (и, объясняя это, я только что узнал вариант установки -p :))

...