[quake] 03/10: quake, quake3: remove support for START_DAEMON

Simon McVittie smcv at debian.org
Wed Feb 4 11:07:05 UTC 2015


This is an automated email from the git hooks/post-receive script.

smcv pushed a commit to branch master
in repository quake.

commit d5de8485f7ebeb61e5d86e7ede44d4c2a66b379a
Author: Simon McVittie <smcv at debian.org>
Date:   Mon Jan 26 10:36:56 2015 +0000

    quake, quake3: remove support for START_DAEMON
    
      - if the server was previously disabled via START_DAEMON,
        do a one-time migration to "update-rc.d $SERVICE disable"
---
 debian/changelog                       |  8 +--
 debian/quake-server.README.Debian      |  7 ---
 debian/quake-server.default            |  8 +--
 debian/quake-server.init               |  9 ----
 debian/quake-server.lintian-overrides  |  2 +
 debian/quake-server.preinst            | 85 +++++++++++++++++++++++++++++++
 debian/quake3-server.README.Debian     |  8 ---
 debian/quake3-server.default           |  4 +-
 debian/quake3-server.init              | 15 ------
 debian/quake3-server.lintian-overrides |  2 +
 debian/quake3-server.preinst           | 93 +++++++++++++++++++++++++++++-----
 11 files changed, 180 insertions(+), 61 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 78b1c9f..e0e19f6 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -3,10 +3,12 @@ quake (10) UNRELEASED; urgency=medium
   * quake2: execute debian_server.cfg again, reverting a change from v9.
     Unlike quake and quake3, quake2's default configuration file is named
     debian_server.cfg, and the demo and full game have different versions.
+  * quake, quake3: remove support for START_DAEMON
+    - if the server was previously disabled via START_DAEMON,
+      do a one-time migration to "update-rc.d $SERVICE disable"
   * quake3: modify quake3-server configuration
-    - remove START_DAEMON from /etc/default/quake3-server
-    - put defaults for START_DAEMON and DAEMON_OPTS in
-      /etc/init.d/quake3-server so it can operate without /e/d/q3-s
+    - put default for DAEMON_OPTS in /etc/init.d/quake3-server so it can
+      operate without /e/d/q3-s
   * quake3: prefer to load game data from /usr/lib/quake3/base
     or /usr/lib/quake3/ta, where ioquake3 can provide native-code game modules
     - this requires ioquake3 (>= 1.36+u20150114+dfsg1-1~) and
diff --git a/debian/quake-server.README.Debian b/debian/quake-server.README.Debian
index 52d8313..7ed4760 100644
--- a/debian/quake-server.README.Debian
+++ b/debian/quake-server.README.Debian
@@ -46,13 +46,6 @@ and update-rc.d(8) commands like
 
 which should work for all of Debian's supported init systems.
 
-Disabling the init script
--------------------------
-
-To disable the init script, use update-rc.d as described above.
-Changing the value of the START_DAEMON variable in
-/etc/default/quake-server is deprecated and should not be used.
-
 Running the server with cron and screen
 ---------------------------------------
 
diff --git a/debian/quake-server.default b/debian/quake-server.default
index 04e0485..5b5b7b7 100644
--- a/debian/quake-server.default
+++ b/debian/quake-server.default
@@ -2,10 +2,10 @@
 # sourced by /etc/init.d/quake-server
 # installed at /etc/default/quake-server by the maintainer scripts
 
-# Setting this to any value other than 1 is deprecated. If you want to
-# disable the server, please use "update-rc.d quake-server disable" instead.
-START_DAEMON=1
-
 # Additional options that are passed to the daemon.
 # For most options it's better to edit server.cfg instead.
 DAEMON_OPTS="+exec etc/quake-server/server.cfg"
+
+# To disable the server, please use the normal mechanisms provided by init:
+# "update-rc.d quake-server disable". The START_DAEMON variable is no
+# longer supported.
diff --git a/debian/quake-server.init b/debian/quake-server.init
index d616ed3..42c4511 100644
--- a/debian/quake-server.init
+++ b/debian/quake-server.init
@@ -26,19 +26,10 @@ if [ -f /etc/default/$NAME ] ; then
 	. /etc/default/$NAME
 fi
 
