Comment 6 for bug 1438612

Revision history for this message
Martin Pitt (pitti) wrote :

Andy, Colin, can you please revert the workaround in /lib/systemd/system/NetworkManager.service (remove After=dbus.service), and instead append these lines in /lib/systemd/system/dbus.service, to the [Service] section:

ExecStop=/bin/true
KillMode=none

This makes things work in my tests, and is a better fix IMHO. But I'd like to confirm that this works for you too. Thanks!

Background:

I discussed that with with Michael Biebl. D-Bus is really hairy as you get into circular dependencies very easily (with e. g. /var or /usr on NFS), so making it start earlier could miss out some important remote mounts. What we *really* want is to say "stop D-Bus after all D-Bus clients", thus synthesize After=dbus.service to all Type=dbus services. At the moment this only implies After=dbus.socket, but restarting dbus after you already shut it down isn't working as dbus cannot save/restore its state. At this state of the release cycle I don't have the guts to completely rearchitect this.

Also, stopping D-Bus in a running system isn't something which we ever supported; to the contrary, we patched several packages to avoid restarting/stopping D-Bus in postinsts, as stopping d-bus in a running system is shooting yourself into the foot (independent of which init system you use). Thus leaving D-Bus running until the bitter end should be fine, it doesn't have any file system things to do on shutdown. This also approximates the brave new kdbus world where d-bus is basically "always available".