rpmbuild 警告"File listed twice"实际上是什么意思?



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

%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下的所有内容来解决这个问题。还有别的办法吗?由于

我在这里发布只是以防有人有同样的问题,发现这个老问题。

最近(最近的时间取决于发行版)宏%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一起工作,但不与%文件中的其他指令一起工作(例如,我可以使用regex来排除但不包括,doh)

改成:

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

注意目录的%dir

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

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

出现此错误的一个原因可能是您在%files下列出了该目录以及该目录中的文件。

的例子:

%files
%{_bindir}/%{name}-%{version}/dir
%{_bindir}/%{name}-%{version}/dir/file

在这种情况下,您可以像这样列出目录:

%files
%{_bindir}/%{name}-%{version}/dir

或者列出目录%dir,然后列出文件,像这样:

%files
%dir %{_bindir}/%{name}-%{version}/dir
%{_bindir}/%{name}-%{version}/dir/file

我在RH 8.6上使用rpmbuild的当前版本,这些解决方案都不起作用。正如在评论中发布的,%排除删除文件和目录,而%dir删除其下的所有子目录和文件,除非指定。示例servlet_workspace是tomcat目录路径,它指向一个由2个文件和5个目录组成的目录树。

%files
%attr(-, tomcat, tomcat) %{servlet_workspace}
%attr(0664, tomcat, tomcat) %{servlet_workspace}/logs/%{conf_file}.sample
%attr(0775, tomcat, tomcat) %{servlet_workspace}/stitcherStuff/reboot.sh

添加%dir将删除servlet_workspace下的所有子目录。

%files
%dir %{servlet_workspace}
%attr(0664, tomcat, tomcat) %{servlet_workspace}/logs/%{conf_file}.sample
%attr(0775, tomcat, tomcat) %{servlet_workspace}/stitcherStuff/reboot.sh

相关内容

  • 没有找到相关文章

最新更新