From f54a87b800d551bec4532a5d3bf124d02e167856 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Thu, 24 Sep 2015 21:53:49 +0200 Subject: [PATCH] Optionally install systemd service files. If --with-systemd is given when running the configure script, two systemd service files will be installed. There is a template tinc@.service, which can be used to control individual instances of tinc. For example: systemctl enable tinc@foo Will create an instance for tinc with netname foo. There is also a tinc.service, which can be used to start and stop all instances at once. --- Makefile.am | 2 +- configure.ac | 14 +++++++++++++- systemd/Makefile.am | 4 ++++ systemd/tinc.service | 20 ++++++++++++++++++++ systemd/tinc@.service | 19 +++++++++++++++++++ 5 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 systemd/Makefile.am create mode 100644 systemd/tinc.service create mode 100644 systemd/tinc@.service diff --git a/Makefile.am b/Makefile.am index c0014d50..177f5499 100644 --- a/Makefile.am +++ b/Makefile.am @@ -2,7 +2,7 @@ AUTOMAKE_OPTIONS = gnu -SUBDIRS = src doc gui test +SUBDIRS = src doc gui test systemd ACLOCAL_AMFLAGS = -I m4 diff --git a/configure.ac b/configure.ac index 04f16bf6..e6fd3b08 100644 --- a/configure.ac +++ b/configure.ac @@ -115,6 +115,17 @@ AC_ARG_WITH(windows2000, ] ) +AC_ARG_WITH(systemd, + AS_HELP_STRING([--with-systemd@<:@=DIR@:>@], [install systemd service files @<:@to DIR if specified@:>@]), + [ systemd=true; systemd_path="$with_systemd" ], + [ systemd=false ] +) + +AS_IF([test "x$with_systemd" = "xyes"], [systemd_path="/lib/systemd/system"], + [AS_IF([test "x$with_systemd" = "xno"], [systemd=false])]) + +AC_SUBST(systemd_path, $systemd_path) + AM_CONDITIONAL(LINUX, test "$linux" = true) AM_CONDITIONAL(BSD, test "$bsd" = true) AM_CONDITIONAL(SOLARIS, test "$solaris" = true) @@ -123,6 +134,7 @@ AM_CONDITIONAL(CYGWIN, test "$cygwin" = true) AM_CONDITIONAL(UML, test "$uml" = true) AM_CONDITIONAL(VDE, test "$vde" = true) AM_CONDITIONAL(TUNEMU, test "$tunemu" = true) +AM_CONDITIONAL(WITH_SYSTEMD, test "$systemd" = true) AC_CACHE_SAVE @@ -250,6 +262,6 @@ AC_ARG_ENABLE(jumbograms, ] ) -AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile gui/Makefile test/Makefile]) +AC_CONFIG_FILES([Makefile src/Makefile doc/Makefile gui/Makefile test/Makefile systemd/Makefile]) AC_OUTPUT diff --git a/systemd/Makefile.am b/systemd/Makefile.am new file mode 100644 index 00000000..a1bfe124 --- /dev/null +++ b/systemd/Makefile.am @@ -0,0 +1,4 @@ +if WITH_SYSTEMD +systemddir = @systemd_path@ +dist_systemd_DATA = tinc.service tinc@.service +endif diff --git a/systemd/tinc.service b/systemd/tinc.service new file mode 100644 index 00000000..d911fa78 --- /dev/null +++ b/systemd/tinc.service @@ -0,0 +1,20 @@ +# This is a mostly empty service, but allows commands like stop, start, reload +# to propagate to all tinc@ service instances. + +[Unit] +Description=Tinc VPN +Documentation=info:tinc +Documentation=man:tinc(8) man:tinc.conf(5) +Documentation=http://tinc-vpn.org/docs/ +After=network.target +Wants=network.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/bin/true +ExecReload=/bin/true +WorkingDirectory=/etc/tinc + +[Install] +WantedBy=multi-user.target diff --git a/systemd/tinc@.service b/systemd/tinc@.service new file mode 100644 index 00000000..78ef25b1 --- /dev/null +++ b/systemd/tinc@.service @@ -0,0 +1,19 @@ +[Unit] +Description=Tinc net %i +Documentation=info:tinc +Documentation=man:tinc(8) man:tinc.conf(5) +Documentation=http://tinc-vpn.org/docs/ +PartOf=tinc.service +ReloadPropagatedFrom=tinc.service + +[Service] +Type=simple +WorkingDirectory=/etc/tinc/%i +ExecStart=/usr/sbin/tincd -n %i -D +ExecReload=/usr/sbin/tinc -n %i reload +Restart=on-failure +RestartSec=5 +TimeoutStopSec=5 + +[Install] +WantedBy=tinc.service