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

/www/pages/modesco/ubuntovod

После долгих часов игры в BattleField 2, протяженных поездок на танках и джипах, сумасшедших падений на вертолетах и пары сотни метров собранной статистики по всему этому веселью, пришла пора задуматься о террористической обстановке на игровом фронте. Как же там заложники поживают? А не засыпало ли пылью старый, добрый de_dust2?

Сегодня я расскажу вам как установить и настроить игровой сервер Counter-Strike 1.6 и прикрутить к нему локальную статистику игроков. Данная статья является второй из серии "Войны в свободное время".

Сервер:

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

В прошлой статье я описывал где храню файлы для серверов, но все равно повторюсь.

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

sudo mkdir /server
cd /server
sudo mkdir cs

Вот в папке cs и будут развиваться наши приключения.

Установка сервера 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

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

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

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

Все готово! приступаем к установке сервера Counter-Strike 1.6!

Установка и настройка Counter-Strike 1.6 сервера

И так, для начала нам необходимо скачать HldsUpdateTool с сайта steampowered.com (скачивать можно в любую темповую директорию):

sudo wget http://www.steampowered.com/download/hldsupdatetool.bin

Далее устанавливаем права и запускаем hldsupdatetool.bin (на данном этапе мы установим Steam):

sudo chmod +x hldsupdatetool.bin
sudo ./hldsupdatetool.bin

Через несколько минут (или секунд, зависит от вашего интернет подключения) можно приступать к установке серверной части Counter-Strike 1.6. У нас в папке появился новый файл Steam, с ним то мы и будем работать.

Скачиваем серверную часть:

./steam -command update -game valve -dir /server/cs

Параметр dir определяет куда будет установлен сервер. Далее докачиваем файлы для Counter-Strike сервера:

./steam -command update -game cstrike -dir /server/cs

Вот и все, в принципе (согласно теории сферического коня в вакууме) сервер уже готов. Можно запустить и побаловаться. Но нам это не подходит. Впереди еще установка модов и самой статистики.

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

Установка metamod, amxmodx, dproto

Для корректной работы статисти (да и вообще) нам необходимы моды metamod, amxmodx, dproto. С начала я скачал архивы с модами, распаковал и залил на сервер через FTP.

Ссылки на скачивание:

Так, надеюсь все скачали... Я 2 дня потратил на поиск совместимых версий. Проблема была в том что при поиске выводились результаты с ссылками на посты годов 2007-2009... Взял лопату, ковырял sourceforge.net. Ну вообщем вам все готовое уже.

Переходим к установке

Создаем в папке cstrike под-директории /addons/metamod/dlls:

cd /server/cs/cstrike
sudo mkdir addons
cd addons
sudo mkdir metamod
cd metamod
sudo mkdir dlls

Копируем фаил metamod_i386.so в /server/cs/cstrike/addons/metamod/dlls. Создаем фаил plugins.ini в папке /server/cs/cstrike/addons/metamod:

sudo nano /server/cs/cstrike/addons/metamod/plugins.ini

Редактируем фаил /server/cs/cstrike/liblist.gam:

sudo nano /server/cs/cstrike/liblist.gam
=======================================================
 
gamedll_linux "addons/metamod/dlls/metamod_i386.so" //Заменяем то что было.

Установка MetaMod завершена. Продолжаем, на подходе AmxModX.

Копируем папку AmxModX (необходимо объединить 2 архива скачанных ранее) в /server/cs/cstrike/addons.

Редактируем /server/cs/cstrike/addons/metamod/plugins.ini:

sudo nano /server/cs/cstrike/addons/metamod/plugins.ini
========================================================
linux addons/amxmodx/dlls/amxmodx_mm_i386.so //Добавляем данную запись

Так-с, закончили. Более подробно о том как настроить Amx можно почитать тут: counter-strike.cn.ua.

Установка dproto. Данный аддон необходим нам для того, чтобы игроки которые используют не лицензионную версию Counter-Strike могли без беспрепятственно играть на нашем сервере.

Создаем папку dproto в /server/cs/cstrike/addons:

cd /server/cs/cstrike/addons/
sudo mkdir dproto

Копируем файл dproto_i386.so из архива который качали ранее в папку /server/cs/cstrike/addons/dproto. Файл конфигурации dproto.cfg копируем в /server/cs/cstrike. Редактируем /server/cs/cstrike/addons/metamod/plugins.ini:

sudo nano /server/cs/cstrike/addons/metamod/plugins.ini
========================================================
linux addons/amxmodx/dlls/amxmodx_mm_i386.so
linux addons/dproto/dproto_i386.so //Добавляем данную запись

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

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

./hlds_run -binary ./hlds_i686 -nomaster -game cstrike -port 27015 +ip ВАШ.IP.АДРЕС -insecure

Запустился? Если да то проверяем командой meta list список запущенных аддонов:

meta list
Currently loaded plugins:
                      description      stat pend  file              vers      src   load  unlod
                 [ 1] dproto           RUN   -    dproto_i386.so    v0.4.8    ini   Start Never
                 [ 2] AMX Mod X        RUN   -    amxmodx_mm_i386.  v1.8.1.3  ini   Start ANY
                2 plugins, 2 running

