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

Данная статья имеет целью ознакомить читателя с методикой развертывания сервера PvPGN, обеспечивающего реализацию возможностей BattleNet. В качестве операционной системы используется NetBSD
Установка сервера 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/.