Запуск в локальной сети сервера Open Arena на Debian


OpenArenaOpenArena — это свободная игра, которая, как утверждают разработчики, всегда будет оставаться таковой. Выпущена под лицензией GNU GPL v2.

Возникла идея поднять внутри локальной сети выделенный (dedicated) сервер игры OpenArena. Выделенный сервер не требует наличия графической подсистемы и дает возможность клиентам совместно играть в Open Arena. Руководства в Инете есть, но или англоязычные или весьма хаотичные. Поэтому решил описать сей процесс для всеобщей пользы. Если чего-то перепутал или ошибся, прошу комментировать. Итак, приступим.

Подготовка основной системы

Установку буду производить на стабильном на данный момент Дебиане 7.2. Установку самой ОСи описывать не буду — ставим в минимальном варианте (все, что будет нужно доставим в процессе).

После установки обновим пакеты:

#apt-get update
#apt-get upgrade

Локализуем ОСь в ru.utf-8.

Смотрим какая локаль стоит:

#locale 

Если не ru.utf-8, дорабатываем:

#dpkg-reconfigure locales

Если говорит, что не обнаружен пакет, устанавливаем его:

#apt-get install locales

выбираем en_US.UTF-8 UTF-8 и ru_UA.UTF-8 UTF-8 (живу в Украине, для России, соответственно, будет ru_RU.UTF-8 UTF-8), затем выбираем локаль по умолчанию ru_UA.UTF-8 UTF-8. После генерации локалей перелогинимся и имеем русскую локализацию в консоли.

Ставим для удобства настройки sudo, unzip и mc:

# apt-get install mc sudo unzip

Добавляем пользователя openarena, под которым будет работать наш игровой сервер, и сразу добавляем его в группу sudo:

# adduser openarena
# usermod -a -G sudo openarena

Все, плацдарм для установки игрового сервера готов. Приступаем непосредственно к установке и настройке игрового сервера.

Установка и настройка выделенного сервера

Основные шаги по созданию выделенного сервера, согласно официальному WIKI, включают в себя следующее:

  1. загрузить Open Arena на сервер;
  2. добавить пользователя, от которого будет работать сервер (в целях безопасности НЕ запускайте сервер с привилегиями пользователя root);
  3. создать файл конфигурации сервера;
  4. убедится, что ваш брандмауэр / маршрутизатор (если таковые имеются) позволяет подключение к используемым Open Arena портам. По умолчанию — это входящий порт UDP 27960 и исходящий порт UDP 27950 (главный сервер) + ответы. Порт 27960 может быть измен во время запуска сервера, порт главного сервера — нет;
  5. запустить сервер и убедиться, что он остается активным после выхода пользователя из системы и перезагрузки.

Качаем архив с игрой с официального сайта (на момент написания статьи версия OpenArena — 0.8.8) и заливаем его на сервер в домашний каталог (например, с помощью scp), распаковываем его и получаем каталог (/home/openarena/openarena-0.8.8) с бинарными файлами, картами и прочим. Данный архив содержит также клиенты для Linux, Windows и MacOS. Клиентскую часть в Linux лучше ставить из репозиториев используемого дистрибутива (в Ubuntu, Debian — это пакет openarena).

Затем, нужно создать в домашнем каталоге рабочий каталог для сервера:

$ mkdir /home/openarena/.openarena

и скопировать туда каталог с картами, который находится в распакованном нами архиве:

$ cp -r /home/openarena/openarena-0.8.8/baseoa /home/openarena/.openarena

Создаем в рабочем каталоге сервера конфигурационный файл сервера /home/openarena/.openarena/baseoa/server.cfg. Параметры этого файла описаны на официальном wiki игры, здесь я только приведу базовый конфиг, который можно изменять и расширять под свои нужды. Скачать конфигурационные файлы можно здесь.

