This is an automated email from the git hooks/post-receive script. smcv pushed a commit to branch master in repository openarena.
commit b3920531ee4fb43a3c0ba6205549c8381ff82081 Author: Simon McVittie <[email protected]> Date: Wed Feb 4 23:07:02 2015 +0000 Sync server support with quake/12 - 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" - put default for DAEMON_OPTS in /etc/init.d/openarena-server so it can operate without /etc/default/openarena-server - "+exec etc/openarena-server/server.cfg" is no longer part of DAEMON_OPTS - add native systemd units - add optional instanced systemd units for multiple servers per machine; stop documenting how to do this with @reboot cron jobs --- debian/changelog | 10 ++++ debian/openarena-server.NEWS | 23 ++++++++ debian/openarena-server.README.Debian | 98 +++++++++++++++---------------- debian/openarena-server.default | 23 ++++---- debian/openarena-server.init | 13 +--- debian/openarena-server.install | 2 + debian/openarena-server.lintian-overrides | 2 + debian/openarena-server.postinst | 5 ++ debian/openarena-server.preinst | 93 +++++++++++++++++++++++++---- debian/openarena-server.service | 25 ++++++++ debian/[email protected] | 22 +++++++ 11 files changed, 233 insertions(+), 83 deletions(-) diff --git a/debian/changelog b/debian/changelog index 0919efa..75233a0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -8,6 +8,16 @@ openarena (0.8.8-10) UNRELEASED; urgency=low * Recommend update-rc.d unconditionally: it "does the right thing" for each of sysvinit, systemd and upstart * Mention service(8) in README.Debian for completeness + * Sync server support with quake/11: + - 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" + - put default for DAEMON_OPTS in /etc/init.d/openarena-server so it can + operate without /etc/default/openarena-server + - "+exec etc/openarena-server/server.cfg" is no longer part of DAEMON_OPTS + - add native systemd units + - add optional instanced systemd units for multiple servers + per machine; stop documenting how to do this with @reboot cron jobs * Use LDFLAGS on non-Linux too * Canonicalize Vcs-Git, Vcs-Browser and switch Vcs-Browser to cgit * Symlink all of /etc/openarena-server into the OpenArena search path diff --git a/debian/openarena-server.NEWS b/debian/openarena-server.NEWS index 9696e75..0c4272d 100644 --- a/debian/openarena-server.NEWS +++ b/debian/openarena-server.NEWS @@ -1,3 +1,26 @@ +openarena-server (0.8.8-10) experimental; urgency=low + + openarena-server configuration has changed in this version for + better systemd support. + + The DAEMON_OPTS variable in /etc/default/openarena-server no longer + contains a configurable "+exec" command. /etc/openarena-server/server.cfg + will always be executed in addition to whatever is specified in + DAEMON_OPTS, and the default DAEMON_OPTS is now empty. + + The START_DAEMON variable in /etc/default/openarena-server is no longer + supported. If openarena-server was previously disabled via START_DAEMON, + upgrading to this version will run "update-rc.d openarena-server disable" + to disable it in the correct way. + + systemd users can now enable additional instances of the server, + [email protected], which use + /etc/default/openarena-server@INSTANCE + and /etc/openarena-server/INSTANCE.cfg instead. + See /usr/share/doc/openarena-server/README.Debian for details. + + -- Simon McVittie <[email protected]> Wed, 04 Feb 2015 22:56:40 +0000 + openarena-server (0.8.8-1) experimental; urgency=low In the Debian packaging for OpenArena 0.8.1 and 0.8.5, the openarena diff --git a/debian/openarena-server.README.Debian b/debian/openarena-server.README.Debian index b771d5f..37834b1 100644 --- a/debian/openarena-server.README.Debian +++ b/debian/openarena-server.README.Debian @@ -1,70 +1,70 @@ OpenArena dedicated server for Debian ===================================== -Running the server via the init script --------------------------------------- +Running one server instance +--------------------------- The openarena-server init script runs a dedicated server as the user "Debian-openarena". This is a simple setup suitable for running one server on a machine; by default it will run a deathmatch server. The Debian-openarena user's home directory is /var/games/openarena-server, -so you can find OA files in the /var/games/openarena-server/.openarena -directory. +and the equivalent of ~/.openarena for the default server is +/var/games/openarena-server/server.oa. By default, the init script will use etc/openarena-server/server.cfg, which is a symlink to /etc/openarena-server/server.cfg. You can edit this file, or put an alternative configuration in -/var/games/openarena-server/.openarena/baseoa and change +/var/games/openarena-server/server.oa/baseoa and change /etc/default/openarena-server to exec that. -The server can be managed in the usual way, e.g. via the recommended -service(8) command: - - service openarena-server stop - service openarena-server start - The whole /etc/openarena-server directory is symlinked into the engine's search path as etc/openarena-server, so you can place files there and exec them with commands like "/exec etc/openarena-server/ctf.cfg". -Disabling the init script -------------------------- - -To disable the init script (for instance if you want to run the server -via screen(1), as below, or manually), use the facilities provided by your -init system. The recommended command is +The server can be managed in the usual way, e.g. via service(8) +and update-rc.d(8) commands like + service openarena-server stop + service openarena-server start update-rc.d openarena-server disable - -which works for all of systemd, sysvinit and upstart. - -Changing the value of the START_DAEMON variable in -/etc/default/openarena-server is deprecated. Please leave it set to -"unless-disabled-by-upgrade". - -Running the server with cron and screen ---------------------------------------- - -One alternative way to run the server is to run it in a screen(1) session -from a cron @reboot action. This can be used to run multiple instances -of the server; you'll need to set a different net_port on each server after -the first, and it's safest to give each server a unique fs_homepath so they -don't overwrite each other's configuration files. - -To do this, you could put something like this in the Debian-openarena user's -crontab (don't break the long lines!): - - @reboot screen -d -m -S ffa /usr/games/openarena-server +set fs_homepath /var/games/openarena-server/ffa +exec etc/openarena-server/ffa.cfg - @reboot screen -d -m -S ctf /usr/games/openarena-server +set fs_homepath /var/games/openarena-server/ctf +set net_port 54321 +exec etc/openarena-server/ctf.cfg - -or in /etc/crontab or a file in /etc/cron.d: - - @reboot Debian-openarena screen -d -m -S ffa /usr/games/openarena-server +set fs_homepath /var/games/openarena-server/ffa +exec etc/openarena-server/ffa.cfg - @reboot Debian-openarena screen -d -m -S ctf /usr/games/openarena-server +set fs_homepath /var/games/openarena-server/ctf +set net_port 54321 +exec etc/openarena-server/ctf.cfg - -If you do that, you can access the servers' consoles by attaching a screen -session to them: - - sudo -u Debian-openarena screen -r ffa - sudo -u Debian-openarena screen -r ctf + update-rc.d openarena-server enable + +which should work for all of Debian's supported init systems. + +Running multiple server instances with systemd +---------------------------------------------- + +Under systemd, openarena-server supports additional instances of the server, +so you can run a deathmatch server and a Capture the Flag server, or +a vanilla OpenArena server and an Excessive Plus server. + +Each instance [email protected] has configuration and state in +/var/games/openarena-server/INSTANCE.oa, and will execute +/etc/openarena-server/INSTANCE.cfg on startup. + +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/openarena-server@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. + +The instance name "server" cannot be used without disabling and stopping +openarena-server.service, since it shares its configuration with that +service. + +For instance, these shell commands (as root) would set up a Capture the +Flag server on port 27970: + + cat > /etc/default/openarena-server@ctf + DAEMON_OPTS="+set net_port 27970" + EOF + cat > /etc/openarena-server/ctf.cfg <<EOF + sv_hostname "My Capture the Flag Server" + g_gametype 4 + map islandctf + EOF + systemctl daemon-reload + systemctl enable [email protected] + systemctl start [email protected] diff --git a/debian/openarena-server.default b/debian/openarena-server.default index 6ebf7b1..a3a36b8 100644 --- a/debian/openarena-server.default +++ b/debian/openarena-server.default @@ -1,16 +1,17 @@ # Defaults for OpenArena init script # sourced by /etc/init.d/openarena-server +# used as an EnvironmentFile by /lib/systemd/system/openarena-server.service # installed at /etc/default/openarena-server by the maintainer scripts -# To disable the server, please use the normal mechanisms provided by init: -# see /usr/share/doc/openarena-server/README.Debian.gz. Changing the value -# of this variable is deprecated. -START_DAEMON=unless-disabled-by-upgrade - -# Additional options that are passed to the daemon. -# Add "+set dedicated 2" here, or "set dedicated 2" in server.cfg, if you want -# your server advertised on the public server list. +# Options that are passed to the daemon. # -# server.cfg is a symlink to /etc/openarena-server/server.cfg, so you -# can use that file for system-wide configuration. -DAEMON_OPTS="+exec etc/openarena-server/server.cfg" +# In addition to these options, the server will execute commands from +# /etc/openarena-server/server.cfg using +# "+exec etc/openarena-server/server.cfg". +# For most options it's better to edit server.cfg instead, but certain +# options such as fs_game and net_port can only be set here. +DAEMON_OPTS="" + +# To disable the server, please use the normal mechanisms provided by init: +# "update-rc.d openarena-server disable". The START_DAEMON variable is no +# longer supported. diff --git a/debian/openarena-server.init b/debian/openarena-server.init index 3ffa3bd..a72fdd0 100644 --- a/debian/openarena-server.init +++ b/debian/openarena-server.init @@ -28,19 +28,12 @@ if [ -f /etc/default/$NAME ] ; then fi q3_start() { - if [ "$START_DAEMON" = "unless-disabled-by-upgrade" ]; then - if [ -e /var/games/openarena-server/init-script-disabled-by-upgrade ]; then - echo -n " (disabled during upgrade, not starting - see /usr/share/doc/openarena-server/NEWS.Debian.gz)" - return 0 - fi - elif [ "$START_DAEMON" != 1 ]; then - echo -n " (disabled in /etc/default/openarena-server - deprecated, see /usr/share/doc/openarena-server/README.Debian.gz)" - return 0 - fi start-stop-daemon --start --quiet --pidfile $PIDFILE --oknodo \ --background --exec $BINARY --startas $DAEMON \ --make-pidfile --chuid $USER \ - -- $DAEMON_OPTS > /dev/null 2>&1 || return 1 + --\ + +set com_homepath server.oa $DAEMON_OPTS\ + +exec etc/openarena-server/server.cfg > /dev/null 2>&1 || return 1 return 0 } diff --git a/debian/openarena-server.install b/debian/openarena-server.install index 457c601..ce7b597 100644 --- a/debian/openarena-server.install +++ b/debian/openarena-server.install @@ -1,4 +1,6 @@ debian/server.cfg etc/openarena-server debian/scripts/openarena-server usr/games +debian/[email protected] lib/systemd/system + debian/tmp/usr/lib/openarena-server/*/*.so debian/tmp/usr/lib/openarena-server/*/*/*.so diff --git a/debian/openarena-server.lintian-overrides b/debian/openarena-server.lintian-overrides new file mode 100644 index 0000000..3f9120f --- /dev/null +++ b/debian/openarena-server.lintian-overrides @@ -0,0 +1,2 @@ +# it's "update-rc.d disable" not "update-rc.d defaults" +openarena-server binary: preinst-calls-updaterc.d openarena-server diff --git a/debian/openarena-server.postinst b/debian/openarena-server.postinst index 5a466d7..0a7ed55 100644 --- a/debian/openarena-server.postinst +++ b/debian/openarena-server.postinst @@ -13,6 +13,11 @@ case "$1" in install -d /var/games install -d /var/games/openarena-server chown Debian-openarena:games /var/games/openarena-server + if [ -d /var/games/openarena-server/.openarena ] && ! [ -e /var/games/openarena-server/server.oa ]; then + # we use com_homepath to redirect server stuff to a non-hidden + # directory and be ready for multi-instance; migrate old configuration + ln -s .openarena /var/games/quake3-server/server.oa + fi ;; abort-upgrade|abort-remove|abort-deconfigure) ;; diff --git a/debian/openarena-server.preinst b/debian/openarena-server.preinst index dff5e29..2ed645f 100644 --- a/debian/openarena-server.preinst +++ b/debian/openarena-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 openarena-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 \ + openarena-server.service.dsh-also \ + /etc/systemd/system/multi-user.target.wants/openarena-server.service + if [ -L /etc/systemd/system/multi-user.target.wants/openarena-server.service ]; then + rm /etc/systemd/system/multi-user.target.wants/openarena-server.service + fi +} + +quake_migrate_disabledness () { + echo "openarena-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/openarena-server has been + # patched by the sysadmin to exit the init script. + ( + set +e + START_DAEMON=1 + [ -r /etc/default/openarena-server ] && . /etc/default/openarena-server + + case "$START_DAEMON" in + (1) + echo "Preserving current status of openarena-server init script (START_DAEMON=1 in /etc/default/openarena-server)" >&2 + exit 104 + ;; + (unless-disabled-by-upgrade) + if [ -e /var/games/openarena-server/init-script-disabled-by-upgrade ]; then + echo "Disabling openarena-server init script to preserve default from openarena-server (<< 0.8.8)" >&2 + exit 101 + else + echo "Preserving current status of openarena-server init script" >&2 + exit 104 + fi + ;; + (*) + # 0 or unknown + echo "Disabling openarena-server init script (previously disabled by START_DAEMON=$START_DAEMON in /etc/default/openarena-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/openarena-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/openarena-server/init-script-disabled-by-upgrade +} + case "$1" in (upgrade) - if dpkg --compare-versions "$2" lt 0.8.8; then - def=/etc/default/openarena-server - home=/var/games/openarena-server - inhibit=$home/init-script-disabled-by-upgrade - - if test -e $def && grep '^START_DAEMON=1$' $def; then - echo "Not disabling openarena-server init script (previously enabled in $def)" >&2 - else - echo "Disabling openarena-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 0.8.8-10~; then + quake_migrate_disabledness "$@" fi ;; (install|abort-upgrade) diff --git a/debian/openarena-server.service b/debian/openarena-server.service new file mode 100644 index 0000000..44fb519 --- /dev/null +++ b/debian/openarena-server.service @@ -0,0 +1,25 @@ +[Unit] +Description=OpenArena game server +After=network.target +# This server and the @server instance would try to use the same +# configuration, and fight over their home directory [email protected] + +[Service] +Type=simple +User=Debian-openarena +Environment=DAEMON_OPTS= +EnvironmentFile=-/etc/default/openarena-server +ExecStart=/usr/games/openarena-server +set com_homepath server.oa $DAEMON_OPTS +exec etc/openarena-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/[email protected] b/debian/[email protected] new file mode 100644 index 0000000..a87183d --- /dev/null +++ b/debian/[email protected] @@ -0,0 +1,22 @@ +[Unit] +Description=OpenArena game server (instance: "%i") +After=network.target + +[Service] +Type=simple +User=Debian-openarena +Environment=DAEMON_OPTS= +EnvironmentFile=-/etc/default/openarena-server@%i +ExecStart=/usr/games/openarena-server +set com_homepath %i.oa $DAEMON_OPTS +exec etc/openarena-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 -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/openarena.git _______________________________________________ Pkg-games-commits mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits

