As mentioned by Neal Gompa on the dev@ mailing list [0], RPM seems to be generating new filedeps that used not to exist a couple of months ago, and it breaks at least mock chroots. This issue was hinted by this new mock failure (it worked fine as of May 8th, 2016): -------------- # dnf --installroot=/tmp/mgaroot6 install basesystem-minimal rpm-build rpm-mageia-setup-build rpm-mageia-setup [...] Running transaction check Error: transaction check vs depsolve: /bin/sh is needed by iputils-20160308-1.mga6.x86_64 To diagnose the problem, try running: 'rpm -Va --nofiles --nodigest'. You probably have corrupted RPMDB, running 'rpm --rebuilddb' might fix the issue. The downloaded packages were saved in cache until the next successful transaction. -------------- /bin/sh is indeed a filedep of iputils, though it wasn't a dependency for the previous version of iputils [1]; the package was updated 3 weeks ago [2], so we think it might be a RPM issue introduced before that. See also this comparison of RPM metadata between iputils 20150508 [3] and 20160308 [4]. Further input from other packagers is very welcome to help understand this bug better, assess its impact and see how we can fix it. [0] https://ml.mageia.org/l/arc/dev/2016-06/msg00011.html [1] https://paste.fedoraproject.org/373343/78765414/ [2] http://svnweb.mageia.org/packages/cauldron/iputils/current/SPECS/iputils.spec?view=log [3] https://paste.fedoraproject.org/373348/64788438/ [4] https://paste.fedoraproject.org/373349/47884821/
CC: (none) => ngompa13, pkg-bugs
(In reply to Rémi Verschelde from comment #0) > As mentioned by Neal Gompa on the dev@ mailing list [0], RPM seems to be > generating new filedeps that used not to exist a couple of months ago, and > it breaks at least mock chroots. > ... > > /bin/sh is indeed a filedep of iputils, though it wasn't a dependency for > the previous version of iputils [1]; the package was updated 3 weeks ago > [2], so we think it might be a RPM issue introduced before that. > I don't think that this is a RPM issue. rpm -qpv --requires iputils-20160308-1.mga6.x86_64.rpm interp,pretrans: /bin/sh pre: filesystem >= 2.1.9-18 ... rpm -qp --scripts iputils-20160308-1.mga6.x86_64.rpm pretrans scriptlet (using /bin/sh): if [ -e /usr/bin/ping6 -a ! -L %{bindir}/ping6 ]; then rm -f /usr/bin/ping6 fi iputils 20160308-1.mga6 requires /bin/sh because of pretrans script added in svn rev. 1011621 http://svnweb.mageia.org/packages/cauldron/iputils/current/SPECS/iputils.spec?r1=1011424&r2=1011621 If iputils can be in the first transaction at install, this pretrans scriptlet should be written in lua instead of shell. with mga5, iputils 20140620-3.mga5 /bin/sh was required by posttrans script (posttrans script for apparmor dropped in svn rev. 913365) rpm -qv --requires iputils interp,posttrans: /bin/sh config: config(iputils) = 20140620-3.mga5 pre: filesystem >= 2.1.9-18 ... rpm -qv --scripts iputils posttrans scriptlet (using /bin/sh): # if we have apparmor installed, reload if it's being used if [ -x /sbin/apparmor_parser ]; then /sbin/service apparmor condreload fi
CC: (none) => lmenut
Also /bin/sh filedeps works fine with urpmi and always was. We've a cople comme fildeps exceptions for gendistrib
Status: NEW => RESOLVEDResolution: (none) => INVALIDAssignee: thierry.vignaud => bugsquadSource RPM: rpm-4.13.0-0.rc1.33.mga6 => (none)
So then it might simply be an issue with pretrans scriptlets not being written in Lua, because it is happening before the shell exists?
Glad we were wrong in our analysis then :D
Per Ãyvind Karlsen (proyvind) converted the %pretrans scriptlet to Lua, which I applied and submitted to the BS to hopefully fix the issue.
Even still, with the autoreq dep generators, if there's a dep on an interpreter, it's resolved to the package providing that interpreter as long as that package is installed during the build. Why is it not doing the same with /bin/sh on the scriplet and resolving it to bash? (Granted, with iputils being a basesystem package, it probably still needed to be rewritten in lua)
Because if it is pre transaction, it has to run before anything is installed. There's no way to satisfy that dependency on a chroot bootstrap.