Mangos 0.13

Источник: www.xakep.ru | Владимир Turbina Ляшко

Разделяем и властвуем с мангос

Цель проекта MaNGOS (Massive Network Game Object Server) – это создание альтернативной реализации сервера WoW. Сегодня доступны версии под Linux, FreeBSD и Windows. Лицензия не позволяет использовать мангос в коммерческих целях и устанавливать публичные серверы на его основе, но никто не запрещает настроить WoW сервер в домашней сети.

Существуют отдельные проекты по наполнению базы данных мангос и написанию скриптов для уникального поведения отдельных NPC. Код MaNGOS является открытым, и энтузиасты предлагают огромное количество патчей, устраняющих те или иные ошибки. Обилие наработок, порядок их установки и прочие тонкости могут сбить с толку любого. Поэтому статья написана в виде пошагового руководства.

Чтобы построить сервер только из свободно распространяемых компонентов, установку будем производить в Ubuntu 8.04 LTS (хотя многое из сказанного актуально и для других Linux-дистрибутивов). Первым делом инсталлируем пакеты, необходимые для получения git/SVN-архивов и сборки приложений. Так как для хранения игрового мира используется MySQL (по умолчанию) или PostgreSQL, ставим соответствующие пакеты. Кроме того, нужны заголовочные файлы OpenSSL и сервера БД.
$ sudo apt-get install libssl-dev mysql-server mysql-client libmysqlclient15-dev
$ sudo apt-get install autoconf automake1.9 libtool build-essential subversion patch zlibc libc6 git git-core zlibc
Создаем рабочий каталог:
$ mkdir source; cd source
Сейчас предстоит сделать первый выбор: ссылки проекта ведут, как минимум, на две версии сервера. На момент написания этих строк в SVN (и git) была версия 0.13, которая поддерживает новую версию клиента 3.0.3 (build 9183) и старого 2.4.3. Стабильный релиз MaNGOS 0.12 поддерживает только 2.4.3 версию клиента. Будем работать с 0.13, но в установке особой разницы нет.

Получаем исходный код:
$ svn co http://svn2.assembla.com/svn/mangos-svn-mirror
Или через git:
$ git clone git://github.com/mangos/mangos.git
Теперь нужно скачать расширение ScriptDev2 (sf.net/projects/scriptdev2). Оно обеспечивает работу скриптов, предназначенных для создания игровых объектов, персонажей и квестов:
$ mkdir mangos/src/bindings/ScriptDev2
Название каталога должно быть именно ScriptDev2, никаких scriptdev2 или Scriptdev2! Получаем копию:
$ cd mangos/src/bindings/ScriptDev2
$ svn co https://scriptdev2.svn.sourceforge.net/svnroot/scriptdev2
Патчим:
$ git apply src/bindings/ScriptDev2/patches/MaNGOS-2008-12-22-ScriptDev2.patch
Или по старинке:
$ patch -p0 < src/bindings/ScriptDev2/patches/MaNGOS-r6765-ScriptDev2.patch
При получении файлов через git есть один каверзный момент. Если в каталоге src/bindings лежит файл .gitignore:
$ cat src/bindings/.gitignore
  ScriptDev2
– то эту строку нужно закомментировать, иначе ScriptDev2 собираться не будет. Чтобы обновить все файлы для компиляции, вводим:
$ cd ~/source/mangos
$ autoreconf --install --force
$ aclocal
$ autoheader
$ autoconf
$ automake --add-missing
$ automake src/bindings/ScriptDev2/Makefile
Если попытаться сконфигурировать в текущем каталоге, получим ошибку, поэтому:
$ mkdir objdir; cd objdir
$ ./configure --enable-cli --enable-ra
Так мы подключили удаленное администрирование (--enable-ra) и командную консоль (--enable-cli). Чтобы не искать файлы по всем каталогам, можно использовать стандартные ключи '–-prefix', '--sysconfdir' и '--datadir'. Чтобы задействовать базу PostgreSQL, дополнительно укажи параметры "--with-mysql=no --with-postgresql=yes". Сборка и установка стандартны:
$ make
$ sudo make install
Чистим:
$ make clean
$ cd ..
$ rm -r objdir
Создаем базы

