From 63cbd313120da72cd7537863d7d7553323a4623f Mon Sep 17 00:00:00 2001
From: Guillaume Rousse <guillaume.rousse@renater.fr>
Date: Tue, 1 Feb 2022 15:26:02 +0100
Subject: [PATCH] add systemd unit file

---
 Makefile.am                       |  2 +-
 configure.ac                      | 24 ++++++++++++++++++++++
 lib/AccountManager/App.pm         |  2 +-
 systemd/Makefile.am               | 34 +++++++++++++++++++++++++++++++
 systemd/access-check.service.in   | 13 ++++++++++++
 systemd/access-check.sysconfig.in |  5 +++++
 6 files changed, 78 insertions(+), 2 deletions(-)
 create mode 100644 systemd/Makefile.am
 create mode 100644 systemd/access-check.service.in
 create mode 100644 systemd/access-check.sysconfig.in

diff --git a/Makefile.am b/Makefile.am
index 6ac5d47..c005805 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,4 +1,4 @@
-SUBDIRS = bin conf lib public templates
+SUBDIRS = bin conf lib public templates systemd
 
 AM_TESTS_ENVIRONMENT = PERL5LIB='$(srcdir)/lib'; export PERL5LIB;
 TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) \
diff --git a/configure.ac b/configure.ac
index efb70d0..fbff029 100644
--- a/configure.ac
+++ b/configure.ac
@@ -6,7 +6,30 @@ AC_PROG_LN_S
 
 confdir=$sysconfdir/access-check
 
+PKG_PROG_PKG_CONFIG
+AC_ARG_WITH([systemd-unitdir],
+     [AS_HELP_STRING([--with-systemd-unitdir=DIR], [Directory for systemd service file @<:@default=automatic@:>@])],
+     [systemdunitdir=$with_systemd_unitdir],
+     [systemdunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]
+)
+AC_ARG_WITH([systemd-user],
+     [AS_HELP_STRING([--with-systemd-user=USER], [User for systemd service @<:@default=root@:>@])],
+     [systemduser=$with_systemd_user],
+     [systemduser="root"]
+)
+AC_ARG_WITH([systemd-group],
+     [AS_HELP_STRING([--with-systemd-group=GROUP], [Group for systemd service @<:@default=root@:>@])],
+     [systemdgroup=$with_systemd_group],
+     [systemdgroup="root"]
+)
+systemdconfdir=$sysconfdir/sysconfig
+AM_CONDITIONAL([HAVE_SYSTEMD], [test "x$systemdunitdir" != "x"])
+
 AC_SUBST(confdir)
+AC_SUBST(systemdunitdir)
+AC_SUBST(systemdconfdir)
+AC_SUBST(systemduser)
+AC_SUBST(systemdgroup)
 
 AC_CONFIG_FILES(
     Makefile
@@ -15,6 +38,7 @@ AC_CONFIG_FILES(
     lib/Makefile
     templates/Makefile
     public/Makefile
+    systemd/Makefile
 )
 
 AC_OUTPUT
diff --git a/lib/AccountManager/App.pm b/lib/AccountManager/App.pm
index 903c262..8e5e3ca 100644
--- a/lib/AccountManager/App.pm
+++ b/lib/AccountManager/App.pm
@@ -16,7 +16,7 @@ use constant {
 sub startup {
     my $self = shift;
 
-    $self->plugin('INIConfig', { file => $ENV{MOJO_CONFIG} || 'conf/manager.conf' });
+    $self->plugin('INIConfig', { file => $ENV{ACCESS_CHECK_CONFIG} || 'conf/manager.conf' });
 
     $self->plugin(
         'TemplateToolkit',
diff --git a/systemd/Makefile.am b/systemd/Makefile.am
new file mode 100644
index 0000000..9c3fe46
--- /dev/null
+++ b/systemd/Makefile.am
@@ -0,0 +1,34 @@
+EXTRA_DIST = access-check.sysconfig.in \
+	     access-check.service.in
+
+if HAVE_SYSTEMD
+appbindir = $(pkgdatadir)/bin
+noinst_DATA = access-check.sysconfig
+systemdunit_DATA = access-check.service
+
+CLEANFILES = $(systemdunit_DATA) $(noinst_DATA)
+
+access-check.service: Makefile access-check.service.in
+	sed \
+		-e 's|[@]systemdconfdir[@]|$(systemdconfdir)|' \
+		-e 's|[@]appbindir[@]|$(appbindir)|' \
+		-e 's|[@]systemduser[@]|$(systemduser)|' \
+		-e 's|[@]systemdgroup[@]|$(systemdgroup)|' \
+		< $(srcdir)/$@.in > $@
+
+access-check.sysconfig: Makefile access-check.sysconfig.in
+	sed \
+		-e 's|[@]confdir[@]|$(confdir)|' \
+		< $(srcdir)/$@.in > $@
+
+install-data-local:
+	$(mkinstalldirs) $(DESTDIR)$(systemdconfdir)
+	if [ -f $(DESTDIR)$(systemdconfdir)/access-check ]; then                   \
+	    $(INSTALL_DATA) access-check.sysconfig $(DESTDIR)$(systemdconfdir)/access-check.new; \
+	else                                                                   \
+	    $(INSTALL_DATA) access-check.sysconfig $(DESTDIR)$(systemdconfdir)/access-check;     \
+	fi
+
+uninstall-local:
+	rm -f $(DESTDIR)$(systemdconfdir)/access-check
+endif
diff --git a/systemd/access-check.service.in b/systemd/access-check.service.in
new file mode 100644
index 0000000..4e65230
--- /dev/null
+++ b/systemd/access-check.service.in
@@ -0,0 +1,13 @@
+[Unit]
+Description=access-check account manager
+
+[Service]
+Type=simple
+EnvironmentFile=-@systemdconfdir@/access-check
+User=@systemduser@
+Group=@systemdgroup@
+ExecStart=@appbindir@/app $ACCESS_CHECK_SERVER -m $ACCESS_CHECK_MODE -l $ACCESS_CHECK_URL $ACCESS_CHECK_OPTIONS
+KillMode=process
+
+[Install]
+WantedBy=multi-user.target
diff --git a/systemd/access-check.sysconfig.in b/systemd/access-check.sysconfig.in
new file mode 100644
index 0000000..cd44c65
--- /dev/null
+++ b/systemd/access-check.sysconfig.in
@@ -0,0 +1,5 @@
+ACCESS_CHECK_MODE=development
+ACCESS_CHECK_SERVER=daemon
+ACCESS_CHECK_URL=http://127.0.0.1:3000
+ACCESS_CHECK_OPTIONS=
+ACCESS_CHECK_CONFIG=@confdir@/manager.conf
-- 
GitLab