9706: Go service postinst improvements.
authorBrett Smith <brett@curoverse.com>
Wed, 10 Aug 2016 17:22:02 +0000 (13:22 -0400)
committerTom Clegg <tom@curoverse.com>
Mon, 15 Aug 2016 20:58:09 +0000 (16:58 -0400)
* Use /bin/sh, per Debian policy.
* Prefer basename for readability.
* Check for systemd init with [ -e /run/systemd/system ].
* Make configuration changes based on checking the unit file state.

build/go-package-scripts/postinst

index 137f8988d39b052c5a4c6e631284964dbe53906c..3adb0fc04882c5c1e6000902f658b50bbda8237a 100755 (executable)
@@ -1,15 +1,29 @@
-#!/bin/bash
+#!/bin/sh
 
 set -e
 
-script="${0##*/}"
+# NOTE: This package name detection will only work on Debian.
+# If this postinst script ever starts doing work on Red Hat,
+# we'll need to adapt this code accordingly.
+script="$(basename "$0")"
 pkg="${script%.postinst}"
+systemd_unit="${pkg}.service"
 
 case "${1}" in
     configure)
-        if which systemctl >/dev/null && [[ -e "/lib/systemd/system/${pkg}.service" ]]; then
-            systemctl enable "${pkg}"
-            systemctl start "${pkg}"
+        if [ -e /run/systemd/system ]; then
+            eval "$(systemctl -p UnitFileState show "$systemd_unit")"
+            case "$UnitFileState" in
+                disabled)
+                    systemctl enable "$systemd_unit"
+                    # Failing to start the service is not a package error,
+                    # so don't let an error here propagate up.
+                    systemctl start "$systemd_unit" || true
+                    ;;
+                enabled)
+                    systemctl reload-or-try-restart "$systemd_unit" || true
+                    ;;
+            esac
         fi
         ;;
 esac