]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tools: fix systemd dependency graph
authorQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 6 Feb 2019 19:40:55 +0000 (19:40 +0000)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 6 Feb 2019 19:47:56 +0000 (19:47 +0000)
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 <qlyoung@cumulusnetworks.com>
Signed-off-by: David Lamparter <equinox@diac24.net>
redhat/frr.service
tools/frr.service

index 3ae0aabfe2a61ac746b090726f1ad595e82f8a11..01934a94e2ef0126576a11fd7aac129c7433ac44 100644 (file)
@@ -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
index c7568593b36d22c6dbcddc07ca8e2f9c644de47a..aa45f420fea3b8559649da23b1b903c294d14031 100644 (file)
@@ -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