В данном мануале будем ставить сервер на систему Fedore Core (5 или 6 на ваш выбор)
Мануал расчитан на человека который хоть немного работал в среде *nix и умеет ставить пакеты
Что нам понадобиться:
root доступ для установки недостающих пакетов
Пользователь mangos для самого сервера
Свободное время и конечно же желание
Итак начнем....
==============================
1. Установка пакетов
==============================
Для успешного запуска и функционирования сервера нам нужны следующие пакеты:
Mysql server 5 ветки (5.0.27 на этот момент)
Mysql_devel
Mysql_shared
Mysql_Headers and libraries
Всё это мы берем с http://dev.mysql.com/downloads/mysql/5.0.html
Далее:
Gcc 4.1.1
Gcc_devel
Gcc-c++
Gcc-cpp
Берем с http://gcc.gnu.org/
Autoconf
Automake
Aclocal
Autoheader
Если этого нету, гуглим, ссылок не помню
make
Subversion
Python
Берем тут - http://subversion.tigris.org/
Также все это мужно установить обычно идущим в комплекте с Федорой пакетом yum (курим man yum).
Итак все наши пакеты стоят и всё хорошо, идём дальше.
==============================
2. Подготовка
==============================
Создаём пользователя mangos с паролем mangos
# useradd mangos --password mangos
ВНИМАНИЕ!!! Дальше все действия будем производить из под пользователя - mangos, root уже не нужен!
==============================
3. Получение исходного кода сервера и скриптов
==============================
Определимся с местом хранения исходников и скриптов.....
Для сырцов сервера /home/mangos/source/mangos
Для ScriptDev'a2 /home/mangos/source/script
Создаём эти папки:
mkdir /home/mangos/source/mangos
mkdir /home/mangos/source/script
чтобы наверняка, указываем полный путь
Теперь пишем:
svn co https://mangos.svn.sourceforge.net/svnroot/mangos/trunk /home/mangos/source/mangos
таким образом мы запрашиваем все сырцы из репозитория...
на вопрос о сертификате отвечаем "p" - permanently
Таким же образом получаем ScriptDev2:
svn co http://scriptdev2.svn.sourceforge.net/svnroot/scriptdev2 /home/mangos/source/script
Внимание! Получить полный исходники нам нужно только 1 раз! Все последующие разы нам нужно только обновлять их до последней ревизии
Теперь создадим папку compile, в которой мы будем хранить исходные коды для компиляции и без лишнего мусора
Для упрощения всего процесса подготовки к компилированию я написал простенький скрипт на bash'e:
Создаем файл get.sh и пишем туда:
svn up /home/mangos/source/mangos >> /home/mangos/update.log svn up /home/mangos/source/script >> /home/mangos/update.log chmod 777 -R source rm -rf /home/mangos/compile/* cp /home/mangos/source/mangos/* /home/mangos/compile/ -f -r mkdir /home/mangos/compile/src/bindings/ScriptDev2 cp /home/mangos/source/script/* /home/mangos/compile/src/bindings/ScriptDev2 -f -r cd /home/mangos/compile NEWREV="$(svn info /home/mangos/source/mangos|grep 'Revision:')" NEWREV=`echo $NEWREV | cut -d \ -f 2` echo -e "\E[37mMangos revision: \E[36m$NEWREV" NEWREVSC="$(svn info /home/mangos/source/script|grep 'Revision:')" NEWREVSC=`echo $NEWREVSC | cut -d \ -f 2` echo -e "\E[37mScriptDev revision: \E[36m$NEWREVSC"
Скрипт обновляет исходники, и копирует их в папку compile без лишних svn файлов..... информация по обновлению сохранится в файле update.log
Итак подготовка завершена, исходные коды на месте, можно компилировать
==============================
4. Компиляция
==============================
Естественно чтобы наш сервер был еще лучше, нам нужны патчи к нему....
Первым делом патчим ScriptDev2...
patch -p0 < ./MaNGOS-rXXXX-ScriptDev2.patch
Далее идём на соответствующие сайты и ищем патчи.. Скачиваем то что нам нужно
И вот есть у нас файл SuperPuper_v2.patch
Что же с ним делать? Ответ:
Кидаем патч в наш каталог compile, переходим в этот каталог сами, и в командной строке пишем:
patch -p0 < ./SuperPuper_v2.patch
Если патч корректный и удача с нами, то сырцы патчаться и все отлично
далее необходимо выполнить команду
autoreconf --install --force
чтобы обновились все make файлы для успешной компиляции
Сразу определимся что готовый сервер будет лежать в папке server (/home/mangos/server)
Теперь настало время конфигурировать наш будущй сервер... вводим команду (мы находимя в папке compile)
./configure --prefix=/home/mangos/server --sysconfdir=/home/mangos/server/etc --with-python --enable-cli --enable-ra --datadir=/home/mangos/server
Расшифровываю: --prefix = путь установки, --sysconfdir = путь до файлов конфига, --datadir = рабочая папка, --enable-cli = с командной строкой, --enable-ra = удаленное администрирование
С вводом команды запустится процесс конфигурирования наших сырцов...
Если последнее что вы увидите будут строки вида:
config.status: creating dep/src/Makefile config.status: creating dep/src/zlib/Makefile config.status: creating dep/src/zthread/Makefile config.status: creating config.h config.status: config.h is unchanged config.status: executing depfiles commands
Значит все прошло успешно!
далее следует сама компиляция... вводим
make
Процесс компиляции довольно долгий (зависит от железок), поэтому сходите пока перекурите или кофе попейте
Последние строки при компиляции:
make[2]: Entering directory `/home/mangos/compile/sql' make[2]: Цель `all' не требует выполнения команд. make[2]: Leaving directory `/home/mangos/compile/sql' make[2]: Entering directory `/home/mangos/compile' make[2]: Leaving directory `/home/mangos/compile' make[1]: Leaving directory `/home/mangos/compile'
что то вроде таво....
Если все так, то можете вздохнуть спокойно, сервер скомпилировался!
Но это не всё, еще нужен Екстрактор карт!
заходим в папку libmpq
cd contrib/map_extractor/libmpq
пишем make
идём в папку map_extractor
cd ..
пишем make
Всё, на этом пока закончим с компиляциями
Идём обратно в папку compile и пишем
make install
Пошол процесс установки сервера....
Вуаля! наш сервер почти готов к запуску
АЛЯРМ!!! Так как екстрактор карт не в очень рабочем состоянии, извлекать карты мы будем под windows
==============================
5. Подготовка к запуску
==============================
Теперь нам требуется:
Карты
DBC файлы
Начнём....
Чтобы особо не напрягаться, качаем уже готовые DBC
http://depositfiles.com/files/1192852
http://rapidshare.com/files/42311011/dbc_2.1.3.rar.html
создадим папку dbc
mkdir /home/mangos/server/mangos/dbc
распаковываем архив и кидаем в папку /home/mangos/server/mangos/dbc
Теперь карты....
работем уже под форточками!
Качаем последний распаковщик (всегда на 1 месте):
http://mangos.svn.sourceforge.net/vi...tractor/ad.exe
Кладем файл ad.exe в корень папки WoW'a, создаем тамже папку maps и запускаем ad.exe
Начался процесс распаковки карт...
Теперь любыми способами перетаскиваем папку maps на наш линукс сервер
Кладем её в папку /home/mangos/server/mangos/ чтобы получилось /home/mangos/server/mangos/maps
После пожно сделать chmod 777 -R /home/mangos/server/mangos/
Теперь нам надо извлечь Вмапсы из клиента, для этого мы копируем из папки с сырцами \contrib\ всю папку "vmap_extract_assembler_bin" её тоже кидаем в корень папки WoW и запускаем "makevmaps_SIMPLE.bat" дабы не отвечать на вопросы экстрактора! он достанит нам вмапсы из клиента в нутри папки "vmap_extract_assembler_bin" появиться папка "vmaps" как рас там и лежат наши вмапсы её надо положить в /home/mangos/server/mangos/ чтобы получилось /home/mangos/server/mangos/vmaps
итак у нас есть DBC файлы, файлы Карт и файлы Vmaps
==============================
6. Утановка базы данных
==============================
Будем исходить и того что мы просто поставили Mysql Server и установили пароль рута (rpm'ки не сложно поставить)
пишем /usr/bin/mysql --password="рутовый пароль"
попадаем в оболочку mysql... теперь нужно создать 2 базы данных, пишем
CREATE DATABASE mangos;
CREATE DATABASE realmd;
проверяем:
SHOW DATABASES;
если видем там наши 2 базы значит все ок, едем дальше
Теперь нам нужно создать пользователя для этих двух баз:
пишем
GRANT ALL PRIVILEGES ON mangos.* TO 'mangos'@'localhost'
появится "->", пишем
IDENTIFIED BY 'пароль' WITH GRANT OPTION;
таким образом мы создали пользователя mangos с полными правами на базой mangos
Даём привилегии для второй базы:
GRANT ALL PRIVILEGES ON realmd.* TO 'mangos'@'localhost' WITH GRANT OPTION;
Проверяем:
show grants for mangos@localhost;
Если наши записи есть, значит всё прошло успешно
выходим из оболочки...
Внимание!!!
Если mysql server стоит на удалённой машине, то вместо localhost нужно указать ip адрес той машины на которой стоит mangos сервер!
Едем в папку куда мы поставили сервер, там папка mangos, в ней sql (/home/mangos/server/mangos/sql)
Проверяем наличие файла realmd.sql
Его нам нада загнать в базу realmd, что мы и делаем:
/usr/bin/mysql --user=mangos --password="пароль"
апять оказываемся в оболочке. выбираем бд с которой будем работать:
use realmd;
напишут что Database changed
теперь пишем:
\. /home/mangos/server/mangos/sql/realmd.sql
realmd база готова, можете написать SHOW TABLES; и посмотреть на созданные таблицы
выходим из оболочки...
Теперь нужно наполнить базу mangos, для этого идём по следующим форумам:
Название: UDB
Форум: http://www.udbforums.org
SVN: https://unifieddb.svn.sourceforge.net/svnroot/unifieddb
Название: Y2kCat DataBase
Форум: http://ytdb.kanet.ru/index.php
SVN: http://opensvn.csie.org/YTDB/
Название: Veronia
Форум: http://veronia.mangos.ru
Название: silvermoon
Форум: http://projectsilvermoon.net/
Скачиваем лучшую по мнению форумчан базу (полную), распаковываем... к примеру в туже папку sql, в которой лежит файл realmd.sql
Итак получился путь /home/mangos/server/mangos/sql/база.sql
И делаем тоже самое что и с файлом realmd.sql, только вместо use realmd; пишем use mangos;
Данные внесены, всё хорошо... Теперь нужно обновить нашу базу данных, до ревизии самого сервера
Пример: ревизия сервера - 2900 а базу мы скачали для ревизии 2550, что нужно сделать:
идём в папку /home/mangos/compile/sql/updates/ , видим там много файлов вида "номер_название.sql"
И импортируем все файлы. которые больше 2250_название.sql в базу данных
в основном апдейты для mangos базы... но если имя файла realmd, realmlist, realmcharacters то это апдейты для базы realmd
Импортировать файлы я думаю вы уже научились
Итак. базу мы обновили! Теперь сразу чтобы потом не возвращаться к этому изменим таблицу realmlist под наш сервер:
входим в оболочку: /usr/bin/mysql --user=mangos --password="пароль"
выбираем базу realmd и пишем:
UPDATE `realmlist` SET `name` = 'название_сервера' , `address` = 'ip адрес сервера' WHERE `id` = '1';
Всё! С базой дела закончены.
==============================
7. Конфиги
==============================
Есть 2 конфига - mangosd.conf и realmd.conf.... Оба лежат в папке /home/mangos/server/etc
в обоих файлах найдите:
LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd"
в файле realmd.conf и
LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd" WorldDatabaseInfo = "127.0.0.1;3306;mangos;mangos;mangos"
в файле mangosd.conf
Изменяем эти строки на наши: mangos;mangos заменяем на наши логин и парольк базе данных
Остальные настройки настраиваем сами, читая коментарии...
==============================
8. Запуск
==============================
Для облегчения запуска и управления будем использовать очень удобную программу Screen
Качаем - http://www.icewalkers.com/Linux/Soft...80/screen.html
Устанавливаем....
Идём в папку /home/mangos/server/bin (там храняться запускаемые файлы)
Создаем 3 файла:
mangos.sh:
#!/bin/sh while true ; do servlog='/home/mangos/server/bin/Server.log'; outpatch='/home/mangos/server/bin/crash/'; date=`date "+%Y-%m-%d_%H:%M:%S"`; echo "Server CRASHED !!! Start Bugreport System." >> $outpatch$date.txt; echo "Server.log Log FILE Last 30 Lines:" >> $outpatch$date.txt; cat $servlog | tail -n 30 >> $outpatch$date.txt; echo "" >> $outpatch$date.txt; echo "END bugtracker system." >> $outpatch$date.txt; /home/mangos/server/bin/mangosd done
это файл запуска mangosd (сразу являющийся авторестартером и багтрекером)
realm.sh:
#!/bin/sh while true ; do echo `date` ", Realm daemon crashed and restarted." >> /home/mangos/server/bin/realmcrash /home/mangos/server/bin/realmd done
тоже самое только для realmd
start:
cd /home/mangos/server/bin/ screen -AmdS world /home/mangos/server/bin/mangos.sh screen -AmdS realm /home/mangos/server/bin/realm.sh
это основной файл запуска
Также создадим папку crash
mkdir /home/mangos/server/bin/crash/
туда будут складываться отчеты о падениях сервера mangosd
Падения realmd будут писаться в файле realmcrash
Прописываем правва на файлы:
chmod 777 mangos.sh
chmod 777 realm.sh
chmod 777 start
И запускаем файл start
./start
После пишем:
screen -list
Если получаем что то вроде:
$ screen -list There are screens on: 8296.world (Detached) 8299.realm (Detached) 2 Sockets in /var/run/screen/S-mangos.
То понимаем что все отлично
Чтобы посмотреть как работает наш сервер напишем:
screen -r world
и попадем в терминал, где работает сервер mangosd
посмотрели и хватит.... нажимаем Ctrl+a и потом d
выходим их терминала
Внимание!!! 1 запуск лучше производить просто запустив файл mangosd
./mangosd
чтобы убедиться что все работает!
==============================
9. Дополнительно
==============================
Скрипт stop от vagabond:
#!/bin/sh PID=/var/run/screen/S-mangos kill -9 `screen -list | awk '{print $1}' | sed -e '1d' -e '3,6d' -e 's/\>.*//g'` kill -9 `screen -list | awk '{print $1}' | sed -e '1,2d' -e '4,6d' -e 's/\>.*//g'` rm -f $PID/*
Скрипт get.sh от Ivan Kolesnik для FreeBSD
#!/usr/local/bin/bash svn up /home/mangos/source/ >> /home/mangos/update.log svn up /home/mangos/source/script >> /home/mangos/update.log chmod -R 777 /home/mangos/source/ rm -rf /home/mangos/compile/* cp -f -r /home/mangos/source/mangos/* /home/mangos/compile/ mkdir /home/mangos/compile/src/bindings/ScriptDev2 cp -f -r /home/mangos/source/script/* /home/mangos/compile/src/bindings/ScriptDev2 cd /home/mangos/compile sed -i -e '/src\/bindings\/universal\/Makefile/ s/^/src\/bindings\/ScriptDev2\/Makefile\n/' configure.ac NEWREV="$(svn info /home/mangos/source/mangos|grep 'Revision:')" NEWREV=`echo $NEWREV | cut -d \ -f 2` echo -e "\E[37mMangos revision: \E[36m$NEWREV" NEWREVSC="$(svn info /home/mangos/source/script|grep 'Revision:')" NEWREVSC=`echo $NEWREVSC | cut -d \ -f 2` echo -e "\E[37mScriptDev revision: \E[36m$NEWREVSC"
Скрипт рестартера для FreeBSD от int (найдено на просторах форума )
конфигурировать без --enable-cli и enable-ra
#!/usr/local/bin/bash # Massive Network Game Object Server # autorestart Script while : do echo "MaNGOS daemon restarted" echo `date` >> crash.log & nice -20 ./bin/mangosd | tail -n 20 >> crash.log echo " " >> crash.log & pid=`ps ax | awk '($5 ~ /mangosd/) { print $1 }'` wait $pid echo `date` ", MaNGOS daemon crashed and restarted." >> serverlog done