9309: Add systemd support to Rails package scripts.
authorBrett Smith <brett@curoverse.com>
Fri, 3 Jun 2016 18:50:59 +0000 (14:50 -0400)
committerBrett Smith <brett@curoverse.com>
Wed, 15 Jun 2016 15:40:57 +0000 (11:40 -0400)
build/rails-package-scripts/postinst.sh
build/rails-package-scripts/step2.sh

index 6fac26be8eb34d56d31ccf73df3885501cdfe005..17454ef7065ac3a17af6e813308f73d14435e7b2 100644 (file)
@@ -142,8 +142,15 @@ prepare_database() {
 }
 
 configure_version() {
-  WEB_SERVICE=${WEB_SERVICE:-$(service --status-all 2>/dev/null \
-      | grep -Eo '\bnginx|httpd[^[:space:]]*' || true)}
+  if [ -n "$WEB_SERVICE" ]; then
+      SERVICE_MANAGER=$(guess_service_manager)
+  elif WEB_SERVICE=$(list_services_systemd | grep -E '^(nginx|httpd)'); then
+      SERVICE_MANAGER=systemd
+  elif WEB_SERVICE=$(list_services_service \
+                         | grep -Eo '\b(nginx|httpd)[^[:space:]]*'); then
+      SERVICE_MANAGER=service
+  fi
+
   if [ -z "$WEB_SERVICE" ]; then
     report_web_service_warning "Web service (Nginx or Apache) not found"
   elif [ "$WEB_SERVICE" != "$(echo "$WEB_SERVICE" | head -n 1)" ]; then
@@ -234,8 +241,8 @@ configure_version() {
 
   setup_before_nginx_restart
 
-  if [ ! -z "$WEB_SERVICE" ]; then
-      service "$WEB_SERVICE" restart
+  if [ -n "$SERVICE_MANAGER" ]; then
+      service_command "$SERVICE_MANAGER" restart "$WEB_SERVICE"
   fi
 }
 
index 816b906392ef44e0067a1f7ff6d325736077773c..98de494e1dd64c38f50458661478ca470ee42580 100644 (file)
@@ -26,3 +26,53 @@ fi
 if ! type setup_before_nginx_restart >/dev/null 2>&1; then
     setup_before_nginx_restart() { return; }
 fi
+
+if [ -e /run/systemd/system ]; then
+    USING_SYSTEMD=1
+else
+    USING_SYSTEMD=0
+fi
+
+if which service >/dev/null 2>&1; then
+    USING_SERVICE=1
+else
+    USING_SERVICE=0
+fi
+
+guess_service_manager() {
+    if [ 1 = "$USING_SYSTEMD" ]; then
+        echo systemd
+    elif [ 1 = "$USING_SERVICE" ]; then
+        echo service
+    else
+        return 1
+    fi
+}
+
+list_services_systemd() {
+    test 1 = "$USING_SYSTEMD" || return
+    # Print only service names, without the `.service` suffix.
+    systemctl list-unit-files '*.service' \
+        | awk '($1 ~ /\.service/){print substr($1, 1, length($1) - 8)}'
+}
+
+list_services_service() {
+    test 1 = "$USING_SERVICE" || return
+    # Output is completely different across Debian and Red Hat.
+    # We can't really parse it.
+    service --status-all 2>/dev/null
+}
+
+service_command() {
+    local service_manager="$1"; shift
+    local command="$1"; shift
+    local service="$1"; shift
+    case "$service_manager" in
+        systemd) systemctl "$command" "$service" ;;
+        service) service "$service" "$command" ;;
+    esac
+}
+
+if ! guess_service_manager >/dev/null; then
+    echo "WARNING: Unsupported init system. Can't manage web service." >&2
+fi