[openjk] 01/05: Redo init script and systemd units based on quake/12

Simon McVittie smcv at debian.org
Fri Feb 6 11:13:34 UTC 2015


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

smcv pushed a commit to branch master
in repository openjk.

commit e0dad86270bafb6699cac72de45d1f7db41051ac
Author: Simon McVittie <smcv at debian.org>
Date:   Thu Feb 5 23:37:26 2015 +0000

    Redo init script and systemd units based on quake/12
---
 debian/openjk-academy-server.README.Debian     | 61 +++++++++-----------
 debian/openjk-academy-server.init              | 80 ++++++++++++++++++++++++++
 debian/openjk-academy-server.install           |  4 +-
 debian/openjk-academy-server.links             |  2 +-
 debian/openjk-academy-server.openjkded.init    | 67 ---------------------
 debian/openjk-academy-server.openjkded.service | 15 -----
 debian/openjk-academy-server.service           | 29 ++++++++++
 debian/openjk-academy-server at .service          | 26 +++++++++
 debian/openjkded at .service                      | 23 --------
 debian/rules                                   | 10 ----
 debian/{default.cfg => server.cfg}             |  0
 11 files changed, 166 insertions(+), 151 deletions(-)

diff --git a/debian/openjk-academy-server.README.Debian b/debian/openjk-academy-server.README.Debian
index d54baf6..3add717 100644
--- a/debian/openjk-academy-server.README.Debian
+++ b/debian/openjk-academy-server.README.Debian
@@ -6,52 +6,47 @@ Running the server
 
 Installing the openjk-academy-server package provides a dedicated server
 running as the user "openjk-academy-server", from an init script named
-openjkded. This is a simple setup suitable for running one server on
-a machine.
+openjk-academy-server. This is a simple setup suitable for running one
+server on a machine.
 
-By default, the server will use etc/openjk-academy-server/default.cfg,
-which is a symlink to /etc/openjk-academy-server/default.cfg. You can edit
+By default, the server will use etc/openjk-academy-server/server.cfg,
+which is a symlink to /etc/openjk-academy-server/server.cfg. You can edit
 this file to reconfigure the default instance.
 
+The equivalent of ~/.local/share/openjk for the server is
+/var/games/openjk-academy-server/server/openjk.
+
 The server can be managed in the usual way, e.g. via service(8) commands
 like
 
-    service openjkded stop
-    service openjkded start
+    service openjk-academy-server stop
+    service openjk-academy-server start
+    update-rc.d openjk-academy-server disable
+    update-rc.d openjk-academy-server enable
 
 which should work for all of systemd, sysvinit and upstart.
 
 The whole /etc/openjk-academy-server directory is symlinked into the engine's
 search path as etc/openjk-academy-server, so you can place files there and
-execute them with commands like "exec etc/openjk-academy-server/ctf.cfg".
-
-Disabling the server
---------------------
-
-To disable the default instance, use the facilities provided by your
-init system. The recommended command is
-
-    update-rc.d openjkded disable
-
-which should work for all of systemd, sysvinit and upstart.
+execute them with commands like "exec etc/openjk-academy-server/siege.cfg".
 
-Multiple instances under systemd
---------------------------------
+Running multiple server instances with systemd
+----------------------------------------------
 
-Under systemd, openjkded.service just depends on openjkded at default.service,
-which runs the actual server. You can create an additional instance
-"foo" like this:
+Under systemd, openjk-academy-server supports additional instances of the
+server, for example for different game modes.
 
-- create /etc/rtcw-server/foo.cfg based on /etc/rtcw-server/default.cfg
-  (remember to change the net_port)
-- run "systemctl enable openjkded at foo.service"
+Each instance openjk-academy-server at INSTANCE.service has configuration and
+state in /var/games/openjk-academy-server/INSTANCE/openjk, and will execute
+/etc/openjk-academy-server/INSTANCE.cfg on startup.
 
-You can control individual instances with commands like
-"systemctl start openjkded at foo.service".
-You can also use commands like "systemctl start openjkded.service"
-to start the default instance and all enabled instances.
+To set a parameter that can only be given on the command line, such as
+fs_game or net_port, you can create /etc/default/openjk-academy-server at INSTANCE
+or a systemd "drop-in" file, and set DAEMON_OPTS there. Setting a
+unique net_port for each server is recommended: if you do not, each
+server will try ports above its configured net_port until it finds one
+that is not in use, so the mapping between servers and ports will be arbitrary.
 