-if [ "x$START_DAEMON" != x1 ]; then
-    echo "Disabling $NAME via START_DAEMON in /etc/default/$NAME is deprecated." >&2
-    echo "Please use \"update-rc.d $NAME disable\" instead" >&2
-fi
-
 do_start() {
     if [ -f $PIDFILE ]; then
         return 2
     fi
-    if [ "$START_DAEMON" != 1 ]; then
-        echo -n " (not starting - disabled in /etc/default/$NAME)"
-        return 0
-    fi
     start-stop-daemon --start --quiet --pidfile $PIDFILE --oknodo \
 	--background --exec $BINARY --startas $DAEMON \
 	--make-pidfile --chuid $USER \
diff --git a/debian/quake-server.lintian-overrides b/debian/quake-server.lintian-overrides
index 4902b52..d0cd847 100644
--- a/debian/quake-server.lintian-overrides
+++ b/debian/quake-server.lintian-overrides
@@ -1,2 +1,4 @@
 # verbatim quote
 quake-server binary: spelling-error-in-copyright ment meant
+# it's "update-rc.d disable" not "update-rc.d defaults"
+quake-server binary: preinst-calls-updaterc.d quake-server
diff --git a/debian/quake-server.preinst b/debian/quake-server.preinst
new file mode 100644
index 0000000..1a5d223
--- /dev/null
+++ b/debian/quake-server.preinst
@@ -0,0 +1,85 @@
+#!/bin/sh
+# vim:set sw=2 sts=2 et:
+
+set -e
+
+quake_atomic_write () {
+  ## quake_atomic_write DIR FILE CONTENTS
+  ## Create DIR/FILE with contents (CONTENTS + '\n').
+  install -d "$1"
+  echo "$3" > "$1/$2.$$.tmp"
+  chmod 0644 "$1/$2.$$.tmp"
+  mv "$1/$2.$$.tmp" "$1/$2"
+}
+
+quake_disable () {
+  update-rc.d quake-server disable
+
+  # Make deb-systemd-helper think the systemd unit was already installed
+  # and disabled, so that the disabledness sticks. Strictly speaking this
+  # is internal state, but it replicates what init-system-helpers/1.22
+  # would have done, so it should work as long as upgrades from jessie
+  # are supported.
+  quake_atomic_write /var/lib/systemd/deb-systemd-helper-enabled \
+    quake-server.service.dsh-also \
+    /etc/systemd/system/multi-user.target.wants/quake-server.service
+  if [ -L /etc/systemd/system/multi-user.target.wants/quake-server.service ]; then
+    rm /etc/systemd/system/multi-user.target.wants/quake-server.service
+  fi
+}
+
+quake_migrate_disabledness () {
+  echo "quake-server.preinst: migrating from START_DAEMON to init script enable/disable status..." >&2
+
+  e=0
+  # Do this in a subshell just in case /etc/default/quake3-server has been
+  # patched by the sysadmin to exit the init script.
+  (
+    set +e
+    START_DAEMON=1
+    [ -r /etc/default/quake-server ] && . /etc/default/quake-server
+
+    case "$START_DAEMON" in
+      (1)
+        echo "Preserving current status of quake-server init script (START_DAEMON=1 in /etc/default/quake-server)" >&2
+        exit 104
+        ;;
+      (*)
+        # 0 or unknown
+        echo "Disabling quake-server init script (previously disabled by START_DAEMON=$START_DAEMON in /etc/default/quake-server)" >&2
+        exit 101
+        ;;
+    esac
+  ) || e="$?"
+
+  case "$e" in
+    (101)
+      # we already printed a message
+      quake_disable
+      ;;
+    (104)
+      # nothing to do and we already printed a message
+      ;;
+    (*)
+      # maybe the sysadmin stubbed it out with "exit 0" or "exit 1"?
+      echo "Sourcing /etc/default/quake-server returned unexpected code, disabling init script" >&2
+      quake_disable
+      ;;
+  esac
+}
+
+case "$1" in
+  (upgrade)
+    if dpkg --compare-versions "$2" lt 10~; then
+      quake_migrate_disabledness "$@"
+    fi
+  ;;
+  (install|abort-upgrade)
+  ;;
+  *)
+    echo "preinst called with unknown argument '$1'" >&2
+    exit 1
+  ;;
+esac
+
+#DEBHELPER#
diff --git a/debian/quake3-server.README.Debian b/debian/quake3-server.README.Debian
index 3de22a5..9e160bf 100644
--- a/debian/quake3-server.README.Debian
+++ b/debian/quake3-server.README.Debian
@@ -31,14 +31,6 @@ and update-rc.d(8) commands like
 
 which should work for all of Debian's supported init systems.
 
