Hey!
"birdc configure" (or any command in fact) exits with 0 on error. This
is a bit annoying as when using "systemctl reload bird", we get no
notification there is an error.
Looking at the source code, it seems there is no easy way to hack around
that. Commands do not report an error code and messages printed are not
tagged as errors.
Here is a small workaround for systemd:
>From 5cbc487c4d54033c688258a5361377f72f53c264 Mon Sep 17 00:00:00 2001
From: Vincent Bernat <[email protected]>
Date: Thu, 10 Mar 2022 19:36:53 +0100
Subject: [PATCH] Pkg: check configuration before reloading with systemd
Also, update the RPM version to use "birdc configure" instead of "kill
-HUP".
---
distro/pkg/deb/bird2.bird.service | 1 +
distro/pkg/rpm/bird.service | 4 +++-
2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/distro/pkg/deb/bird2.bird.service b/distro/pkg/deb/bird2.bird.service
index 37e75fb41c6a..ae48f7f46cfa 100644
--- a/distro/pkg/deb/bird2.bird.service
+++ b/distro/pkg/deb/bird2.bird.service
@@ -6,6 +6,7 @@ After=network.target
EnvironmentFile=/etc/bird/envvars
ExecStartPre=/usr/lib/bird/prepare-environment
ExecStartPre=/usr/sbin/bird -p
+ExecReload=/usr/sbin/bird -p
ExecReload=/usr/sbin/birdc configure
ExecStart=/usr/sbin/bird -f -u $BIRD_RUN_USER -g $BIRD_RUN_GROUP $BIRD_ARGS
Restart=on-abort
diff --git a/distro/pkg/rpm/bird.service b/distro/pkg/rpm/bird.service
index fa203c781905..aa6e12dc5489 100644
--- a/distro/pkg/rpm/bird.service
+++ b/distro/pkg/rpm/bird.service
@@ -5,8 +5,10 @@ After=network.target
[Service]
Type=simple
+ExecStartPre=/usr/sbin/bird -p
ExecStart=/usr/sbin/bird -f -u bird -g bird
-ExecReload=/bin/kill -HUP $MAINPID
+ExecReload=/usr/sbin/bird -p
+ExecReload=/usr/sbin/birdc configure
Restart=on-failure
[Install]
--
2.35.1
--
Keep it simple to make it faster.
- The Elements of Programming Style (Kernighan & Plauger)