Установка сервера PvPGN на NetBSD


Автор: Сгибнев Михаил

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

Данная статья имеет целью ознакомить читателя с методикой развертывания сервера PvPGN, обеспечивающего реализацию возможностей BattleNet. В качестве операционной системы используется NetBSD 2.0.2
Установка сервера Apache
В данной статье я не преследую цели выполнить оптимальную настройку Apache, MySQL или PHP, но устанавливать эти продукты из системы портов было бы слишком просто. Поэтому, все будем компилировать из исходных текстов.

Итак, первым у нас на очереди вэб-сервер Apache, который займется у нас отображением статистики игры. Текущей, на момент написания статьи, была версия 2.0.54:

tar xvzf httpd-2.0.54.tar.gz
cd httpd-2.0.54
./configure --prefix=/opt2/apache2 --enable-so --enable-ssl --enable-cgi
make
make install

Установка сервера MySQL
Тут нам будет немного труднее. Необходимо создать группу и пользователся, с правами которого будет выполняться сервер.

groupadd mysql
useradd -g mysql mysql

Распаковываем архив, компилируем и устанавливаем сервер:

tar xvzf mysql-4.1.14.tar.gz
cd mysql-4.1.14
./configure --prefix=/opt2/mysql
make
make install
cp support-files/my-medium.cnf /etc/my.cnf

Первый запуск:

/opt2/mysql/bin/mysql_install_db --user=mysql
chown -R root .
chown -R mysql var
chgrp -R mysql .
bin/mysqld_safe --user=mysql &
/opt2/mysql/bin/mysqladmin -u root password new-password

Необходимо убедиться в том, что сервер баз данных запустился и готов принимать запросы:

root@netbsd:netstat -an
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
...
tcp 0 0 *.3306 *.* LISTEN
...

или

root@netbsd:ps -aux | grep mysql
root 20364 0.0 0.0 152 4 p0- IW 1:25PM 0:00.03 /bin/sh /opt2/mysql/bin/mysqld_safe --user=mysql
mysql 25919 0.0 0.0 42136 4028 p0- IWa 1:25PM 5:44.66 /opt2/mysql/libexec/mysqld --basedir=/opt2/mysql

Теперь необходимо создать базу данных для нашего игрового сервера:

mysql -u root -p
mysql> create database pvpgn;
mysql> grant all on pvpgn.* to pvpgn@'localhost' identified by "password";

Установка PHP
Здесь все просто:

tar xvzf php-5.0.4.tar.gz
cd php-5.0.4
./configure --with-apxs2=/opt2/apache2/bin/apxs --with-mysql=/opt2/mysql/ --prefix=/opt2/php --disable-libxml
make
make install

Установка сервера PvPGN
Вот мы и подошли к самому захватывающему.

tar xvzf pvpgn-1.7.8.tar.gz
cd pvpgn-1.7.8/src

Местоположение хедеров и библиотек MySQL можно указать через аргументы LDFLAGS и CPPFLAGS, я предпочел внести изменеия непосредственно в файл configure, где добавил соответствующие пути к переменным mysql_try_libs и mysql_try_includes. Далее нам необходимо сделать ход конем:

cp /usr/pkg/lib/mysql/libmysqlclient.so.14 /usr/lib/

иначе, мы получим ошибку при выполнении ./configure. Далее, нам понадобится GNU версия утилиты make, которую я поставил из прекомпилированных пакетов:

pkg_add gmake-3.80nb4.tgz

Заключительный этап установки:

./configure --prefix="/opt2/bnetd" --disable-d2cs --disable-d2dbs --with-mysql
gmake
gmake install

Настройка сервера PvPGN и отображение статистики игр
Для обеспечения работоспособности сервера необходим пакет pvpgn-support-1.0. Здесь все предельно ясно:

tar xvzf pvpgn-support-1.0.tar.gz
cp -r pvpgn-support-1.0/* /opt2/bnetd/var/files/

В файле конфигурации /opt2/bnetd/etc/bnetd.conf необходимо раскомментировать и исправить следующую строку:

storage_path = sql:mode=mysql;host=localhost;name=pvpgn;user=pvpgn;pass=password;default=0

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

/opt2/bnetd/sbin/bnetd

Проверяем правильность работы:

root@netbsd:netstat -an
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 *.6200 *.* LISTEN
tcp 0 0 *.6112 *.* LISTEN
tcp 0 0 *.3306 *.* LISTEN
udp 0 0 *.6112 *.*

Исследуем журнальный файл:

Sep 12 17:08:17 [info ] eventlog_startup: logging event levels: fatal,error,warn,info,debug,trace
Sep 12 17:08:17 [debug] give_up_root_privileges: about to give up root privileges
Sep 12 17:08:17 [info ] pvpgn_greeting: PvPGN BnetD Mod version 1.7.8 process 29451
Sep 12 17:08:17 [info ] storage_init: initializing storage layer (available drivers: file, sql)
Sep 12 17:08:17 [info ] sql_dbcreator: Creating missing tables and columns (if any)
Sep 12 17:08:18 [info ] sql_dbcreator: added missing table BNET to DB
Sep 12 17:08:18 [info ] sql_dbcreator: added missing column uid int NOT NULL PRIMARY KEY to table BNET
Sep 12 17:08:18 [info ] sql_dbcreator: added missing column acct_username varchar(32) to table BNET
Sep 12 17:08:18 [info ] sql_dbcreator: added missing column username varchar(32) to table BNET
Sep 12 17:08:18 [info ] sql_dbcreator: sucessfully issued: && UPDATE BNET SET username = lower(acct_username)
...
Sep 12 17:09:13 [info ] sql_dbcreator: added missing default account to table arrangedteam
Sep 12 17:09:13 [info ] sql_dbcreator: finished adding missing tables and columns
Sep 12 17:09:13 [info ] storage_init: using sql storage driver
Sep 12 17:09:13 [info ] fdw_kqueue_init: fdwatch kqueue() based layer initialized (max 1000 sockets)

Это указывает нам на то, что база данных игры была нормально создана и сервер запущен и выполняется.

В качестве финального аккорда настроим отображение статистики:

tar xvzf pvpgn-stats-2.3.20.tar.gz
mkdir /opt2/apache2/htdocs/stat
cp -r pvpgn-stats-2.3.20/* /opt2/apache2/htdocs/stat

Отредактируйте файл /opt2/apache2/htdocs/stat/config.inc.php и все, дело сделано :-) Наиболее полно все вопросы функционирования и настройки сервера PvPGN рассмотрены на сайте http://pvpgn.berlios.de/.

Обновлено: 13.03.2015