Для создания баз и таблиц сервера используем заготовки, находящиеся в подкаталоге sql дистрибутива:
$ mysql -u root -p < sql/create_mysql.sql
В результате будет создана база mangos, администратором которой является пользователь mangos с паролем mangos:
$ cat sql/create_mysql.sql
  …
  GRANT USAGE ON *.* TO 'mangos'@'localhost' IDENTIFIED BY 'mangos' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
В рабочей системе желательно изменить пароль и ограничить доступ к MySQL только с локального узла (в Ubuntu и других дистрибутивах так сделано по умолчанию). Заполняем таблицы, создаем дополнительные базы:
$ mysql -u mangos -p mangos < sql/mangos.sql
$ mysql -u mangos -p realmd < sql/realmd.sql
$ mysql -u mangos -p characters < sql/characters.sql
И подтягиваем базу ScriptDev2:
$ mysql -u mangos -p scriptdev2 < src/bindings/ScriptDev2/sql/scriptdev2_structure.sql
На этом сервер к работе, в принципе, готов. Но подключаться к нему еще ой как рано. 


Где же мои орки?

Базы и таблицы созданы, но их еще нужно наполнить содержимым, то есть создать будущие поля сражений и заселить их монстрами. Здесь начинается самое интересное. Проектов, реализующих нужную нам функциональность, великое множество. Это UDB (UnifiedDb, www.udbforums.org), который можно назвать официальным, YTDB (ytdb.kanet.ru), Silvermoon (projectsilvermoon.net), Silver DataBase (SDB, opensvn.csie.org/SDB, sf.net/projects/sdbmangos), немецкий MaNGOS-DBs (sf.net/projects/gm-db), EDB и другие. Какой из них выбрать - единодушного мнения на этот счет нет и не будет. Посетить проекты рекомендую в любом случае, там найдешь полный список файлов, патчей, а также полуготовые сборки (100% работоспособности никто гарантировать не может, но все же это лучше, чем ничего). Мне показались интересными первые два проекта. Более стабильным можно считать UDB (на нем и остановим свой выбор), а YTDB – более прогрессивным. Наверняка найдутся несогласные и будут по-своему правы. Получаем SVN копию UDB:
$ svn co https://unifieddb.svn.sourceforge.net/svnroot
$ cd unifieddb
Нужный нам файл сжат архиватором RAR. В поставке Ubuntu его нет, поэтому:
$ sudo apt-get install unrar
Распаковываем архив и заполняем базу:
$ unrar e trunk/Full_DB/UDB_0.10.4_Core_6766_SD2_689.rar
$ mysql -u mangos -p mangos < UDB_0.10.4_Core_6766_SD2_689.sql
Теперь обновляем базу до ревизии сервера. На момент написания этих строк в подкаталоге Updates было 7 файлов, но, поверь, это еще не предел. В некоторых советах предлагают собрать их в один файл и поставить командой «cat trunk/Updates/0.10.4_additions/* > updates.sql». Но лучше так не делать и накатывать каждое отдельно, так как в апдейтах меняется структура БД, и «одновременная» установка может вызвать ошибку. К тому же, в updates может находиться обновление не только для базы mangos, но и для realmd, realmlist, characters. К какой из них относится конкретный файл, – подскажет имя. Так, файл обновления 5632_characters.sql соответствует 5632 версии базы characters. Поэтому методично ставим обновления, ориентируясь на дату, которая может использоваться в наименовании файла, или релиз. Текущий релиз сервера узнать просто:
$ svn info ~/mangos/ | grep 'Revision:'
  Revision: 205
При запуске сервера выдается чуть больше информации: «MaNGOS/0.13.0 (2008-12-30 02:00:26 Revision 6985 - 205)». В нашем случае используется база версии 6766 (определяем по имени UDB_0.10.4_Core_6766_SD2_689.sql). То есть, нужны все апдейты позднее 30.12.2008 и версии 205/6985. Старшие обновления ставим первыми. Если при установке появилась ошибка, ничего страшного, пропускаем этот файл. Апгрейдим и таблицы для работы ScriptDev2. Здесь все просто:
$ mysql -u mangos -p mangos < src/bindings/ScriptDev2/sql/mangos_full_scripts.sql
$ unrar e tags/EAI/EAI_0.0.4_323.rar
$ mysql -u mangos -p scriptdev2 < EAI_0.0.4_323.sql
И, наконец, последний шаг: заносим в realmlist настройки нашего сервера (название и IP-адрес):
$ mysql -umangos -pmangos
  mysql> use realmd;
  Database changed
  mysql> UPDATE `realmlist` SET `name` = 'My superpuper WoW server' , `address` = '192.168.1.158' WHERE `id` = '1';
  Query OK, 1 row affected (0.01 sec)
Да, еще один необязательный, но весьма желательный с точки зрения безопасности шаг. Запрос:
mysql> SELECT * FROM `account` WHERE 1 LIMIT 1000;
– покажет наличие четырех учетных записей в таблице account базы realmd. Их лучше удалить и записать свою (например, admin/password):
mysql> DELETE FROM account;
  mysql> INSERT INTO `account` (`username`,`sha_pass_hash`,`gmlevel`) VALUES ('admin',SHA1(CONCAT(UPPER(`admin`),':',UP PER(`password`))),'3');
  mysql> quit;
Как вариант, для редактирования таблиц можно воспользоваться одним из интерфейсов к MySQL, вроде phpMyAdmin. 

Правим конфиги

После установки у нас должно появиться три конфигурационных файла: mangosd.conf, realmd.conf и scriptdev2.conf. Все они находятся в /usr/local/etc (если не использовалась директива '--sysconfdir'). В scriptdev2.conf настраивается только уровень журналирования, поэтому интерес для нас представляют первые два файла.
$ sudo nano /usr/local/etc/realmd.conf

# Доступ к MySQL "hostname;port;username;password;database"
  # можно настроить подключение через сокет, такой режим работы считается экспериментальным
  LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd"
  # Каталог и файл для журнала, а также PID-файл
  LogFile = "Realmd.log"
  LogsDir = "/var/log"
  PidFile = "/var/run/realmd.pid"
  # Порт и адрес, на котором будут приниматься соединения
  RealmServerPort = 3724
  BindIP = "0.0.0.0"
Настройки в mangosd.conf практически аналогичны:
$ sudo nano /usr/local/etc/mangosd.conf

 LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd"
  WorldDatabaseInfo = "127.0.0.1;3306;mangos;mangos;mangos"
  CharacterDatabaseInfo = "127.0.0.1;3306;mangos;mangos;characters"
  MaxPingTime = 30
  WorldServerPort = 8085
  BindIP = "0.0.0.0"
В каталоге mangos/contrib/extractor находится программа AD, применяемая для извлечения карт (две версии для Linux и Windows). Рекомендуется использовать виндовый вариант (AD.exe), – работает лучше. С одного из проектов поддержки (например, mangos.ru) скачиваем архив с dbc-файлами и распаковываем их в /usr/local/share/mangos/dbc:
$ cd /usr/local/share/mangos
$ mkdir dbc; cd dbc
$ sudo unrar e ~/dbc.rar
Копируем файлы с диска WOW в каталог с программой AD.exe, затем создаем подкаталог maps и запускаем распаковщик. По окончании процесса переносим заполненный каталог maps в /usr/local/share/mangos. Аналогично извлекаем vmaps, копируем в корень архива WoW каталог vmap_extract_assembler_bin (из дистрибутива MaNGOS) и запускаем находящийся внутри батник makevmaps_SIMPLE.bat. В итоге получим подкаталог vmaps, который копируем на сервер в ту же папку, где и maps. Все готово к первому запуску мангоса:
$ sudo /usr/local/bin/mangos-realmd
$ sudo /usr/local/bin/mangos-worldd
В процессе запуска на консоль будут выведены диагностические сообщения, просмотри их на наличие ошибок. В будущем, для автоматизации запуска, можно написать скрипт (на указанных выше ресурсах есть готовые примеры). Да, и команды на боевом сервере нужно выполнять с повышенным приоритетом, добавив в начале "nice -n -20". Для управления сервером, аккаунтами, базами и прочими компонентами есть довольно большое количество проектов – поиск на Sourceforge выдаст не один десяток ссылок. Например, терминал MaNGOS DB Terminal (sf.net/projects/mdbt), веб-интерфейсы MWFv3 (mangos-wf-v3.sf.net). Очень популярен редактор квестов, мобов, объектов, предметов и прочего – Quice (quice.indomit.ru). Сейчас активно развивается проект WotLK (MaNGOS Beta Server, sf.net/projects/wotlkmangosbeta), благодаря нему установка сервера MaNGOS может заметно упроститься.

Комментариев нет:

Отправить комментарий