-Disabling the init script
--------------------------
-
-To disable the init script, use update-rc.d as described above.
-Changing the value of the START_DAEMON variable in
-/etc/default/quake3-server is deprecated. Please leave it set to
-"unless-disabled-by-upgrade".
-
 Running the server with cron and screen
 ---------------------------------------
 
diff --git a/debian/quake3-server.default b/debian/quake3-server.default
index e4e4437..4e477bc 100644
--- a/debian/quake3-server.default
+++ b/debian/quake3-server.default
@@ -7,5 +7,5 @@
 DAEMON_OPTS="+exec etc/quake3-server/server.cfg"
 
 # To disable the server, please use the normal mechanisms provided by init:
-# see /usr/share/doc/quake3-server/README.Debian.gz. The START_DAEMON
-# variable is deprecated and should not be used.
+# "update-rc.d quake3-server disable". The START_DAEMON variable is no
+# longer supported.
diff --git a/debian/quake3-server.init b/debian/quake3-server.init
index 5a5596f..8852e7a 100644
--- a/debian/quake3-server.init
+++ b/debian/quake3-server.init
@@ -17,7 +17,6 @@ DESC="Quake III Arena dedicated server"
 PIDFILE="/var/run/$NAME.pid"
 BINARY="/usr/lib/ioquake3/ioq3ded"
 USER="Debian-quake3"
-START_DAEMON=unless-disabled-by-upgrade
 DAEMON_OPTS="+exec etc/quake3-server/server.cfg"
 
 test -x $DAEMON || exit 0
@@ -29,21 +28,7 @@ if [ -f /etc/default/$NAME ] ; then
 	. /etc/default/$NAME
 fi
 
