Use systemd service manager notification
PATCH v2 1/2 Use systemd service manager notification
From: Christian Hesse <[email protected]...>
Notify systemd service manager when our initialization sequence completed. This helps ordering services as dependencies can rely on vpn being available.
Signed-off-by Christian Hesse <[email protected]...>
--- distro/systemd/[email protected]... | 1 + distro/systemd/[email protected]... | 1 + src/openvpn/init.c | 10 +++++++++- src/openvpn/init.h | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-)
distro/systemd/[email protected]... +1 -0
@@ -7,6 +7,7 @@ Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO [Service] +Type=notify PrivateTmp=true RuntimeDirectory=openvpn-client RuntimeDirectoryMode=0710
distro/systemd/[email protected]... +1 -0
@@ -7,6 +7,7 @@ Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO [Service] +Type=notify PrivateTmp=true RuntimeDirectory=openvpn-server RuntimeDirectoryMode=0710
src/openvpn/init.c +9 -1
@@ -1251,11 +1251,19 @@ initialization_sequence_completed (struct context *c, const unsigned int flags)show_adapters (M_INFO |M_NOPREFIX );msg (M_INFO ,"%s With Errors ( see http://openvpn.net/faq.html#dhcpclientserv )" , message);#else +#ifdef ENABLE_SYSTEMD +sd_notifyf (0 ,"STATUS=Failed to start up: %s With Errors\nERRNO=1" , message); +#endif /* HAVE_SYSTEMD_SD_DAEMON_H */ msg (M_INFO ,"%s With Errors" , message);#endif }else -msg (M_INFO ,"%s" , message); + { +#ifdef ENABLE_SYSTEMD +sd_notifyf (0 ,"READY=1\nSTATUS=%s\nMAINPID=%lu" , message, (unsigned long )getpid ()); +#endif +msg (M_INFO ,"%s" , message); + }/* Flag that we initialized */ if ((flags & (ISC_ERRORS |ISC_SERVER )) ==0 )
src/openvpn/init.h +4 -0
@@ -27,6 +27,10 @@#include "openvpn.h" +#ifdef ENABLE_SYSTEMD +#include <systemd/sd-daemon.h> +#endif +/* * Baseline maximum number of events * to wait for.
Signature · 1 line
2.10.2
PATCH v2 2/2 Refuse to daemonize when running from systemd
From: Christian Hesse <[email protected]...>
We start with systemd Type=notify, so refuse to daemonize. This does not affect starting openvpn from script or command line.
Signed-off-by Christian Hesse <[email protected]...>
--- distro/systemd/[email protected]... | 1 - distro/systemd/[email protected]... | 1 - src/openvpn/init.c | 7 +++++++ 3 files changed, 7 insertions(+), 2 deletions(-)
distro/systemd/[email protected]... +0 -1
@@ -12,7 +12,6 @@ PrivateTmp=true RuntimeDirectory=openvpn-client RuntimeDirectoryMode=0710 WorkingDirectory=/etc/openvpn/client -ExecStartPre=/bin/sh -c 'grep -q -E ^daemon %i.conf || exit 0 && /usr/bin/echo "OpenVPN configuration cannot contain --daemon when being managed by systemd" ; exit 1' ExecStart=/usr/sbin/openvpn --suppress-timestamps --nobind --config %i.conf CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE LimitNPROC=10
distro/systemd/[email protected]... +0 -1
@@ -12,7 +12,6 @@ PrivateTmp=true RuntimeDirectory=openvpn-server RuntimeDirectoryMode=0710 WorkingDirectory=/etc/openvpn/server -ExecStartPre=/bin/sh -c 'grep -q -E ^daemon %i.conf || exit 0 && /usr/bin/echo "OpenVPN configuration cannot contain --daemon when being managed by systemd" ; exit 1' ExecStart=/usr/sbin/openvpn --status %t/openvpn-server/status-%i.log --status-version 2 --suppress-timestamps --config %i.conf CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_OVERRIDE LimitNPROC=10
src/openvpn/init.c +7 -0
@@ -926,6 +926,13 @@ bool possibly_become_daemon (const struct options *options) {bool ret = false; + +#ifdef ENABLE_SYSTEMD +/* return without forking if we are running from systemd */ +if (sd_notify (0 ,"READY=0" ) >0 ) +return ret; +#endif +if (options->daemon) {ASSERT (!options->inetd);
Signature · 1 line
2.10.2