Как сделать сервер quake 3 arena

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Я продолжаю писать цикл статей, касающихся поднятия игровых серверов.
В прошлой заметке я рассказал, как поднять свой сервер игры Doom2, а в этой заметке мы поднимём ещё парочку игрушек, созданных той же компанией id software.

Итак, мы будем поднимать сервера для пары квейков, мультиплеер которых стал классикой — Quake2 и Quake3. Поскольку сервера эти по современным меркам очень легковесны, а такие шутеры не несут на себе никаких ценных и приватных данных, то не возбраняется запустить их в той же виртуалке, где крутятся другие сервера такого типа. Запускать мы их будет от других пользователей, чтобы в случае нахождения уязвимости в игровом сервере ущерб всё равно был бы по возможности минимизирован.
Содаем пользователей заранее:

И создадим помимо домашних каталогов каталоги с основными файлами игры:

echo "Stop Quake 2 Server. ";
echo " pkill quake2. ";
pkill quake2
echo " wait 5 sec . ";
sleep 5

echo "Start Quake 2 Server. ";
cd /usr/games/quake2;

$runprefix quake2_dm ./quake2 +set port 27910 +set dedicated 1 +map q2dm1
$runprefix quake2_ctf ./quake2 +set port 27911 +set game ctf +set dedicated 1 +map q2ctf1

echo "Stop Quake 3 Server. ";
echo " pkill q3ded. ";
pkill q3ded

echo " wait 5 sec . ";
sleep 5

echo "Start Quake 3 Server. ";
cd /usr/games/quake3;

$runprefix quake3_dm ./q3ded +set net_port 27960 +set sv_fps 120 +set dedicated 2 +exec dm.cfg
$runprefix quake3_ctf ./q3ded +set net_port 27961 +set sv_fps 120 +set dedicated 2 +exec ctf.cfg

Скрипты по сути в основе своей одинаковы, меняются только параметры запуска.

Quake 2

а в ./baseq2/maps.lst — список карт:

Осталось положить pak0.pak и pak1.pak в baseq2, и можно запускать.

Quake 3

— dm.cfg — конфиг дефматч-сервера:

Конфиг смены карт maps_dm.cfg:

Конфиг управления ботами bots_dm.cfg:

Из важного — есть встроенные боты (для их корректной работы требуется наличие *.aas-файла рядом с *.bsp-файлом), свой скрипт ротации карт, голосовалка за кик читеров / смену карты, и ещё ряд параметров.
— ctf.cfg — конфиг для Capture the flag.

Всё, можно запускать. Если при запуске налбладаются ошибки об отсутствии библиотек — ставим их с помощью пакетного менеджера, но мне вроде этого делать не пришлось.
Веб-сервер настраивается полностью аналогично, как мы это делали для Doom2 — отдельная запись в DNS, для неё свой виртуал-хост, в каталоге виртуал-хоста — симлинк в каталог с игрой. Не забыть проверить, что апач корреткно обработал htaccess.

Также можно прикрутить автоматическую очистку логов. Quake3 пишет логи в ~/.q3a/baseq3, имена логов заданы в окнфигах. Quake2 логов по умолчанию не пишет.

В /etc/rc.local прописываем вызовы наших скриптов, естественно, под своими пользователями:

Серверы подняты, каждой игре выделен свой пользователь, можно погамать.

Также можно на сервере вместо классического сервера q3ded использовать ioquake3 — в этом случае меняется только имя бинарника, запускающего сервер, а всё остальное остаётся таким же, как и раньше.

