Reputation: 14672
I need to specify common attributes for one of the major directories in the package, and special permission for some of it subdirs. e.g.
%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)
I get the "file listed twice" warning on every file under /opt/myapp/bin, naturally. My question is, what does it actually mean? What does rpmbuild do with it? I can't find an answer anywhere. Can I just ignore it? What takes precedence, the first or the last occurrence?
I prefer not to list everything under myapp
explicitly to solve this. is there any other way? Thanks
Upvotes: 20
Views: 20161
Reputation: 46
I am using the current version of rpmbuild on RH 8.6 and non of these solutions are working. As posted in the comments, %exclude removing the files and directories while %dir removes all the sub-directories and files under it unless specified. Example where servlet_workspace is the tomcat directory path to a directory tree of 2 files and 5 directories being created for the application.
%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
Putting %dir removes all the subdirectories under 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
Upvotes: 0
Reputation: 3640
One reason for this error could be that you have listed the directory as well as the files in that directory under %files
.
Example:
%files
%{_bindir}/%{name}-%{version}/dir
%{_bindir}/%{name}-%{version}/dir/file
In this case either you just list the directory like this:
%files
%{_bindir}/%{name}-%{version}/dir
Or list directory as %dir
then list files as well, like this:
%files
%dir %{_bindir}/%{name}-%{version}/dir
%{_bindir}/%{name}-%{version}/dir/file
Upvotes: 1
Reputation: 1669
I am posting here just in case someone has the same issue and finds this old question.
Recently (how recently depends on the distro) the macro %exclude has been added to rpmbuild.
%files
%attr(-, myuser, mygroup) /opt/myapp
%exclude /opt/myapp/bin
%attr(750, myuser, mygroup) /opt/myapp/bin # no exec permission to other
The advantage here is not as evident as having a set of files or folders to exclude:
%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
Strangely the [a|b] syntax works with %exclude but not with the other directives in %files (eg I can use a regex to exclude but not to include, doh)
Upvotes: 14
Reputation: 161
Change it to this:
%files
%dir %attr(-, myuser, mygroup) /opt/myapp
%attr(750, myuser, mygroup) /opt/myapp/bin
notice the %dir
for the directory. That should get rid of the files listed twice warning.
Upvotes: 10
Reputation: 6748
It means just that - it's listed twice. ;) I've never had a problem with it, but I don't know which will win.
As a side note, you probably shouldn't list /etc
on its own, since you don't want to own that.
Upvotes: 6