файл server.cfg
sets sv_hostname "Your Open Arena server"
sets sv_maxclients 16
//sv_master1 "dpmaster.deathmask.net"
seta sv_maxPing 150
seta sv_minPing 0
sv_pure 1
seta sv_maxRate 25000
sets sv_fps 25
sets sv_allowdownload 1

//sv_privateClients "2" // slots substracted from sv_maxclients
//sv_privatePassword " "

seta capturelimit 8
seta timelimit 15
seta fraglimit 35

seta bot_minplayers 3
//seta g_spskill 3.0

//set rconPassword "" // for remote ingame servercontrol

seta g_motd "KILL ALL!!!"
seta g_quadfactor 3
seta g_inactivity 0
seta g_allowvote 1

//If you want to use unlagged functionality (since 0.7.6)
g_delagHitscan 1

//You might want to count pushing players over the side of a map as kills. In that case: 
seta g_awardPushing 1

//Special modes since 0.7.6:
//g_instantgib 1
//g_rockets 1
//g_vampire 0.25 //25%
//g_regen 5 //5 health per sec.

//Gametypes
// 0 = Free For All
// 1 = Tourney
// 3 = Team Deathmatch
// 4 = Capture The Flag
// 8 = Elimination
// 9 = CTF Elimination
// 10 = Last Man Standing
// 11 = Double Domination
// 12 = Domination
seta g_gametype 0

set d1 "map aggressor; set nextmap vstr d2"
set d2 "map oa_dm1; set nextmap vstr d3"
set d3 "map oa_dm2; set nextmap vstr d4"
set d4 "map oa_dm3; set nextmap vstr d5"
set d5 "map oa_dm4; set nextmap vstr d6"
set d6 "map kaos2; set nextmap vstr d7"
set d7 "map oa_dm5; set nextmap vstr d8"
set d8 "map oa_rpg3dm2;set nextmap vstr d9"
set d9 "map oa_shouse; set nextmap vstr d1"
wait
vstr d1 // start loop at d1

 Осталось решить вопрос с запуском нашего сервера при старте системы. Я запускаю сервер как демон следующим способом (взято с официального wiki отсюда):

Устанавливаем пакет daemon:

$sudo apt-get install daemon

С правами администратора создаем в каталоге /etc/init.d файл oa_ded следующего содержания:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          oa_ded
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript for an OpenArena server
# Description:       Starts a dedicated OpenArena server and allows 
# it to be started/stopped/restarted with init.d
### END INIT INFO

# Author: Poul Sander <openarena@poulander.com>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="OpenArena dedicated server"
NAME="oa_ded"

#The following line should be the server arguments:
SERVER_ARGS="+exec server.cfg"

# 1==LAN, 2==Internet
DEDICATED_ARG="+set dedicated 1"

DAEMON_ARGS="$DEDICATED_ARG $SERVER_ARGS"

# The executable to use:
DAEMON=/home/openarena/openarena-0.8.8/oa_ded.i386

SCRIPTNAME=/etc/init.d/$NAME

#The game will be executed as this user. NEVER execute as root
USERNAME=openarena

#USERNAME must have write access to the HOMEDIR
#Note that it is not enough to pass +set fs_homepath /path/to/ to a writeable location.
HOMEDIR=/home/$USERNAME

# Exit if the package is not installed
#[ -x "$DAEMON" ] || exit 0

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
    # Return
    #   0 if daemon has been started
    #   1 if daemon was already running
    #   2 if daemon could not be started
    daemon --name="$NAME" --user=$USERNAME --running && return 1 
    daemon --name="$NAME" --respawn --user=$USERNAME --output=/home/openarena/oa_ded.out --env=HOME=$HOMEDIR  $DAEMON $DAEMON_ARGS > /dev/null
    # We do not check if it has been succesfully started as there are not other startup processed that can depend on OpenArena
}

