Ondrej Zajicek <santiago@crfreenet.org> writes:
On Tue, Mar 06, 2018 at 12:26:02PM +0100, Toke Høiland-Jørgensen wrote:
Rob Lister <rob@lonap.net> writes:
root@rs1f:/etc/bird# service bird start Job for bird.service failed because the control process exited with error code. See "systemctl status bird.service" and "journalctl -xe" for details.
root@rs1f:/etc/bird# systemctl status bird.service ● bird.service - BIRD Internet Routing Daemon (IPv4) Loaded: loaded (/lib/systemd/system/bird.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/bird.service.d └─override.conf Active: failed (Result: exit-code) since Mon 2018-03-05 19:16:16 UTC; 8s ago Process: 510 ExecStartPre=/usr/sbin/bird -p (code=exited, status=1/FAILURE)
So this says that it's `bird -p` that fails. This is a check of the configuration file before the actual daemon is started. Since that is not passed the $BIRD_ARGS (as you can see from the command line invocation), it fails, which prevents startup of the actual daemon.
You'd have to add the same $BIRD_RUN_USER, $BIRD_RUN_GROUP and $BIRD_ARGS to the ExecStartPre line I guess; the fact that it is not there already is a bug in the systemd unit file, I'd say. I guess this is a packaging bug on the Debian side? In which case you should open a bug in the Debian system :)
Well, the only option that is necessary to add to ExecStartPre is the option -c for the config file. But other options there are probably harmless.
I was mostly thinking that the user and group should be there because that can influence whether or not the config file is readable; but it depends on whether bird actually drops privileges in -p mode.
Unfortunately with systemd we cannot find a better way to get sane behavior w.r.t. config file errors than execute BIRD two times (one in parser-only mode).
What's wrong with just exiting the main process on config file errors? Why is the pre-check needed? -Toke