Налаштування сервера Quake Live — покрокове керівництво

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 — ласка, залишайте в коментарях.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.