what does the rpmbuild warning "File listed twice" ACTUALLY MEAN?
Solution 1
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.
Solution 2
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)
Solution 3
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.
davka
Updated on June 17, 2022Comments
-
davka almost 2 years
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 -
Alex P about 10 yearsNote that using %dir will make it an empty directory. So this isn't as useful if you need to include everything in /opt/myapp and custom-configure the permissions on just the bin subdir.
-
Saule about 9 yearsthanks, it worked. So I can do /home/oracle/scripts %exclude /home/oracle/scripts/myconfig.config %config(noreplace) /home/oracle/scripts/myconfig.config without the warning about duplicate file
-
Bruno9779 almost 9 yearsThis answer is wrong. If you list /etc, the rpm will "own" all files that are in %{buildroot}/etc, not in /etc. So, listing /etc in the %files section is common practice and there isn't any real drawback
-
Jeremy Visser over 8 yearsIf you attempt to install two packages that try to own
/etc
, RPM will refuse to install the second one, which is why it is to be avoided. -
Bruno9779 over 8 yearsThis is true only in the case of %dir /etc. If you simply list /etc the files owned by the package are the ones inside of it but not the dir itself
-
Chen Levy about 8 yearsUnfortunately on my CentOS 5.5 adding
%exclude
does not allow me to re-include files later. -
dannysauer about 6 yearsWhile this does suppress the error, it also results in the package not including the file at all on rpmbuild 4.8.0 - which is not exactly the expected result. :)
-
Bruno9779 about 6 years@dannysauer you need to explicitly include the files you need after the %exclude statement. I haven't built any rpm package in a while, I gotta try it on rpmbuild 4.8.0
-
dannysauer about 6 years@Bruno9779 I did include after the exclude, just like in the examples where a directory is included, then a subdir and file inside are excluded then included. It was RHEL6, so could just be an old bug / behavior. I really need to move this process to a RHEL7 system anyway. ;)
-
itsadok about 3 yearsThe link in the comment above no longer works. Use ftp.rpm.org/max-rpm/s1-rpm-inside-files-list-directives.html instead.