From 9f238ccd3168b31a4bebcc454000cac2ec606715 Mon Sep 17 00:00:00 2001 From: Quentin Young Date: Wed, 6 Feb 2019 19:40:55 +0000 Subject: [PATCH] tools: fix systemd dependency graph MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Currently our systemd dependencies look something like this (example from vanilla Debian 9): $ systemctl list-dependencies frr frr.service ● ├─system.slice ● └─sysinit.target ... $ systemctl list-dependencies --reverse frr frr.service ● └─network-online.target ● └─apt-daily.service Note that sysinit.target does not depend on any network* service or target. In other words, unless there is a service that requires network-online.service, even if FRR is enabled it will not be started. Therefore network-online.target is the wrong unit to have in WantedBy=, as it is not always started. This patch updates our service file so that it is properly started by the system when enabled, delayed until networking is up, and if possible delayed until after NetworkManager, systemd-networkd or any other networking configuration manager has finished performing its tasks - i.e. after network-online.target. After these changes our new dependency graph looks like this: $ systemctl list-dependencies frr frr.service ● ├─system.slice ● │ └─networking.service ● ├─network.target ● └─sysinit.target ... $ systemctl list-dependencies --reverse frr frr.service ● └─multi-user.target ● └─graphical.target This way, FRR will be started by multi-user.target (just like most applications), but delayed until after networking has been configured. In the same stroke, this should also fix issues on systems that do not provide "networking.service" (such as CentOS 7). Signed-off-by: Quentin Young Signed-off-by: David Lamparter --- redhat/frr.service | 7 ++++--- tools/frr.service | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/redhat/frr.service b/redhat/frr.service index 3ae0aabfe2..01934a94e2 100644 --- a/redhat/frr.service +++ b/redhat/frr.service @@ -1,6 +1,8 @@ [Unit] Description=FRRouting (FRR) -After=syslog.target networking.service +Wants=network.target +After=network-pre.target systemd-sysctl.service +Before=network.target OnFailure=heartbeat-failed@%n.service [Service] @@ -19,5 +21,4 @@ ExecStop=/usr/lib/frr/frr stop ExecReload=/usr/lib/frr/frr reload [Install] -WantedBy=network-online.target - +WantedBy=multi-user.target diff --git a/tools/frr.service b/tools/frr.service index c7568593b3..aa45f420fe 100644 --- a/tools/frr.service +++ b/tools/frr.service @@ -1,7 +1,9 @@ [Unit] Description=FRRouting Documentation=https://frrouting.readthedocs.io/en/latest/setup.html -After=networking.service +Wants=network.target +After=network-pre.target systemd-sysctl.service +Before=network.target OnFailure=heartbeat-failed@%n.service [Service] @@ -20,4 +22,4 @@ ExecStop=/usr/lib/frr/frrinit.sh stop ExecReload=/usr/lib/frr/frrinit.sh reload [Install] -WantedBy=network-online.target +WantedBy=multi-user.target -- 2.39.5