[systemd-devel] systemd shutdown vs ostree
Lennart Poettering
lennart at poettering.net
Thu Sep 12 09:43:43 PDT 2013
On Sat, 20.07.13 18:50, Colin Walters (walters at verbum.org) wrote:
Heya,
> So OSTree sets up systemd inside a chroot - /usr is a read-only bind
> mount, and /var is a bind mount outside the root to a shared location.
> Furthermore, /sysroot points to the real root.
>
> Since last time we discussed this:
> http://lists.freedesktop.org/archives/systemd-devel/2012-September/006668.html
> I now use this service inside dracut:
> https://git.gnome.org/browse/ostree/tree/src/dracut/ostree-prepare-root.service
> Which executes:
> https://git.gnome.org/browse/ostree/tree/src/switchroot/ostree-prepare-root.c
>
> Then finally we do dracut's normal systemctl switch-root, and everything
> continues as normal. I haven't had to patch the systemd codebase at all
> for this.
>
> The problem is that on shutdown, systemd will synthesize usr.mount and
> var.mount from /proc/self/mountinfo, but it can't really unmount them
> until the same point as the rootfs. Because these units fail to
> unmount, the normal shutdown process wedges.
So, as mentioned in the other thread, /usr should probably be on some
"OS resource blacklist" or so, and not attempted to be shutdown.
But unmounting /var during shutdown should actually work. The only thing
that currently stops this from working cleanly is that journald is
configured to stay around until the last moment, but currently has not
interface to tell it to move its logging back to /run from /var. When we
have that then the /var issue should go away for you, no?
Now, moving journald at shutdown back from /var to /run would ideally be
done via some sane synchronous bus calls. However, we can only do that
when we have kdbus because dbus-daemon would otherwise be both client
and server to journald, which is deadlock territorry then...
Lennart
--
Lennart Poettering - Red Hat, Inc.
More information about the systemd-devel
mailing list