Если получили что-то на подобии этого (значение STAT должно стоять RUN для наших установленных аддонов), то все нормально. Если вообще ничего не отобразилось, то проблема кроется в самом начале, проверяйте установку Metamod.

После завершения установки модов, переходим к установке статистики.

Установка Статистики Counter-Strike 1.6 (PsychoStats)

Вот тут у нас первые проблемы. Нормальной статистики на Counter-Strike 1.6, а главное современной, найти не удалось. Зато есть ранее популярный проект PsychoStats, с последней версией 3.2 (на сколько я понял). Сайт проекта давно уже ушел в небытие... Пришлось искать файл psychostats_nightly.tar.gz размером более 5.3 метра. Гугл помог и у меня оказался в руках архив с perl скриптом и папкой upload, содержащей файлы для заливки на Web сервер. то что надо.

Перл, перл... Узнал, что для работы статистики необходим перл и еще пара модулей. Не надо мучится искать как найти через apt недостающие модули и так далее. Устанавливаем все так:

sudo apt-get install perl libconfig-inifiles-perl libdbd-mysql-perlsudo

Готово.

Заранее создадим базу данных для нашей статистики. Я это делал через NaviCat.

Зальем файлы из папки upload на наш Web-сервер. и приступим к установке. Запускаем браузер и переходим по такого рода ссылке - httр://вашсайт/install/index.php.

Установка не должна вызвать у вас сложностей, так как там все описано достаточно хорошо. Единственное перед концом почти необходимо выбрать тип игры (Half-Life => Counter-Strike) и указать папку с log файлами (У меня это /server/cs/cstrike/logs).

В 99% случаев у вас появится гора ошибок в шапке сайта. Deprecated... о том как от них избавится я расскажу позже.

Копируем скрипт stats.pl и все что там еще было с ним в папку /server/cs/cstrike. И переходим к завершающей стадии... Редактирование конфигов.

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

Первым у нас будет stats.cfg:

sudo nano /server/cs/cstrike/stats.cfg
======================================================
dbtype = mysql // Тип базы данных
dbhost = localhost // Хост базы
dbport = 3306 // Порт базы
dbname = psychostats3_1 // Название базы
dbuser = ps3 // Пользователь БД
dbpass = // Пароль к БД
dbtblprefix = ps_ //Если будете использовать одну базу для нескольких серверов.. меняйте префикс таблицы

Теперь server.cfg... Настраивать можно как вам угодно. Но, есть одно НО. Для работы статистики должны быть такие строки:

sudo nano /server/cs/cstrike/server.cfg
==========================================
log on
sv_logbans 1
sv_logecho 1
sv_logfile 1
sv_log_onefile 0
mp_logdetail 3
mp_logmessages 1

На очереди AmxModX. Необходимо проверить включены ли модули сбора статистики:

sudo nano /server/cs/cstrike/addon/amxmodx/configs/plugins.ini
==========================================================
//Проверяем нет ли ; напротив данных модулей:
admin.amxx
statscfg.amxx
statsx.amxx
stats_logging.amxx

На этом все.

Сбор статистики ведет скрипт stats.pl Чтобы его каждый раз не запускать я добавил его в cron. Запускаться он будет раз в 10 минут.

sudo crontab -e
===================================================
*/10 * * * * /server/cs/cstrike/stats.pl

Вздохнули... проверяем сервер.

./hlds_run -binary ./hlds_i686 -nomaster -game cstrike -port 27015 +ip ВАШ.IP.АДРЕС -insecure

Запустился - выдохнули. Теперь статистика будет отображаться на вашем сайте.

Неполадки и их решения, примочки

Первое что попалось на глаза, это огромное количество ошибок выпадающих на сайте. Половина лечится изменением php.ini на вашем сервере. Редактируем его, находим почти в конце переменную mbstring.func_overload и выставляем ей числовое значение 7. Так же не забудьте снять ; в начале переменной.

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

Some fignya =& new Some;
//Должно получится
Some fignya = new Some;

Обращайте внимание на версии аддонов которые устанавливаете. В данной статье я привел ссылки на совместимые версии, но в интернете сложно найти что-то подходящее.

На этом все. По идее, на данный момент, вы обладатель рабочего сервера Counter-Strike с статистикой игроков и прочим.

Внимание: На x64 debian-based системах необходимо установить lib32gcc1 и всё, что пакет потянет. Иначе можно получить в самом начале ошибку "hldsupdatetool.bin no such file or directory".

Ищите полиглот? Он ждёт вас на сайте poliglott.narod.ru.

