networkd: don't hard depend on system bus

We may not have a dbus daemon in the initrd (until we can rely on kdbus). In
this case, simply ignore any attempts at using the bus. There is only one user
for now, but surely more to come.

In order to work reliably in the real root without kdbus, but at the same time
don't delay boot when kdbus is in use, order ourselves after dbus.service.
This commit is contained in:
Tom Gundersen 2014-01-18 01:37:35 +01:00
parent b2ad8a16ee
commit bcbca8291f
3 changed files with 12 additions and 3 deletions

View File

@ -325,11 +325,15 @@ static int set_hostname(sd_bus *bus, const char *hostname) {
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
int r = 0;
assert(bus);
assert(hostname);
log_debug("Setting transient hostname: '%s'", hostname);
if (!bus) { /* TODO: replace by assert when we can rely on kdbus */
log_info("Not connected to system bus, ignoring transient hostname.");
return 0;
}
r = sd_bus_message_new_method_call(
bus,
"org.freedesktop.hostname1",

View File

@ -55,7 +55,7 @@ int manager_new(Manager **ret) {
return r;
r = sd_bus_default_system(&m->bus);
if (r < 0)
if (r < 0 && r != -ENOENT) /* TODO: drop when we can rely on kdbus */
return r;
m->udev = udev_new();
@ -288,6 +288,11 @@ int manager_rtnl_listen(Manager *m) {
int manager_bus_listen(Manager *m) {
int r;
assert(m->event);
if (!m->bus) /* TODO: drop when we can rely on kdbus */
return 0;
r = sd_bus_attach_event(m->bus, m->event, 0);
if (r < 0)
return r;

View File

@ -9,7 +9,7 @@
Description=Network Service
Documentation=man:systemd-networkd.service(8)
DefaultDependencies=no
After=dbus.socket
After=dbus.service
Before=network.target
Wants=network.target
ConditionCapability=CAP_NET_ADMIN