什么rpmbuild警告"文件列出两次"实际上意味着什么?

dav*_*vka 14 installation rpm rhel software-packaging rpmbuild

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

%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)
Run Code Online (Sandbox Code Playgroud)

我自然地在/ opt/myapp/bin下的每个文件上收到"文件列出两次"警告.我的问题是,它究竟意味着什么?rpmbuild用它做什么?我无法在任何地方找到答案.我可以忽略它吗?什么优先,第一次或最后一次?

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

Bru*_*779 11

我在这里张贴以防万一有人有同样的问题并找到这个老问题.

最近(最近如何取决于发行版)宏%排除已被添加到rpmbuild.

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

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

%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
Run Code Online (Sandbox Code Playgroud)

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


小智 8

把它改成这个:

%files
%dir %attr(-, myuser, mygroup) /opt/myapp
%attr(750, myuser, mygroup) /opt/myapp/bin
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意[使用%dir将使其成为空目录](http://www.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html).因此,如果您需要在/ opt/myapp*中包含所有内容并且*仅在bin子目录上自定义配置权限,那么这不是很有用. (3认同)

Aar*_*sco 5

它意味着 - 它被列出两次.;)我从来没有遇到任何问题,但我不知道哪个会赢.

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