Quake 3, как много в этом звуке…
За последние 16 лет, с момента выхода первой версии, q3 изменился не сильно. Не поймите неправильно — игра менялась. Развились и канули в лету турнирные моды (Привет, osp, cmpa — мы вас помним!), родился quake live в браузере, перебрался в steam, нативный клиент для линукс. Чемпионатов стало меньше, игроков на серверах — тоже.
Но бесшабашная динамика осталась практически неизменной. В современной инкарнации, Quake Live — всё та же старая-добрая игра, вобравшая в себя все лучшие наработки за прошедшие годы.
Чего стоит только сервер minqlx, написанный на python, с поддержкой плагинов и кросс-серверной статистикой на qlstats.net, и огромный marketplace в стиме с дополнительными режимами игры, картами, звуками.
И хоть серверов сейчас намного больше, чем игроков — данный очерк скорее претендует на демонстрацию возможностей, и не призывает их бездумно плодить. Но, если вы просто хотите свой небольшой сервер для игры с друзьями долгими зимними вечерами, и не знали с чего начать, или Вам просто интересно, как сейчас происходит процесс установки — добро пожаловать под кат!
Инструкция актуальна для Ubuntu Server от 14.04 и выше. (в других дистрах установка minqlx может быть усложнена отсутствием python35 из коробки).
Начнём с тривиальных вещей — поставим полезный софт, откроем порты на firewall. Команды вводятся от имени root.
apt-get install -y wget fail2ban htop firewalld mc adduser ql firewall-cmd --permanent --zone=public --add-port=27960-27965/tcp && firewall-cmd --permanent --zone=public --add-port=27960-27965/udp && firewall-cmd --reload
порты udp использует сервер игры, tcp — сервер статистики qlstats
Установим дополнительный софт и зависимости
apt-get install -y libc6:i386 libstdc++6:i386 software-properties-common supervisor build-essential redis-server git wget http://download.zeromq.org/zeromq-4.1.4.tar.gz; tar -xvzf zeromq-4.1.4.tar.gz; rm zeromq-4.1.4.tar.gz; cd zeromq*; ./configure --without-libsodium; make install; cd ..; rm -r zeromq*; easy_install pyzmq
Очередь за установкой собственно сервера Quake Live через Стим
mkdir /home/steam; cd /home/steam; wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz; tar -xvzf steamcmd_linux.tar.gz; rm steamcmd_linux.tar.gz /home/steam/steamcmd.sh +login anonymous +force_install_dir /home/ql/ +app_update 349090 +quit
После недолгого ожидания, сервер загружен в папку ql и готов к работе. Но самое интересное только начинается — для полноценной работы понадобится установить и настроить minqlx. Список команд сервера доступен на GitHub.
cd /home/ql wget -O - https://api.github.com/repos/MinoMino/minqlx/releases | grep browser_download_url | head -n 1 | cut -d '"' -f 4 | xargs wget && find -name \minqlx*.tar.gz -exec tar xvzf '{}' \; && find -name \minqlx*.tar.gz -exec rm '{}' \;
Настроим автообновление сервера, иначе через некоторое время клиенты не смогут к нему присоединиться:
tee /home/quakeupdate.sh <<-'EOF' echo "updating quake live [$(date)]" /usr/bin/supervisorctl stop all /home/steam/steamcmd.sh +login anonymous +force_install_dir /home/ql/ +app_update 349090 +quit /usr/bin/supervisorctl start all EOF chmod +x /home/quakeupdate.sh && echo -e "\n0 6 * * * root sh /home/quakeupdate.sh > /var/log/quakeupdate.log 2&>1;chown -R ql:ql /home/ql" >> /etc/crontab
После установки сервера — логично поставить плагины. Не буду описывать их все, остановлюсь на тех, что качаются отдельно и не входят в стандартную поставку:
branding — изменение надписей, которые показываются при подключении к серверу.
q3resolver — сопоставление старых названий карт из q3 с новыми названиями, работает только для dm и ctf карт, но можно вписать дополнительные, или задать свои шорткаты.
ratinglimiter — позволит ограничить вход на сервер игрокам с рейтингом ниже или выше заданного; для использования в конфиге должен быть включен модуль balance.
changemap — меняет карту на заданную в конфиге, когда на сервере никого нет.
pingspec — вежливо просит покинуть сервер (kick) игроков с пингом выше заданного значения.
clanspinner — свистелка для анимации клантега, просто чтобы показать, что это возможно 🙂
autorestart — перегружает сервер в заданное время, когда на нём нет игроков.
custom_vote — накладывает ограничения на определённые режимы голосования в игре.
git clone https://github.com/MinoMino/minqlx-plugins.git && cd ./minqlx-plugins && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/branding.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/q3resolver.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/ratinglimiter.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/changemap.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/archive/beta/pingspec.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/archive/beta/clanspinner.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/autorestart.py && wget https://raw.githubusercontent.com/tjone270/Quake-Live/master/minqlx-plugins/custom_votes.py
Дело за малым — создаём файл для запуска сервера
tee /home/ql/start-server.sh <<-'EOF' #!/bin/bash gameport=`expr $1 + 27960` rconport=`expr $1 + 28960` servernum=`expr $1 + 1` rm /home/ql/$gameport/baseq3/server.cfg cp /home/ql/baseq3/server-$servernum.cfg /home/ql/$gameport/baseq3/server.cfg exec /home/ql/run_server_x64_minqlx.sh \ +set net_strict 1 \ +set net_port $gameport \ +set sv_hostname "My best server #$servernum" \ +set fs_homepath /home/ql/$gameport \ +set zmq_rcon_enable 1 \ +set zmq_rcon_password "rconpassword" \ +set zmq_rcon_port $rconport \ +set zmq_stats_enable 1 \ +set zmq_stats_password "statpassword" \ +set zmq_stats_port $gameport EOF
Обратите внимание, конфиг сервера должен находиться в папке ./baseq3/
Имя конфига — server-1.cfg для сервера на порту 27960, server-2.cfg для сервера на порту 27961 и т.д. Количество запущенных серверов регулируется через supervisor, об этом ниже.
Сперва нужно подготовить файл access.txt и вписать в него 17-значный стим-id (тот, что в урл при переходе на ваш профиль в стим) с указанием предоставить админ-доступ.
Делается это очень просто:
echo -e "\n12345678910111213|admin" >> /home/ql/baseq3/access-my.txt
В этом же файле можно прогнать неугодных (чтобы забанить игрока — нужно написать id|ban), или поощрить достойных (id|mod — модератор).
В данном случае, все сервера будут использовать один список доступа, но можно сделать и разные, по аналогии с конфигами.
Файлы можно подключать прямо во время игры:
g_accessFile "filename" reload_access
но в этом случае ql будет их искать в папке /home/ql/номерпорта/baseq3
Чтобы сервер работал — нужен конфиг:
tee /home/ql/baseq3/server-1.cfg <<-'EOF' set sv_tags "Location,duel,elo". set sv_mapPoolFile "mappool_duel.txt" set g_gametype "duel" set g_accessFile "access-myaccess.txt" set sv_maxClients "10" set g_password "" set sv_privateClients "2" set sv_privatePassword "mypass". set com_hunkMegs "60" set sv_floodprotect "10" set g_floodprot_maxcount "10" set g_floodprot_decay "1000" set g_voteFlags "29800" set g_allowVote "1". set g_voteDelay "0". set g_voteLimit "0" set g_allowVoteMidGame "1" set g_allowSpecVote "0". set g_inactivity "120" // Kick players who are inactive for x amount of seconds. set g_alltalk "1" set sv_serverType "2". set sv_master "1" set sv_fps "40" set sv_idleExit "120" set sv_pure "0" set serverstartup "map bloodrun duel" // minqlx configuration set qlx_owner "12345678910111213" set qlx_plugins "plugin_manager, essentials, motd, permission, ban, silence, clan, names, log, workshop, balance, branding, changemap, pingspec, clanspinner, autorestart, custom_votes" set qlx_balanceUrl "qlstats.net" set qlx_balanceApi "elo_b" set qlx_protectedPerm "3" set qlx_defaultMapToChangeTo "bloodrun" set qlx_defaultMapFactoryToChangeTo "duel" set qlx_pingSpecSecondsBetweenChecks "30" set qlx_pingSpecMaxPing "120" set qlx_rulesetLocked "1" set qlx_disablePlayerRemoval "0" set qlx_disableCvarVoting "1" set qlx_cvarVotePermissionRequired "3" // branding set qlx_serverBrandName "MY Server #1" set qlx_serverBrandTopField "server admin : player" set qlx_serverBrandBottomField "Some text here" set qlx_connectMessage "welcome to server" set qlx_loadedMessage "Please be respectfull to each other" set qlx_countdownMessage "Be good or be dead. GL & HF!" set qlx_endOfGameMessage "Good Game!" reload_access reload_mappool EOF
Осталось совсем немного! На всякий случай, переопределим владельца в папке /home/ql:
chown -R ql:ql /home/ql
Сервер настроен, осталось убедиться, что он будет работать всегда, когда потребуется. Не зря же мы ставили supervisor?
tee /etc/supervisor/conf.d/ql.conf <<-'EOF' [program:quakelive] command=/bin/bash -c "exec /home/ql/start-server.sh %(process_num)s" user=ql process_name=ql_%(process_num)s numprocs=3 autorestart=true EOF
service supervisor restart
данный конфиг запустит 3 инстанса quake live с портами 27960, 27961, 27962, и будет перезапускать их в случае зависания, а так же запускать при перезагрузке сервера. Для управления вручную используется supervisorctl start/stop/restart all/ql_1
Ну и напоследок — если хотите, чтобы статистика на вашем сервере собиралась и учитывалась — зарегистрируйте сервера на сайте qlstats.net:8084/servers.html, используя пароль из скрипта запуска start_server.sh, строка zmq_stats_password.
Чуть не забыл! Для добавления контента, отредактируйте файл /home/ql/baseq3/workshop.txt.
cat /home/ql/baseq3/workshop.txt # specify 1 workshop item id per line, ex: # 494372396 # 441344649
Контент вот здесь. Айди проще всего скопировать из url понравившегося дополнения. Кстати, тут есть старый добрый дефраг со всеми возможными картами 😉
Не забудьте перезапустить сервера после добавления новинок!
supervisorctl restart all
Пожалуй, на этом всё. Надеюсь, эта информация будет полезной — полноценного howto по установке серверов Quake Live на русском я не встречал, что и сподвигло на написание этой заметки.
Данные настройки позволяют серверу кроме всего прочего работать со статистикой игроков, просмотр во время игры — при помощи команды !elo. Рейтинг высчитывается автоматически, на основании всех игр на всех серверах, поставляющих статистику на qlstats.net.
До 1500 — обычные игроки, от 1600 и выше — те, кто играют почаще и получше, от 2000 — профи и киборги-убийцы, отдавшие богу квейка мозг, сердце, и большую часть свободного времени 🙂
Послесловие.
Некоторые технически продвинутые читатели с недоумением подумают — зачем всё это, если есть докер, и будут отчасти правы. Отчасти потому, что найденные мною образы меня не устроили. Инструкция писалась по мере настройки собственного сервера, как основа для собственного образа.
Благодарю за внимание. GL & HF!
P.S. Пожалуйста, грамматические и стилистические ошибки — присылайте в личку, обязательно исправлю. Ошибки и/или best practice по стилю написания статьи, использованию команд linux — пожалуйста, оставляйте в комментариях.
ссылка на оригинал статьи https://habrahabr.ru/post/318146/
Добавить комментарий