Для управления уже запущенным сервером есть два варианта.
Первый — зайти по SSH пользователем quake3, присоединиться к screen-сессии (screen -Rx quake3_dm) и начать вводить команды.
Этот способ более безопасен против перехвата паролей из траффика и не требует никакого доп-софта, кроме ссш-клиента. Но при этом предоставляется полный доступ ко всем конфигам и файлам сервера. Тут всё понятно.
Второй — использовать rcon. Пароль тут передается совсем несекурно — он отображается при вводе в игре и идёт по сети открытым текстом, но и доступ к серверу предоставляется лишь частичный. Из плюсов — можно управлять прямо из игры.
Запустив Quake3, мы можем войти в игру, открыть консоль (кнопка [~] по умолчанию) и ввести команду \rconpassword [Пароль из конфига]
После этого мы может вводить rcon-команды типа таких:
\rcon kick CheaterName
\rcon map q2dm7
\rcon fraglimit 50
\rcon timelimit 10
и прочих. Если сервер заполнен — есть возможность послать rcon-команды из клиента, не заходя в игру, для этого сперва надо задать в консоли \rconaddress [АдресСервера:Порт], потом кинуть \rconpassword [НашПароль], а потом уже — команды.
Плюсы — сменить карту или фраглимит админ может прямо из игры, никуда не переключаясь.
Вообще через RCON управляются очень многие игровые серверы. Для стрелялок и прочих игр, не хранящих ничего ценного внутри, это отличный протокол. Самое деструктивное, что можно сделать с сервером кваки через rcon — выключить сервер. SSH-доступ более надёжен, но и возможности предоставляет более полные, в том числе и возможности что-нибудь сломать.
Пароль rcon давать кому попало не следует, иначе вам испортят игру на вашем же сервере.

эта игра настраивается проще простого, если сама сеть у вас работает норм, то один из вас просто должен зайти в Квак создать сервак выбрав в мультиплеере LAN заметте какой порт используется, такой же пропишите в мультиплеере других игроков, если там не так. Выбирайте карту и начинайте игру, после этого ни могут видеть вашу карту в "мультиплеер" LAN, если не видно нажмите кнопку "обновить"

а connect 192.168.0.100

Возьмите OpenArena. Тот же QA3, только в профиль. Он без лицензий, взносов и прочих поносов.
Настраивается сам, только находитесь в под одной сетевой маской и выбирайте раздел Local.

Установка Quake 3 сервера на Linux

Если операционная система, где нужно поднять сервер по Quake 3, является 64 разрядной, а вы планируете запускать сервер для 32 разрядной системы, то необходимо выполнить следующую команду:

Которая добавит в систему поддержку исполняемых файлов архитектуры i386 (32 битной).

Далее выполняем обновление базы доступных пакетов:

Теперь устанавливаем необходимые библиотеки:

Устанавливаем программу screen для более приятного и удобного администрирования сервером:

Установка и настройка сервера

