From 539bab5ea7c47c713759aac42cc0a0d9806ba73f Mon Sep 17 00:00:00 2001 From: Ralph Boehme Date: Thu, 7 Feb 2013 12:25:13 +0100 Subject: [PATCH] systemd service file use PIDFile and ExecReload Add --with-lockfile=PATH configure option for specifying an alternative path for the netatalk lockfile. Implements FR #70. --- NEWS | 4 +++ configure.ac | 6 +++- distrib/initscripts/Makefile.am | 1 + distrib/initscripts/service.systemd.tmpl | 2 ++ etc/netatalk/netatalk.c | 6 ++-- include/atalk/paths.h | 29 ------------------ macros/netatalk.m4 | 38 ++++++++++++++++++++++-- macros/summary.m4 | 2 ++ 8 files changed, 53 insertions(+), 35 deletions(-) diff --git a/NEWS b/NEWS index 41aac88c..75a92291 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,10 @@ Changes in 3.0.3 ================ * UPD: afpd: Increase default DSI server quantum to 1 MB * UPD: bundled libevent2 is now static +* NEW: --with-lockfile=PATH configure option for specifying an + alternative path for the netatalk lockfile. +* UPD: systemd service file use PIDFile and ExecReload. + From FR #70. Changes in 3.0.2 ================ diff --git a/configure.ac b/configure.ac index bfb578ca..3c8843d1 100644 --- a/configure.ac +++ b/configure.ac @@ -180,10 +180,14 @@ AC_NETATALK_SENDFILE dnl Check whether bundled libevent shall not be used AC_NETATALK_LIBEVENT +dnl libatalk API checks +AC_DEVELOPER + dnl FHS stuff has to be done last because it overrides other defaults AC_NETATALK_FHS -AC_DEVELOPER +dnl netatalk lockfile path, must come after AC_NETATALK_FHS +AC_NETATALK_LOCKFILE CFLAGS="-I\$(top_srcdir)/include -I\$(top_srcdir)/sys $CFLAGS" UAMS_PATH="${uams_path}" diff --git a/distrib/initscripts/Makefile.am b/distrib/initscripts/Makefile.am index 5bdf9510..2d1cb3ab 100644 --- a/distrib/initscripts/Makefile.am +++ b/distrib/initscripts/Makefile.am @@ -13,6 +13,7 @@ pkgconfdir = @PKGCONFDIR@ -e s@:SBINDIR:@${sbindir}@ \ -e s@:ETCDIR:@${pkgconfdir}@ \ -e s@:NETATALK_VERSION:@${NETATALK_VERSION}@ \ + -e s@:PATH_NETATALK_LOCK:@${PATH_NETATALK_LOCK}@ \ <$< >$@ GENERATED_FILES = \ diff --git a/distrib/initscripts/service.systemd.tmpl b/distrib/initscripts/service.systemd.tmpl index d21dde92..670f1445 100644 --- a/distrib/initscripts/service.systemd.tmpl +++ b/distrib/initscripts/service.systemd.tmpl @@ -10,6 +10,8 @@ After=syslog.target network.target avahi-daemon.service Type=forking GuessMainPID=no ExecStart=:SBINDIR:/netatalk +PIDFile=:PATH_NETATALK_LOCK: +ExecReload=/bin/kill -HUP $MAINPID Restart=always RestartSec=1 diff --git a/etc/netatalk/netatalk.c b/etc/netatalk/netatalk.c index 9ac72c5a..1a31a3a9 100644 --- a/etc/netatalk/netatalk.c +++ b/etc/netatalk/netatalk.c @@ -209,7 +209,7 @@ static void kill_childs(int sig, ...) /* this get called when error conditions are met that require us to exit gracefully */ static void netatalk_exit(int ret) { - server_unlock(_PATH_NETATALK_LOCK); + server_unlock(PATH_NETATALK_LOCK); exit(ret); } @@ -270,13 +270,13 @@ int main(int argc, char **argv) } } - if (check_lockfile("netatalk", _PATH_NETATALK_LOCK) != 0) + if (check_lockfile("netatalk", PATH_NETATALK_LOCK) != 0) exit(EXITERR_SYS); if (!debug && daemonize(0, 0) != 0) exit(EXITERR_SYS); - if (create_lockfile("netatalk", _PATH_NETATALK_LOCK) != 0) + if (create_lockfile("netatalk", PATH_NETATALK_LOCK) != 0) exit(EXITERR_SYS); sigfillset(&blocksigs); diff --git a/include/atalk/paths.h b/include/atalk/paths.h index ba4d2f23..f5f6486c 100644 --- a/include/atalk/paths.h +++ b/include/atalk/paths.h @@ -13,34 +13,5 @@ #define ATALKPATHCAT(a,b) a/**/b #endif - -/* lock file path. this should be re-organized a bit. */ -#if ! defined (_PATH_LOCKDIR) -# if defined (FHS_COMPATIBILITY) || defined (__NetBSD__) || defined (__OpenBSD__) -# define _PATH_LOCKDIR "/var/run/" -# elif defined (BSD4_4) -# ifdef MACOSX_SERVER -# define _PATH_LOCKDIR "/var/run/" -# else -# define _PATH_LOCKDIR "/var/spool/lock/" -# endif -# elif defined (linux) -# define _PATH_LOCKDIR "/var/lock/" -# else -# define _PATH_LOCKDIR "/var/spool/locks/" -# endif -#endif - - -/* - * netatalk paths - */ -#define _PATH_AFPTKT "/tmp/AFPtktXXXXXX" -#if defined (FHS_COMPATIBILITY) || defined (__NetBSD__) || defined (__OpenBSD__) -# define _PATH_NETATALK_LOCK ATALKPATHCAT(_PATH_LOCKDIR,"netatalk.pid") -#else -# define _PATH_NETATALK_LOCK ATALKPATHCAT(_PATH_LOCKDIR,"netatalk") -#endif - #endif /* atalk/paths.h */ diff --git a/macros/netatalk.m4 b/macros/netatalk.m4 index e77aac53..72cbaebd 100644 --- a/macros/netatalk.m4 +++ b/macros/netatalk.m4 @@ -60,13 +60,47 @@ AC_ARG_ENABLE(fhs, use_pam_so=yes AC_DEFINE(FHS_COMPATIBILITY, 1, [Define if you want compatibily with the FHS]) AC_MSG_RESULT([yes]) + atalk_cv_fhs_compat=yes else AC_MSG_RESULT([no]) + atalk_cv_fhs_compat=no fi ],[ AC_MSG_RESULT([no]) - ] -)]) + atalk_cv_fhs_compat=no +])]) + +dnl netatalk lockfile path +AC_DEFUN([AC_NETATALK_LOCKFILE], [ + AC_MSG_CHECKING([netatalk lockfile path]) + AC_ARG_WITH( + lockfile, + [AS_HELP_STRING([--with-lockfile=PATH],[Path of netatalk lockfile])], + ac_cv_netatalk_lock=$withval, + ac_cv_netatalk_lock="" + ) + if test -z "$ac_cv_netatalk_lock" ; then + ac_cv_netatalk_lock=/var/spool/locks/netatalk + if test x"$atalk_cv_fhs_compat" = x"yes" ; then + ac_cv_netatalk_lock=/var/run/netatalk.pid + else + case "$host_os" in + *freebsd*) + ac_cv_netatalk_lock=/var/spool/lock/netatalk + ;; + *netbsd*|*openbsd*) + ac_cv_netatalk_lock=/var/run/netatalk.pid + ;; + *linux*) + ac_cv_netatalk_lock=/var/lock/netatalk + ;; + esac + fi + fi + AC_DEFINE_UNQUOTED(PATH_NETATALK_LOCK, ["$ac_cv_netatalk_lock"], [netatalk lockfile path]) + AC_SUBST(PATH_NETATALK_LOCK, ["$ac_cv_netatalk_lock"]) + AC_MSG_RESULT([$ac_cv_netatalk_lock]) +]) dnl 64bit platform check AC_DEFUN([AC_NETATALK_64BIT_LIBS], [ diff --git a/macros/summary.m4 b/macros/summary.m4 index 6c696fc2..f4d99863 100644 --- a/macros/summary.m4 +++ b/macros/summary.m4 @@ -9,6 +9,8 @@ AC_DEFUN([AC_NETATALK_CONFIG_SUMMARY], [ else AC_MSG_RESULT([ none]) fi + AC_MSG_RESULT([ Netatalk lockfile:]) + AC_MSG_RESULT([ $ac_cv_netatalk_lock]) AC_MSG_RESULT([ AFP:]) AC_MSG_RESULT([ Extended Attributes: $neta_cv_eas]) AC_MSG_RESULT([ ACL support: $with_acl_support]) -- 2.39.2