This is an automated email from the git hooks/post-receive script. smcv pushed a commit to branch master in repository openjk.
commit 63012951bfbf6a55504b627652ac601f420b10c0 Author: Simon McVittie <[email protected]> Date: Tue Dec 30 20:35:41 2014 +0000 Add init script and instanced systemd unit --- debian/control | 2 + debian/default.cfg | 52 ++++++++++++++++++++ debian/openjk-academy-server.README.Debian | 57 ++++++++++++++++++++++ debian/openjk-academy-server.install | 2 + debian/openjk-academy-server.links | 3 ++ debian/openjk-academy-server.openjkded.init | 67 ++++++++++++++++++++++++++ debian/openjk-academy-server.openjkded.service | 15 ++++++ debian/openjk-academy-server.postinst | 30 ++++++++++++ debian/openjk-academy-server.postrm | 16 ++++++ debian/[email protected] | 22 +++++++++ debian/rules | 12 ++++- 11 files changed, 277 insertions(+), 1 deletion(-) diff --git a/debian/control b/debian/control index cef695b..374596b 100644 --- a/debian/control +++ b/debian/control @@ -6,6 +6,7 @@ Uploaders: Simon McVittie <[email protected]> Build-Depends: cmake, debhelper (>= 9), + dh-systemd, dpkg-dev (>= 1.16.1), icnsutils, imagemagick, @@ -43,6 +44,7 @@ Architecture: i386 amd64 Depends: ${misc:Depends}, ${shlibs:Depends}, + adduser, jedi-academy-data | game-data-packager (>= 38), openjk-common, Description: Jedi Academy multiplayer game server diff --git a/debian/default.cfg b/debian/default.cfg new file mode 100644 index 0000000..f7292e5 --- /dev/null +++ b/debian/default.cfg @@ -0,0 +1,52 @@ +// Sample server configuration for OpenJK in Debian +// +// See e.g. http://www.chopshopservers.com/education/homeserver.htm for more +// commands and variables. + +seta sv_hostname "An unconfigured Debian server" +// sorry, couldn't resist -smcv +seta g_motd "may the source be with you" + +// The port must be different for each server instance. The default is 29070. +seta net_port 29070 + +// Game type. If you change this, change the map below too. +// +// In OpenJK, these are a mixture of the ones from Jedi Outcast and +// Jedi Academy: +// +// 0: free-for-all (deathmatch) +// 1: holocron +// 2: Jedi Master +// 3: duel (1:1 tournament) +// 4: power duel (2:1 tournament) +// 5: single player free-for-all +// 6: team free-for-all +// 7: siege +// 8: capture the flag +// 9: capture the ysalamiri +seta g_gametype "0" + +// starting map (required) +// +// mp/ffa1: Vjun Sentinel +// mp/ffa2: Korriban +// mp/ffa3: Tatooine +// mp/ffa4: Rift Sanctuary +// mp/ffa5: Taspir +// mp/ctf1: Imperial Drop Zone +// mp/ctf2: Hoth Wasteland +// mp/ctf3: Yavin Hilltops +// mp/ctf4: Coruscant Streets +// mp/ctf5: Factory +// mp/duel1: Bespin Courtyard +// mp/duel2: Generator Room +// mp/duel3: Imperial Shaft +// mp/duel4: Imperial Control Room +// mp/duel5: Taspir Landing +// mp/duel6: Yavin Training Grounds +// mp/duel7: Rancor Pit +// mp/duel8: Abandoned City +// mp/duel9: Hoth +// mp/duel10: Vjun Fuel Processing +map mp/ffa1 diff --git a/debian/openjk-academy-server.README.Debian b/debian/openjk-academy-server.README.Debian new file mode 100644 index 0000000..d54baf6 --- /dev/null +++ b/debian/openjk-academy-server.README.Debian @@ -0,0 +1,57 @@ +Jedi Academy dedicated server for Debian +======================================== + +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. + +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 +this file to reconfigure the default instance. + +The server can be managed in the usual way, e.g. via service(8) commands +like + + service openjkded stop + service openjkded start + +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. + +Multiple instances under systemd +-------------------------------- + +Under systemd, openjkded.service just depends on [email protected], +which runs the actual server. You can create an additional instance +"foo" like this: + +- create /etc/rtcw-server/foo.cfg based on /etc/rtcw-server/default.cfg + (remember to change the net_port) +- run "systemctl enable [email protected]" + +You can control individual instances with commands like +"systemctl start [email protected]". +You can also use commands like "systemctl start openjkded.service" +to start the default instance and all enabled instances. + +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 [email protected]") +or disable openjkded.service ("systemctl disable openjkded.service"). diff --git a/debian/openjk-academy-server.install b/debian/openjk-academy-server.install index edfac8b..b543a33 100644 --- a/debian/openjk-academy-server.install +++ b/debian/openjk-academy-server.install @@ -3,3 +3,5 @@ debian/scripts/openjkded usr/games usr/lib/openjk/openjkded usr/lib/openjk-academy usr/lib/openjk/openjkded.* usr/lib/openjk-academy +debian/[email protected] lib/systemd/system +debian/default.cfg etc/openjk-academy-server diff --git a/debian/openjk-academy-server.links b/debian/openjk-academy-server.links new file mode 100644 index 0000000..7aba54a --- /dev/null +++ b/debian/openjk-academy-server.links @@ -0,0 +1,3 @@ +# so you can do "exec etc/openjk-academy-server/default.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 new file mode 100644 index 0000000..735d80f --- /dev/null +++ b/debian/openjk-academy-server.openjkded.init @@ -0,0 +1,67 @@ +#!/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 new file mode 100644 index 0000000..d247dfe --- /dev/null +++ b/debian/openjk-academy-server.openjkded.service @@ -0,0 +1,15 @@ +# 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 [email protected] + +[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.postinst b/debian/openjk-academy-server.postinst new file mode 100644 index 0000000..b1c63ca --- /dev/null +++ b/debian/openjk-academy-server.postinst @@ -0,0 +1,30 @@ +#!/bin/sh + +set -e + +case "$1" in + configure) + if ! getent passwd openjk-academy-server >/dev/null; then + adduser --disabled-password --quiet --system \ + --home /var/games/openjk-academy-server --no-create-home \ + --gecos "Jedi Academy dedicated server" \ + --ingroup games openjk-academy-server + fi + # Unlock account, if it was locked by our postrm + if [ -f /etc/shadow ]; then + usermod -U -e '' openjk-academy-server + else + usermod -U openjk-academy-server + fi + install -d /var/games + install -d -o openjk-academy-server -g games /var/games/openjk-academy-server + ;; + abort-upgrade|abort-remove|abort-deconfigure) + ;; + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +#DEBHELPER# diff --git a/debian/openjk-academy-server.postrm b/debian/openjk-academy-server.postrm new file mode 100644 index 0000000..4a5ce98 --- /dev/null +++ b/debian/openjk-academy-server.postrm @@ -0,0 +1,16 @@ +#!/bin/sh + +set -e + +#DEBHELPER# + +if [ "$1" = "purge" ] ; then + # Lock account on purge + if [ -f /etc/shadow ]; then + usermod -L -e 1 openjk-academy-server + else + usermod -L openjk-academy-server + fi + rm -r /var/games/openjk-academy-server + rmdir --ignore-fail-on-non-empty /var/games +fi diff --git a/debian/[email protected] b/debian/[email protected] new file mode 100644 index 0000000..9739082 --- /dev/null +++ b/debian/[email protected] @@ -0,0 +1,22 @@ +[Unit] +Description=Jedi Academy game server - %i configuration +PartOf=openjkded.service +Before=openjkded.service +After=network.target + +[Service] +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 [email protected] not being started unless explicitly +# requested. diff --git a/debian/rules b/debian/rules index 9f7b871..11640f2 100755 --- a/debian/rules +++ b/debian/rules @@ -30,7 +30,7 @@ include /usr/share/dpkg/default.mk # for convenience, use a builddir that is excluded by upstream's .gitignore %: - dh $@ --builddir=obj --parallel + dh $@ --builddir=obj --with=systemd --parallel override_dh_auto_configure: dh_auto_configure -- \ @@ -93,6 +93,16 @@ 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 -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openjk.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