Создаем папку под сервер - например по пути /usr/local/games/quake3.

  • Копируем папку baseq3, где должны быть следующие файлы:
    • pak0.pk3
    • pak1.pk3
    • pak2.pk3
    • pak3.pk3
    • pak4.pk3
    • pak5.pk3
    • pak6.pk3
    • pak7.pk3
    • pak8.pk3

    Кроме того, если стоит задача поднять сервер по какому-либо моду - например CPMA (Challenge Promode Arena - мод, на котором проходили все турниры последних лет, является заменой OSP), то необходимо:

    Теперь можно запустить сервер:

    Краткое описание того, что понаписано в параметрах запуска выше:

    screen -m -A -S quake3_27960 - запускаем screen сессию, с именем quake3_27960. Теперь при рабочем сервере мы всегда можем на неё зайти, и посмотреть, что там происходит.
    Делается это следующей командой

    Выйти из сессии screen без её закрытия можно клавишами ctrl + A + D .

    set dedicated 2 - запускает сервер в выделенном режиме;
    net_ip - задает ip адрес, который будет использоваться для работы сервера;
    net_port - задает используемый сервером порт;
    fs_basepath - указывает папку в которой лежат файлы игры;
    fs_homepath - указывает директорию, которая будет использоваться запущенным сервером для хранения логов или конфигов - очень удобно, если планируется запускать несколько серверов с одного исполняемого файла;
    fs_cdpath - аналогична fs_basepath;
    fs_game - указывает папку с используемым модом (если не планируется использование мода, то данная команда не нужна);
    vm_game 2 - команда, которая необходима для корректной работы сервера cpma;
    sv_maxclients 16 - максимальное количество клиентов на сервере;
    map cpm22 - запускаемая карта по умолчанию, можно изменить на любую другую.

    Если нужно запустить два сервера, то строка запуска должна выглядеть следующим образом:

    Культовая компьютерная игра в жанре многопользовательского шутера от первого лица, изданная компанией id Software 2 декабря 1999 года, третья в серии игр Quake и первая, не имеющая полноценного однопользовательского режима.

    Disclaimer

    Этот документ предоставляется "как есть". Автор не несёт ответственности за любой вред (моральный или физический), который может быть нанесён оборудованию или людям в результате прочтения этого документа.

    Системные требования

    Linux с ядром версии 2.2.9 или выше, glibc-2.1 или выше
    Процессор от Pentium II 266MHz
    128 MB памяти
    500 MB места на жестком диске
    Соединение с интернетом и/или выход в локальную сеть

    Если вы хотите играть с того же компьютера, на котором запущен сервер - требования к компьютеру будут намного выше.

    Дистрибутив

    Поставьте ваш любимый дистрибутив Linux. Какой именно - практически не имеет значения. Главное - проследите, чтобы это была одна из последних его версий. Инструкции по установке вы всегда можете получить на сайте выбранного дистрибутива. Для новичков могу порекомендовать Slackware, SuSE, Red Hat.

    Установка quake3

    Лирическое отступление о правах доступа
    В Linux права доступа организованы отлично от того, что вы могли видеть раньше в других ОС. Существует суперпользователь (root), и права доступа для него не проверяются. То есть root имеет полный доступ ко всей системе. Для каждого файла существуют три правила доступа: владелец (owner), группа пользователей (group), и все остальные (others). В каждом из этих правил есть права на чтение файла (read), запись в него (write), и запуск файла на исполнение (execute).

    Мы будем проводить установку из-под пользователя root, а запуск сервера из-под обычного пользователя (назовём его "user").

    Даём скачанному файлу права для запуска. Запускаем его.

    В зависимости от того, в каком режиме (графическом или консольном) вы работаете, вы увидите различное представление одного и того же инсталлятора.

    Устанавливая quake3, убедитесь, что выделена опция "Dedicated server".

    Установка карт, модов, дополнений
    Как говорилось выше - в релизе есть далеко не всё, что нам надо. Папку baseq3 можно взять с официального диска с игрой. Не бойтесь переписать её поверх той, что была только что поставлена. Все остальные файлы и папки - osp, cpma - можно взять из любой работающей копии игры (моды обычно распространяются бесплатно).

    В дальнейшем будем считать, что Quake III установлен в /usr/local/games/quake3

    Запуск сервера

    Дальнейшие действия проводим из-под аккаунта обычного пользователя. Хотя мы и полностью уверены, что quake3 не нанесёт никакого вреда системе, будучи запущенным от суперпользователя, но всегда, когда расширенные права не нужны, лучше ими не пользоваться.

    Простейший случай
    Заходим в /usr/local/games/quake3, и запускаем сервер с нужными нам параметрами.

    $ cd /usr/local/games/quake3
    $ ./q3ded +set fs_game osp +set sv_strictauth 0 +set sv_pure 0 +map q3dm6

    В консоли вы увидите полный лог сервера, и после загрузки появится возможность вводить команды. Терминал, из которого был запущен сервер станет обычной консолью, к которой вы уже привыкли.

    О хранении файлов и логов сервера
    Linux Quake III хранит файлы совсем не так, как его windows-версия. Если в windows всё хранится в том месте, куда проинсталлирована игра, то в Linux есть два места, откуда можно брать конфиги, моды и прочие нужные файлы. Первое - как всегда. Второе - домашняя директория пользователя. В ней при первом запуске создается директория ".q3a".

    Допустим, вы запустили сервер с модом osp, и выполняете на сервере конфиг myServer.cfg. Вы пишете в консоли сервера "exec myServer.cfg". Сервер ищет его в следующем порядке:

    /home/user/.q3a/osp/myServer.cfg
    /home/user/.q3a/baseq3/myServer.cfg
    /usr/local/games/quake3/osp/myServer.cfg
    /usr/local/games/quake3/baseq3/myServer.c fg

    Если вы (в той же ситуации) записываете конфиг командой "writeconfig newServer.cfg", то он будет записан только в "/home/user/.q3a/osp/newServer.cfg".

    Регистр символов имеет значение. Конфиги myserver.cfg и myServer.cfg - совершенно разные файлы. По той же причине файл pak0.PK3 не будет найден, и сервер вылетит с ошибкой.

    Пути надо писать только с использованием прямого слеша (/).

    /usr/local/games/quake3 - правильно.
    usrlocalgamesquake3 - ошибка.

    Тонкая настройка

    Скрипт для запуска
    Вам наверняка надоест каждый раз печатать кучу параметров для командной строки сервера. Этот процесс можно легко автоматизировать, создав простой скрипт. У пользователя нет прав писать в директорию /usr/local/games/quake3, поэтому создадим скрипт в домашней директории. Назовём его q3.sh (не забудьте дать ему права на исполнение). Содержимое должно быть таким:

    ./q3ded +set com_hunkmegs 32 +set net_port 27960 +set dedicated 1 +set vm_game 2 +set vm_cgame 2 +set vm_ui 2 +set fs_game osp
    +set sv_strictAuth 0 +set sv_punkbuster 0 +set sv_lanForceRate 1 +set sv_maxrate 15000 +exec 1v1.cfg

    Во второй строке мы переходим в то место, где лежат файлы для сервера. q3ded ищет файлы данных в домашней директории, затем в текущей директории. Поэтому нам надо перейти туда, чтобы программа всё нашла.

    Для переноса параметров на новую строку можно поставить обратный слеш в конце предыдущей строки.

    Продвинутые параметры
    Чего не хватает в простом скрипте? Во-первых, при закрытии консоли, в которой скрипт был запущен, закроется и сервер. Это неудобно, если вы хотите, чтобы ваш сервер работал 24/7. Во-вторых, если таки скриптом мы запустим два сервера, то их логи будут писаться в один и тот же файл. Впоследствии их будет невозможно разобрать.

    start)
    nice -n 0 ./q3ded +cvar_restart
    +set com_hunkmegs 32
    +set net_port 27960
    +set dedicated 1
    +set vm_game 2
    +set vm_cgame 2
    +set vm_ui 2
    +set fs_game osp
    +set fs_homepath /home/quake3/.q3a-server1
    +set sv_strictAuth 0
    +set sv_punkbuster 0
    +set sv_lanForceRate 1
    +set sv_maxrate 15000
    +exec 1v1.cfg >&/dev/null &
    exit
    ;;
    stop)
    killall q3ded
    ;;
    *)
    echo "Usage: "
    exit 1
    esac
    exit 0

    Теперь сервер запускается и останавливается командами:

    $ /home/user/q3.sh start
    $ /home/user/q3.sh stop

    Эти команды ничего не выводят на экран. О деятельности сервера можно судить по логам, которые находятся в /home/user/.q3a-server1/osp/games.log. Соответственно, конфиги сервера теперь надо класть в его новую домашнюю директорию, то есть /home/user/.q3a-server1/osp.

    Запуск нескольких серверов
    В этом случае имеет смысл изменить названия исполняемых файлов, которые запускаются скриптом. Нужно создать файлы q3ded.somethingnew, которые будут содержать то же, что и исходный q3ded. Сделаем это с помощью механизма "символических ссылок".

    Это удобно тем, что если вам понадобится изменить q3ded (например, при выходе новой версии), то будет достаточно изменить только один файл, а все ссылки на него менять не надо. Кроме того, такой метод сохраняет место на жестком диске.

    Не забудьте изменить q3ded на q3ded.27961 в двух местах в скрипте, который запускает сервер. Также можно сменить порт, домашнюю директорию и конфиг для каждого из скриптов.

    Клиенты не могут приконнектиться к серверу.
    Проверьте, чему равны переменные sv_pure, sv_punkbuster, sv_strictauth. Их лучше всего выставлять равными нулю.

    Проверьте, работает ли на компьютерах firewall. Возможно, сервер работает корректно, но Linux не принимает соединения на 2796x порты. Также могут быть проблемы с подключением к интернету как на клиенте, так и на сервере.

    Читайте также: