• Страница 1 из 1
  • 1
Модератор форума: staford11  
[Гайд] Компиляция MaNGOS под Linux на примере Gentoo
Borodatych
Скаут
День добрый.
Благодаря вашему ресурсы нашел ответы на многие вопросы.
Хочу поделиться своим хауту, если оно будет кому то полезным.

Pre-Install

Code
emerge -avt dev-libs/ace dev-cpp/tbb


Получаем исходники
Code
mkdir /storage/mangos
git clone git://github.com/mangos/mangos.git /storage/mangos
mkdir -p /storage/mangos/src/bindings/ScriptDev2
git clone git://github.com/scriptdev2/scriptdev2.git /storage/mangos/src/bindings/ScriptDev2


Накладываем патч ScriptDev2 на сорцы MaNGOS
Code
cd /storage/mangos/
git apply /storage/mangos/src/bindings/ScriptDev2/patches/MaNGOS-*-ScriptDev2.patch


Конфигурация и компиляция
Code
mkdir build
cd build
cmake ../ -DPREFIX=/opt/mangos -DPCH=1 -DACE_USE_EXTERNAL=1 -DDEBUG=0 -DTBB_USE_EXTERNAL=0


Запускаем компиляцию и установку
Code
make && make install


Настраиваем MySQL:
Code
nano /etc/mysql/my.cnf
[mysqld]
key_buffer = 100M
max_allowed_packet = 100M
thread_stack = 50M
thread_cache_size = 8
query_cache_limit = 50M
query_cache_size = 512M
/etc/init.d/mysql restart


Что бы начать работать с базой я бы порекомендовал изменить дефолтный пароль к базе Mangos:
Code
nano /storage/mangos/sql/create_mysql.sql

Находим строчку:
Code
CREATE USER 'mangos'@'localhost' IDENTIFIED BY 'mangos';

Меняем на свое:
Code
CREATE USER 'ИМЯ'@'localhost' IDENTIFIED BY 'ПАРОЛЬ';


Создаем базы:
Code
mysql -p'пароль' < /storage/mangos/sql/create_mysql.sql
mysql -p'пароль' < /storage/mangos/src/bindings/ScriptDev2/sql/scriptdev2_create_database.sql
mysql -p'пароль' scriptdev2 < /storage/mangos/src/bindings/ScriptDev2/sql/scriptdev2_create_structure_mysql.sql


Заполняем базу:
Code
mysql -p'пароль' mangos < /storage/mangos/sql/mangos.sql
mysql -p'пароль' characters < /storage/mangos/sql/characters.sql
mysql -p'пароль' realmd < /storage/mangos/sql/realmd.sql
mysql -p'пароль' scriptdev2 < /storage/mangos/src/bindings/ScriptDev2/sql/scriptdev2_script_full.sql


Заселяем мир существами:
Code
cd /opt/mangos
emerge -avt p7zip
wget https://github.com/KiriX/YTDB/blob/master/FullDB/YTDB_0.14.4_R610_MaNGOS_R11835_SD2_R2319_ACID_R309_RuDB_R43.7z
p7zip -d ./YTDB_0.14.4_R610_MaNGOS_R11835_SD2_R2319_ACID_R309_RuDB_R43.7z
mysql -p'пароль' mangos < ./YTDB_0.14.4_R610_MaNGOS_R11835_SD2_R2319_ACID_R309_RuDB_R43.sql


Изменяем структуру базы под текущую ревизию Mangos:
Code
cd /storage/mangos/sql/updates/
for sqlstatement in `ls *mangos*.sql`; do mysql -p'пароль' -D mangos < $sqlstatement; done; for sqlstatement in `ls *characters*.sql`; do mysql -p'пароль' -D characters < $sqlstatement; done; for sqlstatement in `ls *realmd*.sql`; do mysql -p'пароль' -D realmd < $sqlstatement; done;


Изменим настройки сервера:
Code
mysql -u ИМЯ -p'ПАРОЛЬ'
USE realmd;
UPDATE `realmlist` SET `name` = 'ИМЯ_СЕРВЕРА' , `address` = 'IP_АДРЕС' WHERE `id` = '1';
exit;


Необходимо поставить версию реалма:
Code
mysql -u ИМЯ -p'ПАРОЛЬ'
UPDATE `realmd`.`account` SET `expansion`='2'
exit;

Quote
0 = "Обычный"
1 = "Огненный крестовый поход"
2 = "Гнев короля личей"


Это влияет на то доступны ли дренеи и кровавые эльфы, доступен ли рыцарь смерти.

Приступаем к настройки сервера:
Code
cp /opt/mangos/etc/mangosd.conf.dist /opt/mangos/etc/mangosd.conf
cp /opt/mangos/etc/realmd.conf.dist /opt/mangos/etc/realmd.conf
mkdir -p /opt/mangos/logs/

