On Sat, Jan 05, 2008 at 11:14:18AM -0600, Matt Domsch wrote:
On Sat, Jan 05, 2008 at 10:41:29AM -0600, Michael E Brown wrote:
> On Sat, Jan 05, 2008 at 10:09:26AM -0600, Matt Domsch wrote:
> > When I enabled the tmpfs plugin in mock 0.9.5 today, I get the
> > appended traceback, I believe during clean. With tmpfs plugin
> > disabled (the default), I get no such failure.
>
> What was your cmdline?
/usr/bin/time -p --output=$R/time.log ${SETARCH} mock
--rpmbuild_timeout=$((60 * 60 * 6)) \
--uniqueext=$rpm -r $e \
--resultdir $R/result/ \
rebuild $rpm
> Where did you pull mock 0.9 from, rawhide?
yes. The systems themselves are fully up-to-date F8, but am building
for rawhide of course.
> Had you previously built using this buildroot without using tmpfs?
possibly, but I don't think so. My rebuild run was going, and I
just edited the defaults.cfg file online, so the next invocations of
mock picked it up, and started failing with the traceback. I removed
the tmpfs plugin enable lines from defaults.cfg again, and it's all
working fine.
Ok, so we tracked down this error. The bottom line was that, out of 6
builders, one of them only had 512MB RAM, which isnt enough to use the
tmpfs plugin. There is a bad interaction between the tmpfs plugin and
the automatic cleanup-on-failure code. The tmpfs plugin unmounts the
tmpfs in a post-init hook, and this hook isnt called on failure. That
means that the chroot /root dir is still a mounted tmpfs when the
cleanup calls, which fails.
I'll do two things:
1) fix the tmpfs unmount to be called even in failure
2) make tmpfs take a "min_ram" argument, such that it will automatically
disable tmpfs if there doesnt appear to be enough ram (user
configurable).
--
Michael