-Non-default instances can be enabled and disabled with systemctl, but
-to disable the default instance, you must either mask the
-default instance ("systemctl mask openjkded at default.service")
-or disable openjkded.service ("systemctl disable openjkded.service").
+The instance name "server" cannot be used without disabling and stopping
+openjk-academy-server.service, since it shares its configuration with that
+service.
diff --git a/debian/openjk-academy-server.init b/debian/openjk-academy-server.init
new file mode 100644
index 0000000..65d05c0
--- /dev/null
+++ b/debian/openjk-academy-server.init
@@ -0,0 +1,80 @@
+#! /bin/sh
+### BEGIN INIT INFO
+# Provides:          openjk-academy-server
+# Required-Start:    $remote_fs $network
+# Required-Stop:     $remote_fs $network
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Jedi Academy game server
+# Description:       Dedicated server for Jedi Academy,
+#                    a Star Wars-based action game
+### END INIT INFO
+
+PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
+NAME="openjk-academy-server"
+DAEMON="/usr/games/openjkded"
+DESC="Jedi Academy dedicated server"
+PIDFILE="/var/run/$NAME.pid"
+BINARY="/usr/lib/openjk-academy/openjkded"
+USER="$NAME"
+DAEMON_OPTS=""
+
+test -x $DAEMON || exit 0
+
+. /lib/lsb/init-functions
+
+HOME=/var/games/$NAME/server
+XDG_DATA_HOME=$HOME
+XDG_CACHE_HOME=$HOME/cache
+XDG_CONFIG_HOME=$HOME/config
+export HOME XDG_DATA_HOME XDG_CACHE_HOME XDG_CONFIG_HOME
+
+# Include defaults if available
+if [ -f /etc/default/$NAME ] ; then
+    . /etc/default/$NAME
+fi
+
+q3_start() {
+    start-stop-daemon --start --quiet --pidfile $PIDFILE --oknodo \
+        --background --exec $BINARY --startas $DAEMON \
+        --make-pidfile --chuid $USER \
+        -- \
+        $DAEMON_OPTS \
+        +exec etc/openjk-academy-server/server.cfg \
+        > /dev/null 2>&1 || return 1
+    return 0
+}
+
+q3_stop() {
+    start-stop-daemon --stop --quiet --pidfile $PIDFILE \
+        --oknodo --exec $BINARY || return 1
+    rm -f $PIDFILE
+    return 0
+}
+
+case "$1" in
+    start)
+        log_begin_msg "Starting $DESC: $NAME"
+        q3_start
+        log_end_msg $?
+        ;;
+    stop)
+        log_begin_msg "Stopping $DESC: $NAME"
+        q3_stop
+        log_end_msg $?
+        ;;
+    restart|force-reload)
+        log_begin_msg "Restarting $DESC: $NAME"
+        q3_stop && sleep 1 && q3_start
+        log_end_msg $?
+        ;;
+    status)
+        status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $?
+        ;;
+    *)
+        echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
+        exit 1
+        ;;
+esac
+
+exit 0
diff --git a/debian/openjk-academy-server.install b/debian/openjk-academy-server.install
index b543a33..0e6dfff 100644
--- a/debian/openjk-academy-server.install
+++ b/debian/openjk-academy-server.install
@@ -3,5 +3,5 @@
 debian/scripts/openjkded               usr/games
 usr/lib/openjk/openjkded               usr/lib/openjk-academy
 usr/lib/openjk/openjkded.*             usr/lib/openjk-academy
-debian/openjkded at .service              lib/systemd/system
-debian/default.cfg                     etc/openjk-academy-server
+debian/openjk-academy-server at .service  lib/systemd/system
+debian/server.cfg                      etc/openjk-academy-server
diff --git a/debian/openjk-academy-server.links b/debian/openjk-academy-server.links
index 7aba54a..0219cc1 100644
--- a/debian/openjk-academy-server.links
+++ b/debian/openjk-academy-server.links
@@ -1,3 +1,3 @@
-# so you can do "exec etc/openjk-academy-server/default.cfg"
+# so you can do "exec etc/openjk-academy-server/server.cfg"
 etc/openjk-academy-server              usr/lib/openjk-academy/base/etc/openjk-academy-server
 etc/openjk-academy-server              usr/lib/openjk-academy/OpenJK/etc/openjk-academy-server
