17

我需要为包中的一个主要目录指定公共属性,并为其中的一些子目录指定特殊权限。例如

%files
%attr(-, myuser, mygroup) /opt/myapp 
%attr(750, myuser, mygroup) /opt/myapp/bin  # no exec permission to other
/etc  # this is the reason I can't use %defattr(-, myuser, mygroup)

我自然会在 /opt/myapp/bin 下的每个文件上收到“文件列出两次”警告。我的问题是,它实际上是什么意思?rpmbuild 用它做什么?我在任何地方都找不到答案。我可以忽略它吗?什么优先,第一次或最后一次出现?

我不想myapp明确列出所有内容来解决这个问题。还有其他方法吗?谢谢

4

3 回答 3

14

我在这里发帖以防万一有人遇到同样的问题并找到这个老问题。

最近(最近多久取决于发行版)宏 %exclude 已添加到 rpmbuild。

%files
%attr(-, myuser, mygroup) /opt/myapp
%exclude /opt/myapp/bin
%attr(750, myuser, mygroup) /opt/myapp/bin  # no exec permission to other

这里的优势并不像排除一组文件或文件夹那样明显:

%files
%attr(-, myuser, mygroup) /opt/myapp
%exclude /opt/myapp/[bin|data|whatever]
%attr(750, myuser, mygroup) /opt/myapp/bin  # no exec permission to other
%attr(777, myuser, myothergroup) /opt/myapp/data
%attr(640, myuser, myothergroup) /opt/myapp/whatever

奇怪的是 [a|b] 语法适用于 %exclude 但不适用于 %files 中的其他指令(例如,我可以使用正则表达式排除但不包含,doh)

于 2015-01-06T23:25:48.803 回答
9

将其更改为:

%files
%dir %attr(-, myuser, mygroup) /opt/myapp
%attr(750, myuser, mygroup) /opt/myapp/bin

注意%dir目录。那应该摆脱列出两次警告的文件。

于 2014-02-11T14:40:26.427 回答
5

这意味着——它被列出了两次。;) 我从来没有遇到过问题,但我不知道哪个会赢。

作为旁注,您可能不应该单独列出/etc,因为您不想拥有它。

于 2012-12-25T22:07:05.050 回答