what does the rpmbuild warning "File listed twice" ACTUALLY MEAN?

davka picture davka · Dec 25, 2012 · Viewed 14.6k times · Source

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

Answer

Bruno9779 picture Bruno9779 · Jan 7, 2015

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)