diff --git a/debian/openjk-academy-server.openjkded.init b/debian/openjk-academy-server.openjkded.init
deleted file mode 100644
index 735d80f..0000000
--- a/debian/openjk-academy-server.openjkded.init
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
-if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
-    set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
-fi
-### BEGIN INIT INFO
-# Provides:          openjkded openjk-academy-server
-# Required-Start:    $remote_fs $syslog
-# Required-Stop:     $remote_fs $syslog
-# Default-Start:     2 3 4 5
-# Default-Stop:
-# Short-Description: Jedi Academy game server
-# Description:       Jedi Academy multiplayer dedicated server using the
-#                    OpenJK engine.
-### END INIT INFO
-
-PACKAGE="openjk-academy-server"
-NAME="openjkded"
-DESC="Jedi Academy game server"
-DAEMON="/usr/games/$NAME"
-BINARY="/usr/lib/openjk-academy/$NAME"
-START_ARGS="--background --make-pidfile --chuid ${PACKAGE}"
-DAEMON_ARGS="+exec etc/${PACKAGE}/default.cfg"
-
-# The actual daemon is in openjk-common, this package just has init scripts.
-[ -e "/usr/lib/openjk-academy/${PACKAGE}-installed" ] || exit 0
-
-# The init script corresponds to the "default" systemd instance
-HOME=/var/games/openjk-academy-server/default.home
-XDG_DATA_HOME="$HOME"
-XDG_CACHE_HOME="$HOME/cache"
-XDG_CONFIG_HOME="$HOME/config"
-export HOME XDG_DATA_HOME XDG_CACHE_HOME XDG_CONFIG_HOME
-
-# Return
-#   0 if daemon has been started
-#   1 if daemon was already running
-#   2 if daemon could not be started
-do_start_cmd() {
-    start-stop-daemon --start --quiet ${PIDFILE:+--pidfile ${PIDFILE}} \
-        $START_ARGS \
-        --startas $DAEMON --name $NAME --exec $BINARY --test > /dev/null \
-        || return 1
-    start-stop-daemon --start --quiet ${PIDFILE:+--pidfile ${PIDFILE}} \
-        $START_ARGS \
-        --startas $DAEMON --name $NAME --exec $BINARY -- $DAEMON_ARGS \
-        || return 2
-}
-
-# Return
-#   0 if daemon has been stopped
-#   1 if daemon was already stopped
-#   2 if daemon could not be stopped
-#   other if a failure occurred
-do_stop_cmd() {
-    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \
-        $STOP_ARGS \
-        ${PIDFILE:+--pidfile ${PIDFILE}} --name $NAME --exec $BINARY
-    RETVAL="$?"
-    [ "$RETVAL" = 2 ] && return 2
-    rm -f $PIDFILE
-    return $RETVAL
-}
-
-do_status() {
-    status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && return 0 || return $?
-}
diff --git a/debian/openjk-academy-server.openjkded.service b/debian/openjk-academy-server.openjkded.service
deleted file mode 100644
index d247dfe..0000000
--- a/debian/openjk-academy-server.openjkded.service
+++ /dev/null
@@ -1,15 +0,0 @@
-# This service is actually more like a systemd target,
-# but we are using a service so it will mask the init script.
-[Unit]
-Description=Jedi Academy game server
-After=network.target
-Wants=openjkded at default.service
-
-[Service]
-Type=oneshot
-RemainAfterExit=yes
-ExecStart=/bin/true
-
-[Install]
-WantedBy=multi-user.target
-Alias=openjk-academy-server.service
diff --git a/debian/openjk-academy-server.service b/debian/openjk-academy-server.service
new file mode 100644
index 0000000..1c51c5b
--- /dev/null
+++ b/debian/openjk-academy-server.service
@@ -0,0 +1,29 @@
+[Unit]
+Description=Jedi Academy game server
+After=network.target
+# This server and the @server instance would try to use the same
+# configuration, and fight over their home directory
+Conflicts=openjk-academy-server at server.service
+
+[Service]
+Type=simple
+User=openjk-academy-server
+Environment=DAEMON_OPTS=
+Environment=HOME=/var/games/openjk-academy-server/server
+Environment=XDG_DATA_HOME=/var/games/openjk-academy-server/server
+Environment=XDG_CACHE_HOME=/var/games/openjk-academy-server/server/cache
+Environment=XDG_CONFIG_HOME=/var/games/openjk-academy-server/server/config
+EnvironmentFile=-/etc/default/openjk-academy-server
+ExecStart=/usr/games/openjkded $DAEMON_OPTS +exec etc/openjk-academy-server/server.cfg
+Restart=on-failure
+RestartPreventExitStatus=72
+# hardening
+CapabilityBoundingSet=
+NoNewPrivileges=true
+PrivateDevices=true
+PrivateTmp=true
+ProtectHome=true
+ProtectSystem=full
+
+[Install]
+WantedBy=multi-user.target
diff --git a/debian/openjk-academy-server at .service b/debian/openjk-academy-server at .service
new file mode 100644
index 0000000..d89720f
--- /dev/null
+++ b/debian/openjk-academy-server at .service
@@ -0,0 +1,26 @@
+[Unit]
+Description=Jedi Academy game server (instance: "%i")
+After=network.target
+
+[Service]
+Type=simple
+User=openjk-academy-server
+Environment=DAEMON_OPTS=
+Environment=HOME=/var/games/openjk-academy-server/%i
+Environment=XDG_DATA_HOME=/var/games/openjk-academy-server/%i
+Environment=XDG_CACHE_HOME=/var/games/openjk-academy-server/%i/cache
+Environment=XDG_CONFIG_HOME=/var/games/openjk-academy-server/%i/config
+EnvironmentFile=-/etc/default/openjk-academy-server@%i
+ExecStart=/usr/games/openjkded +exec etc/openjk-academy-server/%i.cfg
+Restart=on-failure
+RestartPreventExitStatus=72
+# hardening
+CapabilityBoundingSet=
+NoNewPrivileges=true
+PrivateDevices=true
+PrivateTmp=true
+ProtectHome=true
+ProtectSystem=full
+
+[Install]
+WantedBy=multi-user.target
diff --git a/debian/openjkded at .service b/debian/openjkded at .service
deleted file mode 100644
index 8ca7d3f..0000000
--- a/debian/openjkded at .service
+++ /dev/null
@@ -1,23 +0,0 @@
-[Unit]
-Description=Jedi Academy game server - %i configuration
-PartOf=openjkded.service
-Before=openjkded.service
-After=network.target
-
-[Service]
-User=openjk-academy-server
-ConditionPathExists=/etc/openjk-academy-server/%i.cfg
-Environment=HOME=/var/games/openjk-academy-server/%i.home
-Environment=XDG_DATA_HOME=/var/games/openjk-academy-server/%i.home
-Environment=XDG_CACHE_HOME=/var/games/openjk-academy-server/%i.home/cache
-Environment=XDG_CONFIG_HOME=/var/games/openjk-academy-server/%i.home/config
-ExecStart=/usr/games/openjkded +exec etc/openjk-academy-server/%i.cfg
-Restart=on-failure
-RestartPreventExitStatus=72
-
-[Install]
-WantedBy=multi-user.target
-# We deliberately do not set DefaultInstance so that
-# "update-rc.d openjkded disable" -> "systemctl disable openjkded.service"
-# results in openjkded at default.service not being started unless explicitly
-# requested.
diff --git a/debian/rules b/debian/rules
index 3323476..1d81cf4 100755
--- a/debian/rules
+++ b/debian/rules
@@ -93,16 +93,6 @@ override_dh_auto_install: debian/icons
 		< debian/scripts/jedi.in > debian/scripts/openjkded
 	chmod 0755 debian/scripts/openj*
 
-override_dh_install:
-	dh_install
-	touch debian/openjk-academy-server/usr/lib/openjk-academy/openjk-academy-server-installed
-
-override_dh_systemd_enable:
-	dh_systemd_enable -popenjk-academy-server --name=openjkded
-
-override_dh_installinit:
-	dh_installinit -popenjk-academy-server --name=openjkded
-
 debian/icons: debian/rules
 	install -d debian/icons/512 debian/icons/128 \
 		debian/icons/32 debian/icons/16
diff --git a/debian/default.cfg b/debian/server.cfg
similarity index 100%
rename from debian/default.cfg
rename to debian/server.cfg

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



More information about the Pkg-games-commits mailing list