-if [ "x$START_DAEMON" != xunless-disabled-by-upgrade ] && [ "x$START_DAEMON" != x1 ]; then
-    echo "Disabling $NAME via START_DAEMON in /etc/default/$NAME is deprecated." >&2
-    echo "Please use \"update-rc.d $NAME disable\" instead" >&2
-fi
-
 q3_start() {
-    if [ "$START_DAEMON" = "unless-disabled-by-upgrade" ]; then
-        if [ -e /var/games/quake3-server/init-script-disabled-by-upgrade ]; then
-            echo -n " (disabled during upgrade, not starting - see /usr/share/doc/quake3-server/NEWS.Debian.gz)"
-            return 0
-        fi
-    elif [ "$START_DAEMON" != 1 ]; then
-        echo -n " (disabled in /etc/default/quake3-server - deprecated, see /usr/share/doc/quake3-server/README.Debian.gz)"
-        return 0
-    fi
     start-stop-daemon --start --quiet --pidfile $PIDFILE --oknodo \
 	--background --exec $BINARY --startas $DAEMON \
 	--make-pidfile --chuid $USER \
diff --git a/debian/quake3-server.lintian-overrides b/debian/quake3-server.lintian-overrides
index 77f202e..48a459a 100644
--- a/debian/quake3-server.lintian-overrides
+++ b/debian/quake3-server.lintian-overrides
@@ -1,2 +1,4 @@
 # verbatim quote
 quake3-server binary: spelling-error-in-copyright ment meant
+# it's "update-rc.d disable" not "update-rc.d defaults"
+quake3-server binary: preinst-calls-updaterc.d quake3-server
diff --git a/debian/quake3-server.preinst b/debian/quake3-server.preinst
index 9f55b83..c32b148 100644
--- a/debian/quake3-server.preinst
+++ b/debian/quake3-server.preinst
@@ -1,22 +1,89 @@
 #!/bin/sh
+# vim:set sw=2 sts=2 et:
 
 set -e
 
+quake_atomic_write () {
+  ## quake_atomic_write DIR FILE CONTENTS
+  ## Create DIR/FILE with contents (CONTENTS + '\n').
+  install -d "$1"
+  echo "$3" > "$1/$2.$$.tmp"
+  chmod 0644 "$1/$2.$$.tmp"
+  mv "$1/$2.$$.tmp" "$1/$2"
+}
+
+quake_disable () {
+  update-rc.d quake3-server disable
+
+  # Make deb-systemd-helper think the systemd unit was already installed
+  # and disabled, so that the disabledness sticks. Strictly speaking this
+  # is internal state, but it replicates what init-system-helpers/1.22
+  # would have done, so it should work as long as upgrades from jessie
+  # are supported.
+  quake_atomic_write /var/lib/systemd/deb-systemd-helper-enabled \
+    quake3-server.service.dsh-also \
+    /etc/systemd/system/multi-user.target.wants/quake3-server.service
+  if [ -L /etc/systemd/system/multi-user.target.wants/quake3-server.service ]; then
+    rm /etc/systemd/system/multi-user.target.wants/quake3-server.service
+  fi
+}
+
+quake_migrate_disabledness () {
+  echo "quake3-server.preinst: migrating from START_DAEMON to init script enable/disable status..." >&2
+
+  e=0
+  # Do this in a subshell just in case /etc/default/quake3-server has been
+  # patched by the sysadmin to exit the init script.
+  (
+    set +e
+    START_DAEMON=1
+    [ -r /etc/default/quake3-server ] && . /etc/default/quake3-server
+
+    case "$START_DAEMON" in
+      (1)
+        echo "Preserving current status of quake3-server init script (START_DAEMON=1 in /etc/default/quake3-server)" >&2
+        exit 104
+        ;;
+      (unless-disabled-by-upgrade)
+        if [ -e /var/games/quake3-server/init-script-disabled-by-upgrade ]; then
+          echo "Disabling quake3-server init script to preserve default from quake3-server (<< 1.4)" >&2
+          exit 101
+        else
+          echo "Preserving current status of quake3-server init script" >&2
+          exit 104
+        fi
+        ;;
+      (*)
+        # 0 or unknown
+        echo "Disabling quake3-server init script (previously disabled by START_DAEMON=$START_DAEMON in /etc/default/quake3-server)" >&2
+        exit 101
+        ;;
+    esac
+  ) || e="$?"
+
+  case "$e" in
+    (101)
+      # we already printed a message
+      quake_disable
+      ;;
+    (104)
+      # nothing to do and we already printed a message
+      ;;
+    (*)
+      # maybe the sysadmin stubbed it out with "exit 0" or "exit 1"?
+      echo "Sourcing /etc/default/quake3-server returned unexpected code, disabling init script" >&2
+      quake_disable
+      ;;
+  esac
+
+  # we have done the migration, so remove this to avoid confusion
+  rm -f /var/games/quake3-server/init-script-disabled-by-upgrade
+}
+
 case "$1" in
   (upgrade)
-    if dpkg --compare-versions "$2" lt 1.4; then
-      def=/etc/default/quake3-server
-      home=/var/games/quake3-server
-      inhibit=$home/init-script-disabled-by-upgrade
-
-      if test -e $def && grep '^START_DAEMON=1$' $def; then
-        echo "Not disabling quake3-server init script (previously enabled in $def)" >&2
-      else
-        echo "Disabling quake3-server init script (previously disabled in $def)" >&2
-        echo "Remove $inhibit to restore normal behaviour."
-	install -d $home
-	touch $inhibit
-      fi
+    if dpkg --compare-versions "$2" lt 10~; then
+      quake_migrate_disabledness "$@"
     fi
   ;;
   (install|abort-upgrade)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/quake.git



More information about the Pkg-games-commits mailing list