AndrewMzuik
2012-11-21 09:53:00
"Заранее создадим базу данных для нашей статистики. Я это делал через NaviCat." - А можно чутка поподробнее?
AndrewMzuik
2012-11-22 04:51:00
Про NaviCat можете не рассказывать... "Запускаем браузер и переходим по такого рода ссылке - httр://вашсайт/install/index.php." - всё устанавливает и без предварительной настройки через NaviCat. Проблема возникла с "Неполадки и их решения". Амперсант "&" поудалял. Осталось 3 ошибки в которых не встречаются &. Одну удалось решить. точно файл и номер(содержание) не помню, но конструкция была следующая "$(Переменная) = (значение)" заменил на "$(Переменная) .= (значение)". (Подглядел решение строчкой ниже). Оставшиеся: 1 Ошибка: Strict Standards: Non-static method PsychoStats::create() should not be called statically in /server/cs/site/includes/common.php on line 102 102 строчка: )); Весь блок выглядит так: // start PS object; all $dbxxxx variables are loaded from config.php #$ps = new PS(array( $ps = PsychoStats::create(array( 'fatal' => 0, 'dbtype' => $dbtype, 'dbhost' => $dbhost, 'dbport' => $dbport, 'dbname' => $dbname, 'dbuser' => $dbuser, 'dbpass' => $dbpass, 'dbtblprefix' => $dbtblprefix )); 2 Ошибка: Strict Standards: Non-static method PsychoDB::create() should not be called statically in /server/cs/site/includes/class_PS.php on line 65 65 строка: $db = PsychoDB::create($dbconf); Весь блок выглядит так: // Factory function to create the object. This is not a class method. function & create($dbconf = array(), $gametype = null, $modtype = null) { $db = null; if (isset($dbconf['dbhandle'])) { $db = $dbconf['dbhandle']; } else { require_once(dirname(__FILE__) . "/class_DB.php"); $db = PsychoDB::create($dbconf); } Это Касательно Психостата. Касательно сервера. Сервер поднимается. Все аддоны работают.Ошибок при запуске не наблюдается. Попытка подключиться клиентом заканчивается таким выхлопом на сервере: Uploading dump (in-process) [proxy ''] /tmp/dumps/crash_20121122104237_1.dmp success = yes response: CrashID=bp-00858534-dbf2-4313-97b2-2b2812121121 Segmentation fault (core dumped) И сервер зависает... :( И при следуещем запуске проскакивает: Auto-restarting the server on crash Подскажите пожалуйста, может есть решение этих проблем?
AndrewMuzik
2012-11-22 06:51:00
Uploading dump (in-process) [proxy ''] /tmp/dumps/crash_20121122104237_1.dmp success = yes response: CrashID=bp-00858534-dbf2-4313-97b2-2b2812121121 Segmentation fault (core dumped) И сервер зависает... :( Решается до банальщины просто. К строке запуска добавить +map "название карты"
AndrewMuzik
2012-11-23 04:55:00
Решение ошибок на httр://вашсайт/index.php типа: Strict Standards: Non-static method PsychoStats::create() should not be called statically in /server/cs/site/includes/common.php on line 102 А так же "Warning" и т.п. http://c-s.net.ua/forum/topic35514.html
AndrewMuzik
2012-11-23 05:13:00
Забыл сказать, что у меня: # php5 --version PHP 5.4.6-1ubuntu1 (cli) (built: Aug 22 2012 21:13:52) И http://c-s.net.ua/forum/topic35514.html всё равно подходит.
ceroz
2013-08-09 01:48:00
ввожу команду ./steam -command update -game cstrike -dir /server/cs ничего не скачивается просто появляется вот этот список root@server:/tmp# ./steam -command update -game cstrike -dir /server/cs Checking bootstrapper version ... removing stale semaphore last operated on by process 1771 with name 0eBlobRegistryMutex_07692C9F0DCCAB9B49E0AA2095A1952C removing stale semaphore last operated on by process 1771 with name 0eBlobRegistrySignal_07692C9F0DCCAB9B49E0AA2095A1952C Updating Installation Determining which depot(s) to install/update... ** 'game' options for Source DS Install: "ageofchivalry" "alienswarm" "diprip" "dystopia" "episode1" "esmod" "garrysmod" "garrysmodbeta" "insurgency" "l4d_full" "left4dead" "left4dead2" "left4dead2_demo" "orangebox" "pvkii" "smashball" "synergy" "zps" ** 'game' options for HL1 DS Install: "dmc" "gearbox" "ricochet" "tfc" "valve" ** 'game' options for Third-Party game servers: "ageofchivalry" "aliensvspredator" "americasarmy3" "brink" "darkesthour" "darkmessiah" "defencealliance2" "dinodday" "diprip" "dystopia" "esmod" "garrysmod" "garrysmodbeta" "hauntedhellsreach" "homefront" "homefrontjpn" "insurgency" "killingfloor" "killingfloor_beta" "marenostrum" "modernwarfare3" "mondaynightcombat" "naturalselection2" "nexuiz" "pvkii" "redorchestra" "redorchestra2" "redorchestra_beta" "serioussam3" "serioussam3-deprecated" "serioussamhdse" "ship" "sin" "smashball" "sniperelitev2" "synergy" "tshb" "zps" HLDS installation up to date root@server:/tmp# пробую запустить сервер пишет root@server:/server/cs# ./hlds_run -game cstrike -nomaster +ip 10.0.0.1 +maxplayers 5 +port 27015 +map de_dust Invalid game type 'cstrike' sepecified. Чтв Авг 8 22:47:51 EEST 2013: Server Failed
Алик
2013-10-22 21:14:00
такаяже проблема