«Войны в свободное время» или BF2 сервер + статистика в офисе

в 9:30, , рубрики: linux, Ubuntu, Серверное администрирование, метки: , ,

Доброго времени суток Хабра-сообщество!
Сегодня я расскажу вам как установить и настроить игровой сервер BattleField 2 и прикрутить к нему локальную статистику игроков.
«Войны в свободное время» или BF2 сервер + статистика в офисе

Сервер:
НР ProLiant ML350 G5
Intel® Xeon® 5160
8 Gb RAM ECC
OS Ubuntu 12.04 LTS (GNU/Linux 3.2.0-23-generic x86_64)

Вот такая свободная машинка попалась на глаза. Посмотрев на конфигурацию решил что Web сервер, база данных и соответственно игровой сервер уживутся на одной машине.

Описывать установку ОС не буду, начну с необходимых пакетов.
Для работы Web сервера, базы данных и web обвязки сервера нам понадобится Apache,MySQL и PHP, так же для работы статистики, модуль для apache поддерживающий выполнение ASM скриптов.

Для своего удобства, все что касается серверной части я храню в отдельном каталоге в корне системы.

sudo mkdir /server
cd /server
sudo mkdir site
sudo mkdir bf2

Установка сервера Web,PHP,MySQL

Итак, приступим к установке:

sudo apt-get install apache2 apache2-mpm-prefork apache2-utils apache2-suexec libapache-asp-perl php5 php5-mysql libapache2-mod-php5 php-pear mysql-server mysql-client libmysqlclient15-dev

*Во время установки, сервер MySQL попросит вас ввести пароль.

Настроим виртуальные хосты:

На данный момент у нас должен получится вполне рабочий Web сервер. Проверяем путем перехода на IP адрес сервера через любой браузер с компьютера в вашей локальной сети. На экране, если все правильно работает, появится надпись «It, works!».

Изменяем фаил конфигурации виртуальных хостов:

sudo nano /etc/apache2/sites-available/default

Стираем содержимое файла и вставляем наш новый виртуальный хост:

<VirtualHost ВАШ.IP.АДРЕС:80>
        ServerAdmin somemail@some.ru
        ServerName ВАШ.IP.АДРЕС
        ServerAlias ВАШ.IP.АДРЕС
        DocumentRoot /server/site
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
</VirtualHost>

Теперь папка где лежит наш сайт будет /server/site.

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

На данном этапе у меня возникла проблема =) Т.к. найти на сайте EA серверной части батлы я не смог, пришлось рыскать по интернету в писках файла bf2-linuxded-1.5.3153.0-installer.sh.

Качаем фаил bf2-linuxded-1.5.3153.0-installer:

sudo wget найденная/вами/ссылка/bf2-linuxded-1.5.3153.0-installer.sh

После завершения закачки установка:

sudo chmod +x bf2-linuxded-1.5.3153.0-installer.sh
sudo ./bf2-linuxded-1.5.3153.0-installer.sh

После установки правим конфиг сервера:

sudo nano /server/bf2/mods/bf2/settings/serversettings.con

Примерное содержание файла конфигурации и необходимые правки в нем:

sv.serverName "" //Имя сервера
sv.password "" //Пароль к серверу
sv.internet 1 //Ставим 1, сервер то у нас ранговый.
sv.serverIP "XX.XX.XX.XX" //Адрес сервера
sv.serverPort 16567 //Порт на котором будет висеть сервер
sv.welcomeMessage "" //Текст приветствия
sv.punkBuster 1 //Включить punkBuster
sv.ticketRatio 100 //Назначить 100 тикетов стартовым значением в начале раунда
sv.roundsPerMap 3 //Раундов на карту
sv.timeLimit 1800 //Время раунда, 1800 секунд = 30 минут
sv.scoreLimit 0 //Лимит очков для игроков
sv.autoBalanceTeam 1 //Включить автобаланс
sv.useGlobalRank 1
sv.useGlobalUnlocks 1 //Использовать глобальные анлоки.
sv.friendlyFireWithMines 1 //Подрываться на своих минах

Вот в принципе и все… К запуску готовы!
Сейчас вы можете запустить сервер и начать играть на нем. Но если вам нужны ранги, и полная статистика по игрокам, читайте дальше…

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

Для ведения статистики нам помогут скрипты, которые можно скачать с сайта www.bf2statistics.com.
Нам необходимо скачать фаил BF2Statistics 1.5.1 (Единственное, нужно зарегестрироватся на сайте для получения доступа к файлам.)
Содержание архива —
Client Files
Server Files
Web Files

Начнем с самого простого.
Настройка базы данных.

mysql -u root -p
CREATE DATABASE `bf2stats` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

База готова!

Настройка python-части

Из папки Server Files копируем содержимое в папку с нашим сервером (/server/bf2) с заменой файлов соотв.

Редактируем файл /server/bf2/python/bf2/BF2StatisticsConfig.py

sudo nano /server/bf2/python/bf2/BF2StatisticsConfig.py

===========================================================
# ------------------------------------------------------------------------------
# Backend Web Server
# ------------------------------------------------------------------------------
http_backend_addr = 'ВАШ.IP.АДРЕС'
http_backend_port = 80
http_backend_asp = '/ASP/bf2statistics.php'

