“%{__ install}”在rpm规格方面意味着什么?

问题描述 投票:1回答:2

也许这是一个非常愚蠢的问题,但我找不到答案。我从来没有试过为rpm包写一个spec文件,直到今天。我找到了一个规范的例子,我看到很多%{__install}认为在%install部分。据我所知,它是makros之王。但是在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

在我发现的其他规范中,我也看到过很多关于这个宏的例子。像thisthat。它们具有相同的语法:

%{__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构建器的某种内置宏?很难谷歌或在官方文档中找到它,但它看起来像是一种常见的东西。

linux rpm rpmbuild rpm-spec
2个回答
2
投票

不幸的是,没有神奇的答案。 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选项:))


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标记在spec文件中定义的。

此外,rpm --showrc显示了系统中定义的系统宏列表。它显示了定义 - 而不是扩展的宏。

© www.soinside.com 2019 - 2024. All rights reserved.