From 7fefb2eda04d7395a23f9d3ddf5d4922ce32bc90 Mon Sep 17 00:00:00 2001 From: Brett Smith Date: Fri, 3 Jun 2016 14:50:59 -0400 Subject: [PATCH] 9309: Add systemd support to Rails package scripts. --- build/rails-package-scripts/postinst.sh | 15 ++++++-- build/rails-package-scripts/step2.sh | 50 +++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/build/rails-package-scripts/postinst.sh b/build/rails-package-scripts/postinst.sh index 6fac26be8e..17454ef706 100644 --- a/build/rails-package-scripts/postinst.sh +++ b/build/rails-package-scripts/postinst.sh @@ -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 } diff --git a/build/rails-package-scripts/step2.sh b/build/rails-package-scripts/step2.sh index 816b906392..98de494e1d 100644 --- a/build/rails-package-scripts/step2.sh +++ b/build/rails-package-scripts/step2.sh @@ -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 -- 2.30.2