# ------------------------------------------------------------------------------
# Player Manager
# ------------------------------------------------------------------------------
pm_backend_pid_manager = 1
pm_local_pid_txt_file = 'python/bf2/pid.txt'	# Relative from BF2 base folder
pm_ai_player_addr = 'ВАШ.IP.АДРЕС'		# Not recommended to change

Сохраняем.

настройка ASP части

Копируем папку ASP, а так же все файлы из каталога bf2sclone из каталога Web Files в нашу директорию с сайтом (/server/site), я это делал при помощи FTP сервера и файлового менеджера mc.

Чтобы не парится с правами, на папку /server/site я установил права доступа 777:

sudo chmod 777 -R /server/site

Если вам важна безопасность, то вот список файлов с правами доступа 777 которые необходимы для сервера:
/ASP/_config.php
/ASP/_config.php.bak
/ASP/_backup
/ASP/logs
/ASP/logs/_processed

Настроим ASP часть статистики.
Редактируем /server/site/sys-games/ASP/system/config/config.php

sudo nano /server/site/sys-games/ASP/system/config/config.php

===============================================================
$db_host = 'ВАШ.IP.АДРЕС'; #Адрес хоста базы данных
$db_name = 'bf2stats'; # Имя базы данных
$db_user = 'root'; # Логин к базе
$db_pass = 'my_pass'; # Пароль к базе
$admin_user = 'admin'; # Логин к админке
$admin_pass = 'admin_password'; # пароль к админке
$admin_hosts = array('127.0.0.1','ВАШ.IP.АДРЕС/подсеть'); # IP и диапазоны IP через запятую с которых будет доступна Web-админка
$stats_lan_override = 'ВАШ.IP.АДРЕС';
$stats_local_pids = array('LocalPlayer01','ВАШ.IP.АДРЕС','LocalPlayer02','ВАШ.IP.АДРЕС');
$game_hosts = array('127.0.0.1','ВАШ.IP.АДРЕС','ВАШ.IP.АДРЕС/24'); # IP-адреса с которых разрешено принимать данные об игре и статистики. То есть фактически адреса серверов.

Далее открываем браузер, переходим по адресу http://ваш.ip.адрес/ASP. Откроется админка, заходим с учетными данными которые вы ввели при редактировании конфигурационного файла. В левом меню нажимаем Install DB.
После установки базы, вам будет предоставлен отчет о пройденном тесте БД. Если все нормально то напроив каждого пункта будет значение Passed.
Далее перейдя в левом меню «System=>Edit Configuration», вы можете более детально рассмотреть конфигурацию сервера.

Настрйока Web обвязки

Далее открываем браузер, переходим по адресу http://ваш.ip.адрес/. Откроется страница установки web обвязки сервера статистики, выполните указания установочного скрипта.
После удачной установки можете отредактировать конфигурационный фаил обвязки:

sudo nano /server/site/config.inc.php

======================================================
$DBIP = 'localhost'; //Хост базы данных статистики
$DBNAME = 'bf2stats'; //Имя базы данных статистики
$DBLOGIN = 'root'; // Имя пользователя БД
$DBPASSWORD = ''; // Пароль к БД


$TITLE = ''; //Заголовок окна статистики

На данном этапе установка статистики завершена. Как обычно, берем большой напильник и допиливаем наш «паровоз до состояния корабля»…

Работа с напильником

Чтобы наш сервер не проверял валидность ключей:
Устанавливаем пакет iptables:

sudo apt-get install iptables

Далее я добавил в конфигурацию «при подключении к сети» такие строки с блокировкой портов:

sudo nano /etc/network/if-up.d/upstart

iptables -A INPUT -m udp -p udp --sport 29910 -s 0/0 -j DROP
iptables -A INPUT -m udp -p udp --sport 139 -s 0/0 -j DROP
iptables -A INPUT -m tcp -p tcp --sport 29910 -s 0/0 -j DROP
iptables -A INPUT -m tcp -p tcp --sport 1433 -s 0/0 -j DROP
iptables -A INPUT -m tcp -p tcp --sport 1434 -s 0/0 -j DROP
iptables -A INPUT -m tcp -p tcp --sport 139 -s 0/0 -j DROP

Смена карт:
Для смены карт на сервере необходимо отредактировать фаил /server/bf2/mods/bf2/settings/maplist.con

sudo nano /server/bf2/mods/bf2/settings/maplist.con

=====================================================
 //mapList.append ИМЯ_КАРТЫ ТИП_ИГРЫ КОЛИЧЕСТВО_ИГРОКОВ
mapList.append mashtuur_city gpm_cq 16
mapList.append road_to_jalalabad gpm_cq 16
mapList.append sharqi_peninsula gpm_cq 16

Клиентская часть игры:
Политика безопасности нашего домена не разрешает использовать vbs скрипт который предлагают нам на сайте bf2statistic.com. Поэтому я пошел другим путем.

В папке %SystemRoot%/Drivers/etc я создал фаил hosts.ics в который добавил строку: ВАШ.IP.АДРЕСС bf2web.gamespy.com
Данная строка позволяет редиректить нашу игру к нам на сервер.

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

Думаю все. Можно запускать сервер:

cd /server/bf2
sudo ./start.sh

или через screen

sudo screen 
cd /server/bf2
sudo ./start.sh

Отвязываемся от screen комбинацией клавиш Ctrl+A затем нажимаем D.

На этом статья завершена, если у ваз возникли вопросы или неполадки, консультируйтесь со мной в комментариях.

Автор: btgsystem

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js