[tor-commits] [flashproxy/master] handle initscripts in a more robust way and provide an option not to install them
infinity0 at torproject.org
infinity0 at torproject.org
Thu Nov 21 13:18:46 UTC 2013
commit 471a4bc234be1bf7e5f33142b1d1c1688ee50bbf
Author: Ximin Luo <infinity0 at gmx.com>
Date: Sat Sep 14 15:59:51 2013 +0100
handle initscripts in a more robust way and provide an option not to install them
---
facilitator/Makefile.am | 76 +++++++++++++++++++++++++++++-----------------
facilitator/configure.ac | 8 +++++
2 files changed, 56 insertions(+), 28 deletions(-)
diff --git a/facilitator/Makefile.am b/facilitator/Makefile.am
index 44c0442..5705e91 100644
--- a/facilitator/Makefile.am
+++ b/facilitator/Makefile.am
@@ -1,7 +1,9 @@
# our own variables
fpfacilitatoruser = @fpfacilitatoruser@
-initscriptdir = $(sysconfdir)/init.d
+# unfortunately sysvinit does not support having initscripts in /usr/local/etc
+# yet, so we have to hard code a path here. :(
+initscriptdir = /etc/init.d
exampledir = $(docdir)/examples
appenginedir = $(pkgdatadir)/appengine
pkgconfdir = $(sysconfdir)/flashproxy
@@ -10,7 +12,9 @@ appengineconfdir = $(pkgconfdir)/reg-appengine
# automake PLVs
dist_bin_SCRIPTS = facilitator facilitator-email-poller facilitator-reg-daemon facilitator-reg facilitator.cgi fac.py
+if DO_INITSCRIPTS
initscript_SCRIPTS = init.d/facilitator init.d/facilitator-email-poller init.d/facilitator-reg-daemon
+endif
dist_doc_DATA = doc/appengine-howto.txt doc/facilitator-howto.txt doc/gmail-howto.txt README
dist_example_DATA = examples/fp-facilitator conf/reg-email.pass
@@ -31,7 +35,16 @@ CLEANFILES = $(initscript_SCRIPTS)
# root access and *must not be run* for fake/staged installs, e.g. when giving
# non-standard directories to ./configure or DESTDIR to make.
-pre-install:
+pre-install: meta-install-sanity install-user
+post-install: meta-install-sanity install-secrets install-symlinks install-daemon
+pre-remove: meta-install-sanity remove-daemon remove-symlinks remove-secrets
+post-remove: meta-install-sanity remove-user
+
+meta-install-sanity:
+ test "x$(DESTDIR)" = "x" || { echo >&2 \
+ "don't run {pre,post}-{install,remove} when DESTDIR is set"; false; }
+
+install-user:
id -u $(fpfacilitatoruser) >/dev/null 2>&1 || { \
which adduser >/dev/null 2>&1 && \
adduser --quiet \
@@ -49,7 +62,17 @@ pre-install:
--shell /bin/false \
$(fpfacilitatoruser) ; }
-post-install-secrets:
+remove-user:
+ : # deluser does actually remove the group as well
+ id -u $(fpfacilitatoruser) >/dev/null 2>&1 && { \
+ which deluser >/dev/null 2>&1 && \
+ deluser --quiet \
+ --system \
+ $(fpfacilitatoruser) || \
+ userdel \
+ $(fpfacilitatoruser) ; } || true
+
+install-secrets:
install -m 600 /dev/null $(pkgconfdir)/reg-daemon.key
openssl genrsa 2048 | tee $(pkgconfdir)/reg-daemon.key | \
openssl rsa -pubout > $(pkgconfdir)/reg-daemon.pub
@@ -57,42 +80,39 @@ post-install-secrets:
chown $(fpfacilitatoruser): $(pkgconfdir)/reg-daemon.key
chown $(fpfacilitatoruser): $(pkgconfdir)/reg-email.pass
-post-install-symlinks:
+remove-secrets:
+ rm -f $(pkgconfdir)/reg-*
+
+install-symlinks:
for i in fp-reg.go app.yaml README; do \
$(LN_S) -f $(appenginedir)/$$i $(appengineconfdir)/$$i; \
done
-post-install-daemon:
+remove-symlinks:
+ rm -rf $(appengineconfdir)
+
+# initscripts: assume that if the user wanted to install them, then they also
+# wanted to configure them, and that the system supports them. if this isn't the
+# case then either (a) they are doing a staged install for another system and
+# shouldn't be running {pre,post}-{install,remove} or (b) they shouldn't have
+# told us to install initscripts for their system that doesn't support it.
+
+install-daemon:
+if DO_INITSCRIPTS
for i in facilitator facilitator-email-poller facilitator-reg-daemon; do \
update-rc.d $$i defaults; \
invoke-rc.d $$i start; \
done
+endif
-post-install: post-install-secrets post-install-symlinks post-install-daemon
-
-pre-remove-daemon:
+remove-daemon:
+if DO_INITSCRIPTS
for i in facilitator facilitator-email-poller facilitator-reg-daemon; do \
invoke-rc.d $$i stop; \
+ update-rc.d $$i remove; \
done
-
-pre-remove-symlinks:
- rm -rf $(appengineconfdir)
-
-pre-remove-secrets:
- rm -f $(pkgconfdir)/reg-*
-
-pre-remove: pre-remove-daemon pre-remove-symlinks pre-remove-secrets
-
-post-remove:
- : # deluser does actually remove the group as well
- id -u $(fpfacilitatoruser) >/dev/null 2>&1 && { \
- which deluser >/dev/null 2>&1 && \
- deluser --quiet \
- --system \
- $(fpfacilitatoruser) || \
- userdel \
- $(fpfacilitatoruser) ; } || true
+endif
.PHONY: pre-install post-install pre-remove post-remove
-.PHONY: post-install-secrets post-install-symlinks post-install-daemon
-.PHONY: pre-remove-daemon pre-remove-symlinks pre-remove-secrets
+.PHONY: install-user install-secrets install-symlinks install-daemon
+.PHONY: remove-user remove-secrets remove-symlinks remove-daemon
diff --git a/facilitator/configure.ac b/facilitator/configure.ac
index 386c20f..e6a100d 100644
--- a/facilitator/configure.ac
+++ b/facilitator/configure.ac
@@ -11,4 +11,12 @@ AC_CONFIG_FILES([Makefile
init.d/facilitator-reg-daemon])
AC_PROG_LN_S
+# check that we want to install initscripts. don't bother checking that they
+# are supported, since we might be doing a staged install on a different system.
+AC_ARG_ENABLE([initscripts],
+ [AS_HELP_STRING([--disable-initscripts],
+ [install and configure sysvinit-style initscripts (default yes)])],
+ [do_initscripts=], [do_initscripts=yes])
+AM_CONDITIONAL([DO_INITSCRIPTS], [test "x$do_initscripts" = xyes])
+
AC_OUTPUT
More information about the tor-commits
mailing list