From 683028b4f5dcf7fb443c85f331e319123f0027a5 Mon Sep 17 00:00:00 2001 From: Jiri Popelka Date: Wed, 1 Apr 2015 13:14:57 +0200 Subject: [PATCH] Systemd service unit files. As of August 2014, all Linux distributions include systemd and most of them enable it by default. https://en.wikipedia.org/wiki/Systemd#Adoption There are many systemd HOWTOs, like: https://wiki.archlinux.org/index.php/systemd https://coreos.com/docs/launching-containers/launching/getting-started-with-systemd/ https://fedoraproject.org/wiki/Packaging:Systemd For description of options in the service files, see: http://www.freedesktop.org/software/systemd/man/systemd.unit.html http://www.freedesktop.org/software/systemd/man/systemd.service.html Installation of these files is turned on with --enable-systemd configure option. They are installed into PREFIX/lib/systemd/system/ by default. One can also use --with-systemd-unitdir to specify another directory. For now the template files reside in src/bin/keactrl/ as I haven't figured out a better place. --- configure.ac | 12 ++++++++++ src/bin/keactrl/Makefile.am | 39 ++++++++++++++++++++++++++++++-- src/bin/keactrl/kea-dhcp-ddns.service.in | 12 ++++++++++ src/bin/keactrl/kea-dhcp4.service.in | 12 ++++++++++ src/bin/keactrl/kea-dhcp6.service.in | 12 ++++++++++ tools/path_replacer.sh.in | 4 +++- 6 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 src/bin/keactrl/kea-dhcp-ddns.service.in create mode 100644 src/bin/keactrl/kea-dhcp4.service.in create mode 100644 src/bin/keactrl/kea-dhcp6.service.in diff --git a/configure.ac b/configure.ac index a2b0daf..aa614c0 100644 --- a/configure.ac +++ b/configure.ac @@ -1367,6 +1367,18 @@ if test "x$VALGRIND" != "xno"; then found_valgrind="found" fi +AC_ARG_ENABLE([systemd], + AS_HELP_STRING([--enable-systemd], [enable systemd support]), + [use_systemd=$enableval], [use_systemd=no]) +AM_CONDITIONAL(USE_SYSTEMD, test "x$use_systemd" != "xno") +AC_SUBST(USE_SYSTEMD) + +AC_ARG_WITH([systemd-unitdir], + AS_HELP_STRING([--with-systemd-unitdir=PATH], + [specify exact directory for systemd service files, defaults to PREFIX/lib/systemd/system/]), + [SYSTEMD_UNITDIR=$withval], [SYSTEMD_UNITDIR="${prefix}/lib/systemd/system"]) +AC_SUBST(SYSTEMD_UNITDIR) + # Check for optreset in unistd.h. On BSD systems the optreset is # used to reset the state of getopt() function. Resetting its state # is required if command line arguments are parsed multiple times diff --git a/src/bin/keactrl/Makefile.am b/src/bin/keactrl/Makefile.am index c83a597..b494160 100644 --- a/src/bin/keactrl/Makefile.am +++ b/src/bin/keactrl/Makefile.am @@ -32,9 +32,36 @@ endif kea.conf: kea.conf.pre $(top_builddir)/tools/path_replacer.sh $(top_srcdir)/src/bin/keactrl/kea.conf.pre $@ +INSTALL_TARGETS = install-empty + if INSTALL_CONFIGURATIONS -install-data-local: +INSTALL_TARGETS += install-config-files + +endif + +if USE_SYSTEMD + +EXTRA_DIST += kea-dhcp4.service.in kea-dhcp6.service.in kea-dhcp-ddns.service.in +DISTCLEANFILES += kea-dhcp4.service kea-dhcp6.service kea-dhcp-ddns.service +BUILT_SOURCES += kea-dhcp4.service kea-dhcp6.service kea-dhcp-ddns.service +INSTALL_TARGETS += install-systemd-files + +endif + +kea-dhcp4.service: kea-dhcp4.service.in + $(top_builddir)/tools/path_replacer.sh $< $@ + +kea-dhcp6.service: kea-dhcp6.service.in + $(top_builddir)/tools/path_replacer.sh $< $@ + +kea-dhcp-ddns.service: kea-dhcp-ddns.service.in + $(top_builddir)/tools/path_replacer.sh $< $@ + +install-empty: + : + +install-config-files: $(mkinstalldirs) $(DESTDIR)/@sysconfdir@/@PACKAGE@ for f in $(CONFIGFILES) ; do \ if test ! -f $(DESTDIR)$(sysconfdir)/@PACKAGE@/$$f; then \ @@ -42,4 +69,12 @@ install-data-local: fi ; \ done -endif +install-systemd-files: + $(MKDIR_P) $(DESTDIR)$(SYSTEMD_UNITDIR) + $(INSTALL_DATA) kea-dhcp4.service $(DESTDIR)$(SYSTEMD_UNITDIR)/kea-dhcp4.service + $(INSTALL_DATA) kea-dhcp6.service $(DESTDIR)$(SYSTEMD_UNITDIR)/kea-dhcp6.service + $(INSTALL_DATA) kea-dhcp-ddns.service $(DESTDIR)$(SYSTEMD_UNITDIR)/kea-dhcp-ddns.service + +install-data-local: $(INSTALL_TARGETS) + +uninstall-local: $(UNINSTALL_TARGETS) diff --git a/src/bin/keactrl/kea-dhcp-ddns.service.in b/src/bin/keactrl/kea-dhcp-ddns.service.in new file mode 100644 index 0000000..d1e0526 --- /dev/null +++ b/src/bin/keactrl/kea-dhcp-ddns.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=Kea DHCP-DDNS Server +Documentation=man:kea-dhcp-ddns(8) +Wants=network-online.target +After=network-online.target +After=time-sync.target + +[Service] +ExecStart=@sbindir@/kea-dhcp-ddns -c @sysconfdir@/kea/kea.conf + +[Install] +WantedBy=multi-user.target diff --git a/src/bin/keactrl/kea-dhcp4.service.in b/src/bin/keactrl/kea-dhcp4.service.in new file mode 100644 index 0000000..80977d6 --- /dev/null +++ b/src/bin/keactrl/kea-dhcp4.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=Kea DHCPv4 Server +Documentation=man:kea-dhcp4(8) +Wants=network-online.target +After=network-online.target +After=time-sync.target + +[Service] +ExecStart=@sbindir@/kea-dhcp4 -c @sysconfdir@/kea/kea.conf + +[Install] +WantedBy=multi-user.target diff --git a/src/bin/keactrl/kea-dhcp6.service.in b/src/bin/keactrl/kea-dhcp6.service.in new file mode 100644 index 0000000..c24f584 --- /dev/null +++ b/src/bin/keactrl/kea-dhcp6.service.in @@ -0,0 +1,12 @@ +[Unit] +Description=Kea DHCPv6 Server +Documentation=man:kea-dhcp6(8) +Wants=network-online.target +After=network-online.target +After=time-sync.target + +[Service] +ExecStart=@sbindir@/kea-dhcp6 -c @sysconfdir@/kea/kea.conf + +[Install] +WantedBy=multi-user.target diff --git a/tools/path_replacer.sh.in b/tools/path_replacer.sh.in index 43d7bff..82625ca 100644 --- a/tools/path_replacer.sh.in +++ b/tools/path_replacer.sh.in @@ -27,12 +27,14 @@ prefix=@prefix@ sysconfdir=@sysconfdir@ localstatedir=@localstatedir@ +sbindir=@sbindir@ echo "Replacing \@prefix\@ with ${prefix}" echo "Replacing \@sysconfdir\@ with ${sysconfdir}" echo "Replacing \@localstatedir\@ with ${localstatedir}" +echo "Replacing \@sbindir\@ with ${sbindir}" echo "Input file: $1" echo "Output file: $2" -sed -e "s@SEP@\@localstatedir\@@SEP@${localstatedir}@SEP@g; s@SEP@\@prefix@@SEP@${prefix}@SEP@g; s@SEP@\@sysconfdir@@SEP@${sysconfdir}@SEP@g" $1 > $2 +sed -e "s@SEP@\@localstatedir\@@SEP@${localstatedir}@SEP@g; s@SEP@\@prefix\@@SEP@${prefix}@SEP@g; s@SEP@\@sysconfdir\@@SEP@${sysconfdir}@SEP@g; s@SEP@\@sbindir\@@SEP@${sbindir}@SEP@g" $1 > $2 -- 2.3.4