【问题标题】:How to use %exclude macro properly in rpmbuild SPEC files?如何在 rpmbuild SPEC 文件中正确使用 %exclude 宏?
【发布时间】:2015-09-11 08:12:57
【问题描述】:

在 SPEC 文件中考虑以下内容:

%files
%defattr(-,bubba,users,-)
...
%attr(-,root,users) %{_localstatedir}/foo/
%config %attr(-,root,root) %{_localstatedir}/foo/blah.crap

我想包含foo 下的所有文件,但还特别将blah.crap 标记为配置文件(其权限可能与foo 的不匹配)。这样做会导致 rpmbuild 抱怨该文件被列出了两次。

我尝试在上面的最后两行之间添加以下内容:

%exclude %{_localstatedir}/foo/blah.crap

但是,这似乎会永久覆盖任何其他包含,因为尽管下一行 %config 应该包含该文件(现在作为配置文件),blah.crap 确实 在我安装 RPM 时安装。

那么正确的方法是什么?忽略来自 rpmbuild 的警告是一个 BS 答案,就像“只列出 foo 中的所有文件而不是列出整个目录”。

【问题讨论】:

  • 你立即拒绝的两件事是我知道的关于这个问题的唯一答案。
  • @EtanReisner 如果我只是忽略警告,那么 RPM 的行为是什么?该文件是否被视为配置文件,行为是否取决于它“列出两次”的顺序,还是什么?
  • 好问题,我不知道。您想转储生成的 rpm 文件以找出(并测试不同的命令等)以确定是否知道。但看起来在 rpm 4.4.2.3 的源代码中,条目似乎已合并(在 rpm 4.9.1.3 中似乎仍然如此)。

标签: linux configuration-files rpm rpmbuild


【解决方案1】:

最好的解决方案是在 %install 中使用 find(1) 创建文件清单,并使用 sed(1) 添加 %config 或以其他方式过滤清单以品尝。

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 2018-05-11
    • 2013-01-21
    • 2020-04-04
    • 2014-12-11
    • 2019-03-27
    • 2020-08-25
    • 2014-04-14
    • 2016-08-27
    相关资源
    最近更新 更多