]> git.puffer.fish Git - mirror/frr.git/commit
tools: fix systemd dependency graph 3716/head
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:11 +0000 (19:47 +0000)
commitf351f5f971e2a37c74e1c966532376177ba920ec
tree0ebe576fb7ffa28516148fbcd2fea25e76618e4f
parent37259cd97dd8be3d19d3c42c371745ca0e0b4081
tools: fix systemd dependency graph

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