[systemd-devel] [RFC][PATCH] core: sysvcompat - $network should be equivalent to network-online, rather than network target

Tom Gundersen teg at jklm.no
Mon May 12 15:23:53 PDT 2014


Most likely the  facility needed is actual connectivity, rather than whether or not the
network managment daemon is running.

We also need to explicitly pull in the network-online.target, as it is not active by
default.

This means {systemd-networkd,NetworkManager}-wait-online.service, can be enabled by default
as part of network-online.target, and only delay boot when some service actively pulls it in.

See: <https://bugzilla.gnome.org/show_bug.cgi?id=728965>

Cc: Pavel Šimerda <psimerda at redhat.com>
Cc: Michal Sekletar <msekleta at redhat.com>
---
 TODO               | 4 ----
 src/core/service.c | 8 ++++++--
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/TODO b/TODO
index 50d3f79..3154fbd 100644
--- a/TODO
+++ b/TODO
@@ -705,10 +705,6 @@ Features:
 
 External:
 
-* NM: figure out what to do about network-online.target.
-   - maybe pull in the target as dependency for LSB initscripts ordered now after network.target
-   - https://bugzilla.gnome.org/show_bug.cgi?id=728965
-
 * dbus:
    - natively watch for dbus-*.service symlinks (PENDING)
    - teach dbus to activate all services it finds in /etc/systemd/services/org-*.service
diff --git a/src/core/service.c b/src/core/service.c
index 694a265..4b6220e 100644
--- a/src/core/service.c
+++ b/src/core/service.c
@@ -392,7 +392,7 @@ static int sysv_translate_facility(const char *name, const char *filename, char
         static const char * const table[] = {
                 /* LSB defined facilities */
                 "local_fs",             NULL,
-                "network",              SPECIAL_NETWORK_TARGET,
+                "network",              SPECIAL_NETWORK_ONLINE_TARGET,
                 "named",                SPECIAL_NSS_LOOKUP_TARGET,
                 "portmap",              SPECIAL_RPCBIND_TARGET,
                 "remote_fs",            SPECIAL_REMOTE_FS_TARGET,
@@ -854,7 +854,11 @@ static int service_load_sysv_path(Service *s, const char *path) {
                                         if (r == 0)
                                                 continue;
 
-                                        r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
+                                        if (streq(m, SPECIAL_NETWORK_ONLINE_TARGET) && !startswith_no_case(t, "X-Start-Before:"))
+                                                /* the network-online target is special, as it needs to be actively pulled in */
+                                                r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, m, NULL, true);
+                                        else
+                                                r = unit_add_dependency_by_name(u, startswith_no_case(t, "X-Start-Before:") ? UNIT_BEFORE : UNIT_AFTER, m, NULL, true);
 
                                         if (r < 0)
                                                 log_error_unit(u->id, "[%s:%u] Failed to add dependency on %s, ignoring: %s",
-- 
1.9.0



More information about the systemd-devel mailing list