【问题标题】:What does "%{__install}" mean in terms of rpm spec?就 rpm 规范而言,“%{__install}”是什么意思?
【发布时间】:2023-03-24 13:57:01
【问题描述】:

也许这是一个非常愚蠢的问题,但我找不到答案。 直到今天,我才尝试为 rpm 包编写规范文件。我找到了一个规范示例,我在%install 部分看到了很多%{__install} 的想法。据我理解的语法,它是makros之王。但是在规范文件中没有定义它。在我的示例中,它看起来像这样:

%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 builder的某种内置宏? google 一下或在官方文档中都很难找到,但看起来这是一种常见的东西。

【问题讨论】:

    标签: linux rpm rpmbuild rpm-spec


    【解决方案1】:

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

    在我的规范文件中...(在解释这一点时;我刚知道安装的-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 标记定义的。

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

      【讨论】:

        猜你喜欢
        • 2019-04-01
        • 2015-01-21
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-09
        • 1970-01-01
        相关资源
        最近更新 更多