#
# Function that stops the daemon/service
#
do_stop()
{
    # 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
    daemon --name=$NAME --user=$USERNAME --running ] || return 1
    daemon --name=$NAME --user=$USERNAME --stop
    # Wait for children to finish too if this is a daemon that forks
    # and if the daemon is only ever run from this initscript.
    # If the above conditions are not satisfied then add some other code
    # that waits for the process to drop all resources that could be
    # needed by services started subsequently.  A last resort is to
    # sleep for some time.
}

#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
    #
    # If the daemon can reload its configuration without
    # restarting (for example, when it is sent a SIGHUP),
    # then implement that here.
    #
    return 0
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
    do_start
    case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
    0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
    2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  #reload|force-reload)
    #
    # If do_reload() is not implemented then leave this commented out
    # and leave 'force-reload' as an alias for 'restart'.
    #
    #log_daemon_msg "Reloading $DESC" "$NAME"
    #do_reload
    #log_end_msg $?
    #;;
  restart|force-reload)
    #
    # If the "reload" option is implemented then remove the
    # 'force-reload' alias
    #
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
    do_start
    case "$?" in
        0) log_end_msg 0 ;;
        1) log_end_msg 1 ;; # Old process is still running
        *) log_end_msg 1 ;; # Failed to start
    esac
    ;;
      *)
        # Failed to stop
    log_end_msg 1
    ;;
    esac
    ;;
  *)
    #echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    exit 3
    ;;
esac

Добавляем его в автозапуск:

$ sudo update-rc.d oa_ded defaults 19

В результате выполнения этой команды создается символьная ссылка на наш файл oa_ded в каталогах /etc/rcS.d/, из которых система при загрузке запускает находящиеся там сценарии.  Параметр «defaults» задаёт уровни запуска по умолчанию, то есть служба будет запускаться (по крайней мере, при отсутствии блока комментария LSB, указывающего этого не делать) на уровнях запуска с 2 по 5, и останавливаться на уровнях запуска 0, 1 и 6. Параметр «19» гарантирует, что oa_ded запустится после завершения выполнения всех сценариев, чьи номера меньше 19, и раньше всех сценариев, чьи номера равны 20 или более.

Перегружаемся и проверяем старт нашего сервера:

openarena@gameserver:~/.openarena/baseoa$ ps aux |grep arena
 1000      1393  0.0  0.0   2192   548 ?        S    12:36   0:00 daemon --name=oa_ded --respawn --user=openarena --output=/home/openarena/oa_ded.out --env=HOME=/home/openarena /home/openarena/openarena-0.8.8/oa_ded.i386 +set dedicated 1 +exec server.cfg
 1000      1397  2.4  3.5 163628 25828 ?        S    12:36   1:38 /home/openarena/openarena-0.8.8 oa_ded.i386 +set dedicated 1 +exec server.cfg
 root      1682  0.0  0.4   9136  2956 ?        Ss   12:36   0:00 sshd: openarena [priv]
 1000      1684  0.0  0.2   9272  1672 ?        S    12:36   0:00 sshd: openarena@pts/0
 1000      2545  0.0  0.1   5140   784 pts/1    S+   13:43   0:00 grep arena

Если вывод команды похож на этот — значит сервер запустился.

Сервер игры ведет лог, который расположен в /home/openarena/.openarena/baseoa и называется games.log.

Подключаемся клиентом на IP-адрес сервера и удачной игры.

Материалы по теме:

Официальный сайт игры
WIKI
Страница загрузки
Реклама

2 thoughts on “Запуск в локальной сети сервера Open Arena на Debian

  1. >> Перегружаемся и проверяем старт нашего сервера:

    в процессах только первый, а единственный лог куда что то пишется — это syslog, и то там написано только что process killed

    не запускается вобщем, и не говорит почему )

    • Делали все точно по описанию? Проверьте еще раз особенно файл демона на предмет точности путей и пользователя, под которым работает сервер. Что пишет демон в свой лог в домашнем каталоге?

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s