Code
nano /opt/mangos/etc/mangosd.conf
DataDir = "/opt/mangos/"
LogsDir = "/opt/mangos/logs/"
LoginDatabaseInfo     = "localhost;3306;ИМЯ;ПАРОЛЬ;realmd"
WorldDatabaseInfo     = "localhost;3306;ИМЯ;ПАРОЛЬ;mangos"
CharacterDatabaseInfo = "localhost;3306;ИМЯ;ПАРОЛЬ;characters"

Code
nano /opt/mangos/etc/realmd.conf
LoginDatabaseInfo = "localhost;3306;ИМЯ;ПАРОЛЬ;realmd"
LogsDir = "/opt/mangos/logs/"


Приступаем к извлечению карт, необходимо для игры.
Предварительно нужно скачать клиент WoW для версии 3.3.5a.
На момент написания статьи Mangos был версии 3.3.5а.

Что бы определить какую версию клиента нам качать, сперва смотрим какая текущая ревизия Mangos у нас:
Code
cat /storage/mangos/src/shared/revision_nr.h|grep "define REVISION_NR"|awk '{print $3}'

Идем по этому адресу:
Code
github.com/mangos/mangos

И смотрим вверху:
Code
"MaNGOS" is a full featured World of Warcraft server, including authentication, client updates, and world content serving. Compatible with World of Warcraft client 3.3.5a (build 12340).


Скопируйте содержимое /storage/mangos/contrib/extractor_binary к себе на компьютер, желательно с ОС Windows

Создаем экстракт файл - ExtractResources.bat, для автоматического извлечения ресурсов со следующим содержанием:
Code
ad.exe
pause
vmapExtractor3.exe -d B:\ПУТЬ\ДО\WoW3.3.5a\Data
md vmaps
vmap_assembler.exe buildings vmaps
rem pause
md mmaps
set PARAMS=--silent
rem set EXCLUDE_MAPS=
rem EXCLUDE_MAPS="0 1 530 571" # example to exclude the continents
set OFFMESH_FILE=offmesh.txt
set OFFMESH=--offMeshInput %OFFMESH_FILE%
set MAP_LIST_A=1 37 543 595 289 572 529 562 531 269 47 649 650 599 548 559 429 230 573 349 13 25 409 229 43 48 546 553 547 604 545 90 576
set MAP_LIST_B=571 628 560 509 723 532 607 600 668 33 585 566 389 601 369 129 550 189 542 70 109 554 632 552 555 540 598 450 558 249 35 624 557
set MAP_LIST_C=0 631 609 534 533 619 469 602 329 580 615 578 36 556 44 565 544 34 617 608 618 449 616 42 451 582 584 586 587 588 589 590 591 592
set MAP_LIST_D=530 169 575 603 309 574 30 564 568 209 724 658 489  593 594 596 597 605 606 610 612 613 614 620 621 622 623 641 642 647 672 673 712 713 718
MoveMapGen.exe %PARAMS% %OFFMESH% %MAP_LIST_A% %MAP_LIST_B% %MAP_LIST_C% %MAP_LIST_D%
pause


Копируем созданные папки с файлами maps, dbc, vmaps к каталог /opt/mangos/ на своем домашнем сервере.

Настраиваем запуск:
Code
nano /opt/mangos/bin/mangos.sh
#!/bin/sh
CMDNAME='mangos-worldd'
RESTARTCMD='/opt/mangos/bin/mangosd'
SLEEPTIME=1
while test 1
do
             OUTPUT=`ps ax | grep $CMDNAME | grep -v grep`
                     
             if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then
                 echo Restarting service...
                 $RESTARTCMD
             else
                 echo Server Online...
             fi
             sleep $SLEEPTIME
done

Code
nano /opt/mangos/bin/realm.sh
#!/bin/sh
CMDNAME='mangos-realmd'
RESTARTCMD='/opt/mangos/bin/realmd'
SLEEPTIME=1
while test 1
do
             OUTPUT=`ps ax | grep $CMDNAME | grep -v grep`
                     
             if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then
                 echo Restarting service...
                 $RESTARTCMD
             else
                 echo Server Online...
             fi
             sleep $SLEEPTIME
done


Не забываем про нужные права на mangos.sh и realm.sh:
Code
chmod +x /opt/mangos/bin/mangos.sh
chmod +x /opt/mangos/bin/realm.sh


Вот и завершающий базовый скрипт для запуска нашего домашнего сервер WoW:
Code
nano /opt/mangos/start
screen -AmdS world /opt/mangos/bin/mangos.sh
screen -AmdS realm /opt/mangos/bin/realm.sh
chmod +x /opt/mangos/start


Можно запускать:
Code
/opt/mangos/start


Нормальный скрипт потом навояю как нибудь, а пока остановимся на этом.
Остановить сервер можно так:
Code
killall screen


Приступаем к настройки сайта для нашего сервер WoW.
Предполагается что веб сервер уже настроен.
У меня крутится на nginx+php-fpm.
Если нужно выложу и гайд по настройки этой связки.

Скачиваем последний релиз сайта:
Code
mkdir /var/www/wow
svn co http://mwenhanced.googlecode.com/svn/trunk /var/www/wow


Накатываем его базу:
Code
mysql -p'пароль' realmd <  /var/www/wow/sql/full_install.sql


