2
0
Эх сурвалжийг харах

Merge pull request #4615 from strugee/fix-restart.sh

Claus Vium 3 жил өмнө
parent
commit
06242121c5

+ 30 - 10
debian/bin/restart.sh

@@ -11,23 +11,43 @@
 #
 # This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
 
-get_service_command() {
-    for command in systemctl service; do
-        if which $command &>/dev/null; then
-            echo $command && return
+# This is the Right Way(tm) to check if we are booted with
+# systemd, according to sd_booted(3)
+if [ -d /run/systemd/system ]; then
+    cmd=systemctl
+else
+    # Everything else is really hard to figure out, so we just use
+    # service(8) if it's available - that works with most init
+    # systems/distributions I know of, including FreeBSD
+    if type service >/dev/null 2>&1; then
+        cmd=service
+    else
+        # If even service(8) isn't available, we just try /etc/init.d
+        # and hope for the best
+        if [ -d /etc/init.d ]; then
+            cmd=sysv
+        else
+            echo "Unable to detect a way to restart Jellyfin; bailing out" 1>&2
+            echo "Please report this bug to https://github.com/jellyfin/jellyfin/issues" 1>&2
+            exit 1
         fi
-    done
-    echo "sysv"
-}
+    fi
+fi
+
+if type sudo >/dev/null 2>&1; then
+    sudo_command=sudo
+else
+    sudo_command=
+fi
 
-cmd="$( get_service_command )"
 echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
 case $cmd in
     'systemctl')
-        echo "sleep 0.5; /usr/bin/sudo $( which systemctl ) start jellyfin" | at now 
+        # Without systemd-run here, `jellyfin.service`'s shutdown terminates this process too
+        $sudo_command systemd-run systemctl restart jellyfin
         ;;
     'service')
-        echo "sleep 0.5; /usr/bin/sudo $( which service ) jellyfin start" | at now 
+        echo "sleep 0.5; $sudo_command service jellyfin start" | at now
         ;;
     'sysv')
         echo "sleep 0.5; /usr/bin/sudo /etc/init.d/jellyfin start" | at now 

+ 3 - 3
debian/conf/jellyfin-sudoers

@@ -2,9 +2,9 @@
 Cmnd_Alias RESTARTSERVER_SYSV = /sbin/service jellyfin restart, /usr/sbin/service jellyfin restart
 Cmnd_Alias STARTSERVER_SYSV = /sbin/service jellyfin start, /usr/sbin/service jellyfin start
 Cmnd_Alias STOPSERVER_SYSV = /sbin/service jellyfin stop, /usr/sbin/service jellyfin stop
-Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
-Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
-Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
+Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemd-run systemctl restart jellyfin
+Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemd-run systemctl start jellyfin
+Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemd-run systemctl stop jellyfin
 Cmnd_Alias RESTARTSERVER_INITD = /etc/init.d/jellyfin restart
 Cmnd_Alias STARTSERVER_INITD = /etc/init.d/jellyfin start
 Cmnd_Alias STOPSERVER_INITD = /etc/init.d/jellyfin stop

+ 1 - 1
debian/control

@@ -23,6 +23,6 @@ Depends: at,
          libfontconfig1,
          libfreetype6,
          libssl1.1
-Recommends: jellyfin-web
+Recommends: jellyfin-web, sudo
 Description: Jellyfin is the Free Software Media System.
  This package provides the Jellyfin server backend and API.

+ 1 - 1
fedora/jellyfin.spec

@@ -40,7 +40,7 @@ Jellyfin is a free software media system that puts you in control of managing an
 Summary:        The Free Software Media System Server backend
 Requires(pre):  shadow-utils
 Requires:       ffmpeg
-Requires:       libcurl, fontconfig, freetype, openssl, glibc, libicu, at
+Requires:       libcurl, fontconfig, freetype, openssl, glibc, libicu, at, sudo
 
 %description server
 The Jellyfin media server backend.

+ 3 - 4
fedora/jellyfin.sudoers

@@ -1,8 +1,7 @@
 # Allow jellyfin group to start, stop and restart itself
-Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemctl restart jellyfin, /bin/systemctl restart jellyfin
-Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemctl start jellyfin, /bin/systemctl start jellyfin
-Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemctl stop jellyfin, /bin/systemctl stop jellyfin
-
+Cmnd_Alias RESTARTSERVER_SYSTEMD = /usr/bin/systemd-run systemctl restart jellyfin
+Cmnd_Alias STARTSERVER_SYSTEMD = /usr/bin/systemd-run systemctl start jellyfin
+Cmnd_Alias STOPSERVER_SYSTEMD = /usr/bin/systemd-run systemctl stop jellyfin
 
 jellyfin ALL=(ALL) NOPASSWD: RESTARTSERVER_SYSTEMD
 jellyfin ALL=(ALL) NOPASSWD: STARTSERVER_SYSTEMD

+ 30 - 10
fedora/restart.sh

@@ -11,23 +11,43 @@
 #
 # This script is used by the Debian/Ubuntu/Fedora/CentOS packages.
 
-get_service_command() {
-    for command in systemctl service; do
-        if which $command &>/dev/null; then
-            echo $command && return
+# This is the Right Way(tm) to check if we are booted with
+# systemd, according to sd_booted(3)
+if [ -d /run/systemd/system ]; then
+    cmd=systemctl
+else
+    # Everything else is really hard to figure out, so we just use
+    # service(8) if it's available - that works with most init
+    # systems/distributions I know of, including FreeBSD
+    if type service >/dev/null 2>&1; then
+        cmd=service
+    else
+        # If even service(8) isn't available, we just try /etc/init.d
+        # and hope for the best
+        if [ -d /etc/init.d ]; then
+            cmd=sysv
+        else
+            echo "Unable to detect a way to restart Jellyfin; bailing out" 1>&2
+            echo "Please report this bug to https://github.com/jellyfin/jellyfin/issues" 1>&2
+            exit 1
         fi
-    done
-    echo "sysv"
-}
+    fi
+fi
+
+if type sudo >/dev/null 2>&1; then
+    sudo_command=sudo
+else
+    sudo_command=
+fi
 
-cmd="$( get_service_command )"
 echo "Detected service control platform '$cmd'; using it to restart Jellyfin..."
 case $cmd in
     'systemctl')
-        echo "sleep 0.5; /usr/bin/sudo $( which systemctl ) start jellyfin" | at now 
+        # Without systemd-run here, `jellyfin.service`'s shutdown terminates this process too
+        $sudo_command systemd-run systemctl restart jellyfin
         ;;
     'service')
-        echo "sleep 0.5; /usr/bin/sudo $( which service ) jellyfin start" | at now 
+        echo "sleep 0.5; $sudo_command service jellyfin start" | at now
         ;;
     'sysv')
         echo "sleep 0.5; /usr/bin/sudo /etc/init.d/jellyfin start" | at now