Battlefield 2 Dedicaded Ranked Server v1.50 + bf2statistics на FreeBSD

Исходные данные. Предполагается, что Вы уже имеете базовые навыки работы в ОС FreeBSD 7.2 i386, т.к. файловые операции и им подобные не расписаны. В локальной сети имеется сервер с IP XX.XX.XX.XX, из Internet`а доступен через NAT. На нем крутятся несколько игровых серверов. Необходимо установить Battlefield 2 Dedicaded Ranked Server v1.50. В дальнейшем рассказе будем использовать IP XX.XX.XX.XX, как принадлежащий нашей машине. Вы замените его на свой во всех конфигах и все. Также нам понадобятся файлы: bf2-linuxded-1.5.3153.0-installer.tgz — архив с сервером, bf2_linuxded150x32crk — исполняемый файл для игры. Прямые ссылки не указаны, т.к. автор их не помнит, Google найдет вам их.

Включаем режим совместимости с Linux.

Добавляем в /etc/rc.conf

linux_enable=»YES»

Добавляем или заменяем строку в /etc/sysctl.conf

compat.linux.osrelease=2.6.16

Выполняем команды:

/etc/rc.d/sysctl start

Устанавливаем эмулятор Linux из портов:

cd /usr/ports/emulators/linux_base-fc6 && make install clean

Если у вас уже стоит эмулятор Linux, то выполняем

kldload linux

Скорее всего подойдут и более старшие версии linux_base. Если же у вас уже установлен эмулятор более младшей версии, то прежде всего следует деинсталлировать его и только потом производить установку linux_base-fc6.

Устанавливаем и настраиваем сервер Battlefield 2 Dedicaded Server

Создаем в системе нового пользователя bf2 с помощью команды

adduser

Логинимся под юзером bf2
Скачиваем сервер bf2-linuxded-1.5.3153.0-installer.tgz (смотри первый абзац статьи).

Распаковываем архив с сервером

tar -xzf bf2-linuxded-1.5.3153.0-installer.tgz

Тем самым получим разархивированный шелл файл bf2-linuxded-1.5.3153.0-installer.sh. Запускаем его (Внимание: шелл скрипт надо запускать под bf2 аккаунтом, а не root-ом)

sh bf2-linuxded-1.1.2551.0-installer.sh

Вам надо будет подтвердить 2 лицензионных соглашения, а затем уже можно будет указать path для установки Battlefield 2 сервера.
Укажите /home/bf2/, тогда сервер установится в каталог /home/bf2/bf/

После установки вы можете подправить конфиг файл /home/bf2/bf2/mods/bf2/settings/serversettings.con. Приведем основные опции и их расшифровки

sv.serverName «TTI Battlefield 2 Server»
Имя сервера
sv.password «»
Пароль к серверу, лучше оставить пустым
sv.internet 1
Важный параметр, определяет, будет ли сервер ранговым, будет ли включен pb, будет ли сервер регистрироваться в списках Internet-серверов
sv.serverIP «XX.XX.XX.XX»
IP-адрес на котором будет висеть сервер
sv.serverPort 16567
Порт на котором будет висеть сервер
sv.welcomeMessage «Welcome to TTI Battlefield 2 Server!»
Текст приветствия
sv.punkBuster 1
Включить punkBuster
sv.ticketRatio 100
Назначить 100 тикетов стартовым значением в начале раунда
sv.roundsPerMap 3
Раундов на карту
sv.timeLimit 1800
Время раунда, 1800 секунд = 30 минут
sv.scoreLimit 0
Лимит очков для игроков
sv.interfaceIP «»
Оставили этот параметр пустым, возможно, если у вас много интерфейсов на машине, то здесь придется что-то приписать
sv.adminScript «default»
Имя скрипта с администраторскими настройками
sv.autoBalanceTeam 1
Включить автобаланс
sv.useGlobalRank 0
sv.useGlobalUnlocks 1
Использовать глобальные анлоки, сам не разобрался, пока 1
sv.sponsorText «Sponsor Text»
Текст, который будет периодически показывается игрокам
sv.sponsorLogoURL «http://XX.XX.XX.XX/sp_logo.png»
URL логотипа спонсора
sv.communityLogoURL «http://XX.XX.XX.XX/images/logo/logo_tr.png»
URL логотипа сервера
sv.friendlyFireWithMines 1
Подрываться на своих минах

Остальные параметры можно понять и настроить исходя из их названия.

Скачиваем крякнутый исполняемый файл bf2_linuxded150x32crk для того чтобы играть без лицензионной версии игры. Кладем его в папку bin\ia-32\ в каталоге с сервером.

Редактируем файл start.sh ищем в нем

exec $BINARY_DIR/bf2 «[email protected]»

заменяем на

#exec $BINARY_DIR/bf2 «[email protected]»
exec $BINARY_DIR/bf2_linuxded150x32crk «[email protected]»

Не забудьте сделать файл bf2_linuxded150x32crk выполняемым и указать его владельцем юзера bf2.

Вроде с сервером все, теперь надо разобраться со статистикой.

Прикручиваем статистику

Все действия выполняем от root. Если Вы умеете устанавливать Apache+php+MySQL, то сразу переходим к пункту 3.5. Настройка Apache

Установка MySQL

cd /usr/ports/databases/mysql51-server/
make install clean

Добавляем в конец /etc/rc.conf

mysql_enable=»YES»

Запуск и настройка MySQL.

Стартуем и устанавливаем пароль рута:

/usr/local/etc/rc.d/mysql-server start
/usr/local/bin/mysqladmin -u root password ‘new-password’
new-password — это пароль от root юзера мускула.

Запускаем утилиту mysql

mysql -u root -p

Создаём базу под bf2statistics, назовём ее bf2stats.

CREATE DATABASE `bf2stats` DEFAULT CHARACTER SET utf8 COLLATE utf8_bin;

Создаём пользователя и наделяем правами.

GRANT ALL PRIVILEGES ON * . * TO ‘bf2’@’XX.XX.XX.XX’ IDENTIFIED BY ‘my_pass’ WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;

Обновляем привилегии.

FLUSH PRIVILEGES;

Установка web-сервера Apache

Мы установим Apache версии 1.3, его возможностей будет с лихвой хватать для наших задач.

cd /usr/ports/www/apache13
make install clean

для автозапуска добавляем в /etc/rc.conf>

apache_enable=»YES»

Запуск осуществляем командой

apachectl start

Установка php5 с расширениями

cd /usr/ports/lang/php5
make install clean
cd /usr/ports/lang/php5-extensions/
make install clean

Запуск и настройка web-сервера Apache

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

Создаем два каталога. В /usr/local/www/bf2 будет находиться web-морда сервера, например REW. В /usr/local/www/logs будут храниться логи доступа и ошибок домена.

mkdir /usr/local/www/bf2
mkdir /usr/local/www/logs

Устанавливаем их владельца www:www

chown www:www /usr/local/www/apache22/bf2/ /usr/local/www/logs

Редактируем файл настроек Apache

ee /usr/local/etc/apache/httpd.conf

Добавляем в конец файла

NameVirtualHost *:80

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /usr/local/www/bf2
#доменное имя вашего сервера
ServerName bf2.your_domen.su
#две строки отвечающие за ведение и ротацию логов, замените bf2.your_domen.su на свое доменное имя
ErrorLog «|/usr/local/sbin/rotatelogs /usr/local/www/logs/bf2.your_domen.su.error.log.%Y-%m-%d 5M»
CustomLog «|/usr/local/sbin/rotatelogs /usr/local/www/logs/bf2.your_domen.su.-access_log.%Y-%m-%d 100M» common
<Directory «/usr/local/www/bf2»>
Options FollowSymLinks -Includes
AllowOverride All
Order allow,deny
Allow from all
AddType text/html .shtml
AddType text/html .htm
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php4s
AddHandler server-parsed .shtml
AddHandler server-parsed .htm
DirectoryIndex index.php
</Directory>
</VirtualHost>

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /usr/local/www/data
#доменное имя вашего сервера
ServerName XX.XX.XX.XX
#две строки отвечающие за ведение и ротацию логов, замените XX.XX.XX.XX на свой IP
ErrorLog «|/usr/local/sbin/rotatelogs /usr/local/www/logs/XX.XX.XX.XX.error.log.%Y-%m-%d 5M»
CustomLog «|/usr/local/sbin/rotatelogs /usr/local/www/logs/XX.XX.XX.XX.-access_log.%Y-%m-%d 100M» common
<Directory «/usr/local/www/data»>
Options FollowSymLinks -Includes
AllowOverride All
Order allow,deny
Allow from all
AddType text/html .shtml
AddType text/html .htm
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php4s
#ЭТА СТРОКА НУЖНА ДЛЯ ПРАВИЛЬНОЙ ОБРАБОТКИ СКРИПТОВ СТАТИСТИКИ
AddType application/x-httpd-php .aspx
AddHandler server-parsed .shtml
AddHandler server-parsed .htm
DirectoryIndex index.php
</Directory>
</VirtualHost>

Первый домен нужен для web-морды сервера. Второй для ведения статистики. Перезагружаем сервер Apache

apachectl restart

Настройка статистики bf2statistics

Качаем последнюю версию bf2statistics отсюда. На момент написания статьи последняя версия 1.42.

Распаковываем скаченный архив. Файлы из него нам пригодятся в двух следующих пунктах.

Настройка web-части
Папку ASP копируем в каталог /usr/local/www/data

Устанавливаем CHMOD 777 на следующие файлы и папки:

/ASP/_config.php
/ASP/_config.php.bak (for config backups)
/ASP/_backup
/ASP/logs
/ASP/logs/_processed
Редактируем /usr/local/www/data/ASP/_config.php в соответствии с листингом

<?php
/***************************************
* Battlefield 2 Private Stats Config *
****************************************
* All comments have been removed from *
* this file. Please use the Web Admin *
* to change values. *
***************************************/
$db_expected_ver = ‘1.4.2’;
$db_host = ‘XX.XX.XX.XX’;
$db_name = ‘bf2stats’;
$db_user = ‘bf2’;
$db_pass = ‘my_pass’;
$admin_user = ‘admin’;
$admin_pass = ‘admin_password’;
$admin_hosts = array(‘127.0.0.1′,’XX.XX.XX.0/32’); # IP и диапазоны IP через запятую с которых будет доступна Web-админка
$admin_log = ‘logs/_admin_event.log’;
$admin_backup_path = ‘/usr/local/www/data/ASP/_backups/’;
$admin_backup_ext = ‘.bak’;
$admin_page_size = 25;
$admin_ignore_ai = 1;
$stats_ext = ‘.txt’;
$stats_logs = ‘logs/’;
$stats_logs_store = ‘logs/_processed/’;
$stats_move_logs = 1;
$stats_min_game_time = 0;
$stats_min_player_game_time = 0;
$stats_players_min = 1;
$stats_players_max = 256;
$stats_rank_check = 0;
$stats_rank_tenure = 7;
$stats_awds_complete = 0;
$stats_lan_override = ‘XX.XX.XX.XX’;
$stats_local_pids = array(‘LocalPlayer01′,’XX.XX.XX.XX’,’LocalPlayer02′,’XX.XX.XX.XX’);
$debug_lvl = 4;
$debug_log = ‘logs/_stats_errors.log’;
$game_hosts = array(‘127.0.0.1′,’XX.XX.XX.XX’,’XX.XX.XX.40/24′); # IP-адреса с которых разрешено принимать данные об игре и статистики
$game_custom_mapid = 700;
$game_unlocks = 0;
$game_unlocks_bonus = 2;
$game_unlocks_bonus_min = 1;
$game_awds_ignore_time = 0;
$game_default_pid = 29000000;
?>

Открываем браузер и вводим http://XX.XX.XX.XX/ASP. Вводим логин и пароль тот что вы указали в конфиге. Далее жмете Install DB затем Upgrade DB. Все, ваша база данных заполнилась таблицами.

Настройка python-части
Переходим в каталог /home/bf2/bf2/python/bf2

Копируем все из распакованного ранее каталога «/python/bf2» в «/home/bf2/bf2/python/bf2» (включая поддиректории), с заменой файлов. Редактируем BF2StatisticsConfig.py

ee /home/bf2/bf2/python/bf2/BF2StatisticsConfig.py

в соответствии с листингом

# ——————————————————————————
# BF2Statistics 1.4 — Config File
# ——————————————————————————
# Conventions:
# 0 -> Disable
# 1 -> Enable
# ——————————————————————————

# ——————————————————————————
# Debug Logging
# ——————————————————————————
debug_enable = 1
debug_log_path = ‘python/bf2/logs’ # Relative from BF2 base folder
debug_fraglog_enable = 0 # Detailed ‘Fragalyzer’ Logs

# ——————————————————————————
# Backend Web Server
# ——————————————————————————
http_backend_addr = ‘XX.XX.XX.XX’
http_backend_port = 80
http_backend_asp = ‘/ASP/bf2statistics.php’

# ——————————————————————————
# Snapshot Manager
# ——————————————————————————
snapshot_prefix = ‘BF2’ # Prefix Snapshots with this tag

# ——————————————————————————
# Medals Processing
# ——————————————————————————
medals_custom_data = » # Suffix for your custom medals file(s)

# ——————————————————————————
# 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 = ‘XX.XX.XX.XX’ # Not recommended to change

# ——————————————————————————
# Clan Manager
# ——————————————————————————
enableClanManager = 0 # Use the Clan Manager to control Access to your server!
serverMode = 0
# Mode 1: Clan ONLY (Must be on Clan List to Join Server)
# Mode 2: Priority Proving Grounds (Clan Members AND those players that meet
# the minimum requirements.Clan Members get priority)
# Mode 3: Proving Grounds (Clan Members AND those players that meet the
# minimum requirements)
# Mode 4: Experts ONLY (Only players that meet the minimum requirements)
# Mode 0: Public (Free-for-All. No Restrictions!)

# Clan Manager Criteria
criteria_data = (
(‘clantag’, »), # Clan Tag (Matches First Part of Player Name, used for Whitelist)
(‘score’, 0), # Minimum Global Score
(‘rank’, 0), # Minimum Global Rank
(‘time’, 0), # Minimum Global Time Played
(‘kdratio’, 0), # Minimum Global Kill/Death Ratio
(‘country’, »), # Registered Country of Origin Code (Seperate multiple by comma ‘,’)
(‘banned’, 10), # Maximum banned count! PermBan is ALWAY BlackListed
)

# ——————————————————————————
# Backup Central Community Web Server (OPTIONAL)
# ——————————————————————————
http_central_enable = 0 # Use settings above (0, 1, 2)
http_central_addr = ‘cbd.xxx.aaa’ #Address Central STATS Server
http_central_port = 80
http_central_asp = ‘/ASP/bf2statistics.php’

# Note: this cabalility is for linking stats data to a centrally maintained STATS #
# server. This could be useful for those who are running a LAN or Tournament #
# (with local STATS), but wish to have this data credited to their normal STATS #
# DB. There are three (3) options for the central DB update: #
# 0: Disabled — ’nuff said! #
# 1: Sync — This simply copies the SNAPSHOT as-is to the central DB #
# 2: Minimal — Record everything, except Rank & Award data (typically use #
# for LANs or Tournaments where local db starts blank) #

# ——————————————————————————
# END CONFIGURATION
# ——————————————————————————

Отредактируем maplist.con. Приведен пример для четырех карт размером 16.

ee /home/bf2/bf2/mods/bf2/settings/maplist.con

 

mapList.append strike_at_karkand gpm_cq 16
mapList.append mashtuur_city gpm_cq 16
mapList.append road_to_jalalabad gpm_cq 16
mapList.append sharqi_peninsula gpm_cq 16

Добавляем в /etc/hosts строку

XX.XX.XX.XX bf2web.gamespy.com

Клиентам тоже надо прописать в файл hosts аналогичную строку. Для Windows-клиентов полный путь c:\Windows\System32\drivers\etc\hosts

Уже сейчас можно запускать сервер командой

sh /home/bf2/bf2/start.sh

Установка редиректа портов для локальных пользователей

Если ваши пользователи не имеют анлимитного или бесплатного доступа в сеть Internet для подключения к серверу Online-аккаунтов, то можно предоставить им возможность подключаться используя наш сервер. Надо осуществлять портмаппинг портов 29900 и 29901 с нашего сервера на IP 207.38.11.34. Для этого можно воспользоваться разными способами (NAT, ipnat, ipfw, pf и т.д.), но самым простым будет использование маленькой программы под названием rinetd. Установим и настроим ее

whereis rinetd
rinetd: /usr/ports/net/rinetd
cd /usr/ports/net/rinetd
make install clean

Редактируем конфигурационный файл

ee /usr/local/etc/rinetd.conf

следующим образом

XX.XX.XX.XX 29900 207.38.11.34 29900
XX.XX.XX.XX 29901 207.38.11.34 29901

Вставим в конец /etc/rc.conf

rinetd_enable=»YES»

Запускаем собственно демон

/usr/local/etc/rc.d/rinetd start

И прописываем в клиентском файле hosts следующие строки

XX.XX.XX.XX gpsp.gamespy.com
XX.XX.XX.XX gpcm.gamespy.com
XX.XX.XX.XX battlefield2d.ms10.gamespy.com
XX.XX.XX.XX battlefield2d.available.gamespy.com
XX.XX.XX.XX bf2web.gamespy.com

Теперь клиенты без использования интернета смогут подключиться к online-аккаунту.

Можно пробовать коннектиться к серверу и играть!

Видео записи настроек сервера баттлфилд2, смотреть онлайн.

Отдельно хочется упомянуть форум Боевого народа. Не задавая ни одного вопроса там можно найти ответы на все вопросы, а также web-морды и user/server-bar`ы для серверов.