Что бы не париться с правами можно сделать так:
Code
cd /var/www/wow
find ./ -type d -exec chmod 777 "{}" \;
find ./ -type f -exec chmod 666 "{}" \;


Можно настроить подключение к базе ручками, но есть более простой способ.
Сперва разрешаем настройку:
Code
mv /var/www/wow/install/DISABLE_INSTALLER.php /var/www/wow/install/_DISABLE_INSTALLER.php


Идем на страничку настройки
http://wow.ВАШ_ДОМЕН.org/install/

После настройки НУЖНО вернуть все обратно:
Code
mv /var/www/wow/install/_DISABLE_INSTALLER.php /var/www/wow/install/DISABLE_INSTALLER.php


Если с сервером играться не будете то лучше удалить каталог INSTALL:
Code
rm -rf /var/www/wow/install


Так как обновления веб интерфейса ака сайта отстает от ревизий, нужно адаптировать его.
В общем - работа над ошибками.

У меня, пока, были следующие ошибки.
Текст не сохранил, ругалась на колонку 'data'.
Исправляем следующим способом.

Заходим к католог самого сайта:
Code
cd /var/www/wow/

Следующим запросом я нашел файлы в которых строились запросы:
Code
egrep -R 'data,' ./|grep -v 'svn'|grep -e 'query' -e grep 'data'

Нужны эти два файла:
Code
nano ./components/server/server.playersonline.php
nano ./components/server/server.gmonline.php

Ищем все SELECT, что то типа этого:
Code
$query = $characters_db->query("SELECT `account`,`data`,`name`,`class`,`race`,          
`level`, `gender`, `position_x`,`position_y`,`map`,`zone`,`extra_flags` FROM          
`characters` WHERE `online`='1' ORDER BY `name`");

Удаляем только " data," - получаем это:
Code
$query = $characters_db->query("SELECT `account`,`name`,`class`,`race`, `level`,          
`gender`, `position_x`,`position_y`,`map`,`zone`,`extra_flags` FROM `characters`          
WHERE `online`='1' ORDER BY `name`");


Потом я обнаружил предупреждения, ничего исправим.
Quote
Notice: Undefined variable: language in /storage/eeepc/www/wow/components/pomm/pomm_conf.php on line 34
Notice: Undefined variable: site_encoding in /storage/eeepc/www/wow/components/pomm/pomm_conf.php on line 36
Notice: Undefined variable: gm_online in /storage/eeepc/www/wow/components/pomm/pomm_conf.php on line 56
Notice: Undefined variable: gm_online_count in /storage/eeepc/www/wow/components/pomm/pomm_conf.php on line 60

Открываем данный файл:
Code
nano /var/www/wow/components/pomm/pomm_conf.php

И в самом начале добавим четыре строчки, что бы было похоже на это:
Code
$language = "";
$site_encoding = "";
$gm_online = "";
$gm_online_count = "";
$realm_id = 1;
$server_arr = $server;


У сайта по умолчанию отсутствует русский язык.
Но вы можете самостоятельно перевести.
Все файлы с языками лежат в /var/www/wow/lang/
Теперь можно заходить и наслождаться!

http://wow.ВАШ_ДОМЕН.org/

В принципе все. Указываем на ошибки, исправлю.
Надеюсь гайд будет полезен.
Сообщение # 1 отредактировано Borodatych - Воскресенье, 18.03.2012, 02:58
Shkrest
Сержант
Не поясняете не чего.Этот ман мусор.

Учитесь обяснять. И свои черновики держите при себе. Тема нормальная. Но тонкостей не хватает!
Сообщение # 3 отредактировано Shkrest - Пятница, 22.02.2013, 12:31
Shivo
Скаут
я извиняюсь не подскажете в чем проблемка?

x@x:/opt/mangos/build$ cmake ../ -DPREFIX=/opt/mangos -DPCH=1 -DACE_USE_EXTERNAL=1 -DDEBUG=0 -DTBB_USE_EXTERNAL=0

This script builds the MaNGOS server.
Options that can be used in order to configure the process:
CMAKE_INSTALL_PREFIX Path where the server should be installed to
CMAKE_BUILD_TYPE Sets build type (Release;Debug;...)
PCH Use precompiled headers
INCLUDE_BINDINGS_DIR Include a script library in src/bindings/ with the
defined name. the name must corespond to the name of
the folder and the folder must contain a valid
CMakeLists.txt
ACE_USE_EXTERNAL Use external ACE
To set an option simply type -D<OPTION>=<VALUE> after 'cmake <srcs>'.
Also, you can specify the generator with -G. see 'cmake --help' for more details
For example: cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/opt/mangos

CMake Error at CMakeLists.txt:77 (message):
The parameter PREFIX has been removed. Please re-run CMake and use
CMAKE_INSTALL_PREFIX instead to define your installation location!

-- Configuring incomplete, errors occurred!
x@x:/opt/mangos/build$
Сообщение # 4 отредактировано Shivo - Четверг, 13.02.2014, 23:54
  • Страница 1 из 1
  • 1
Поиск: