• Страница 1 из 1
  • 1
Модератор форума: Dimitro  
[FreeBSD] Сборка и установка сервера
INFERNOS
Доброго времени суток,приступим.
В первую чередь нам понадобиться mysql сервер и клиент:

Код
cd /usr/ports/databases/mysql51-server/ && make install clean
cd /usr/ports/databases/mysql51-client/


В принципе, все должно будет неплохо работать и с конфигом по умолчанию, но если вы намереваетесь использовать русские имена персов, не забудьте в my.cnf в разделе [client] и [mysqld] добавить:
default-character-set=utf8

т.к. по умолчанию из порта мускуль собирается с "default-character-set=latin1", и если не прописать utf8 - вместо имён будет "?????????"

Для запуска сервера в screen режиме нужно поставить сам скрин:

Код
cd /usr/ports/sysutils/screen/ && make install clean

Для компиляции я использую gmake, потому, если у вас его нет, ставим из портов:

Код
cd /usr/ports/devel/gmake/ && make install clean

Исходники мы будем выкачивать при помощи GIT

Код
cd /usr/ports/devel/git/ && make install clean

Для сборки openssl и АСЕ может понадобиться последний libtool

Код
cd /usr/ports/devel/libtool22/ && make install clean

Кроме того, для сборки будет нужен openssl

Код
cd /usr/ports/security/openssl/ && make install clean


АСЕ, версии 5.7.5

Чтобы его установить нам нужно взять вот этот патч
и вот этот архив

Содержимым архива заменяем содержимое каталога /usr/ports/devel/ace
далее пробуем сделать make, система выкачает и распакует архив с исходниками и начнет сборку (вдруг нам повезет!), если удача повернулась тылом и выдала ошибку, касаемо pthread, накатываем патч

Код
cd /usr/ports/devel/ace/work
patch < путь к вышеуказанному патчу/compa_freebsd7.patch


Вероятнее всего спросит, какие файлы патчить: указываем ему полный путь:

/usr/ports/devel/ace/work/ACE_wrappers/ace/OS_NS_signal.inl
и
/usr/ports/devel/ace/work/ACE_wrappers/ace/OS_NS_netdb.inl

повторяем

Код
cd /usr/ports/devel/ace/
make install


Если все в порядке, после этих действий выходим из под рута.
Идем в свой домашний каталог, создаем там каталог для исходников, заходим в него и запускаем (исходники для версии 3.3.5а, на момент написания)



Ждем, пока они выкачаются
После заходим в каталог исходников и запускаем оттуда скрипт такого вида, параметры конфигурации нужно подобрать под свою систему:

Код
mkdir build
cd build
cmake ../ -DPREFIX=/opt/mangos/trinity/hg/release \
-DCMAKE_C_FLAGS="-O2" \
-DCMAKE_CXX_FLAGS="-O2" -DDO_DEBUG=0 -DDO_SCRIPTS=true \
-DCMAKE_DFD_SETSIZE=4096 -DLARGE_CELL=0 -DSHORT_SLEEP=1 \
-DCMAKE_C_FLAGS="-march=prescott -m64 -D_LARGEFILE_SOURCE \
-D_FILE_OFFSET_BITS=64 -O2 -pipe -pipe -msse3 -fomit-frame-pointer \
-ffast-math -fno-strength-reduce -fno-strict-aliasing -frename-registers"
#cd build
#gmake install


Стоит заметить, что строчки после cmake определяют параметры конфигурации сборки для вашей системы, параметры эти на всех никсах одинаковые, так что можем невообразимым образом утащить их из мана для сборки на linuxе

Правда при том, что openssl и ACE у нас установлены в системные директории, нам не нужно указывать конфигуратору где их искать, и строки

Код
-DACE_LIBRARY=~/.sys/lib/libACE.so -DACE_INCLUDE_DIR=~/.sys/include/ -DSSLLIB=~/.sys/lib/libssl.so

мы выбрасываем

Вероятно вы заметили отличие в О3/О2 - эти параметры отвечают за степень оптимизации, причем стабильной считается О2, будем собирать с ней.

Этот скрипт после конфигурации сразу же начнет сборку, если вам это не нужно, комментируем последние две строчки.

Результат наших трудов будет сохранен в каталог, указанный в -DPREFIX=

Проверяем этот каталог, если видим там папку bin с 2мя файлами trinity-core и trinity-realm, можно себя поздравить.

Стандартные конфиги лежат в etc/редактируем их под себя.

Для удобства запуска в папку с бинарниками можно бросить вот такие скрипты:

core.sh:

Код
#!/bin/sh
while true ; do
servlog='путь к логу сервера, указанный в конфиге, включая имя файла лога';
outpath='путь к папке, в которую будем сохранять крашлог';
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 >> $outpath$date.txt;
echo "" >> $outpatch$date.txt;
echo "END bugtracker system." >> $outpatch$date.txt;
/путь к бинарникам/bin/trinity-core -c ../etc/trinitycore.conf #указывает расположение файла конфигурации
done

Т.К. Рeалм сервер падает в разы меньше и по более очевидным причинамм, столь страшный скрипт для него не нужен.

realm.sh:

Код
#!/bin/sh
while true ; do
echo `date` ", Realm daemon crashed and restarted." >> /путь куда сохранять краш лог/realmcrash.log
/путь к бинарникам/bin/trinity-realm -c ../etc/trinityrealm.conf
done


start.sh:

Код
screen -AmdS world /путь к скрипту/core.sh
screen -AmdS realm /путь к скрипту/realm.sh

start.sh готов к тому, чтобы занести его, например в /etc/rc.d
тогда он будет автоматом запускать тринити после старта сервера.

Скрипты core.sh и realm.sh - авторестарт в случае падения.
core.sh записывает последние 30 строк из лога сервера в указанную папку

ВАЖНО!

99.9% у вас будет ошибка с FileSystem.cpp

Решение:

Код
diff -r 4c8e9fc4c125 dep/g3dlite/source/FileSystem.cpp
--- a/dep/g3dlite/source/FileSystem.cpp Thu Sep 02 06:02:51 2010 +0300
+++ b/dep/g3dlite/source/FileSystem.cpp Fri Sep 03 12:47:47 2010 +0600
@@ -31,6 +31,8 @@
        #   include <dirent.h>
        #   include <fnmatch.h>
        #   include <unistd.h>
+#   define O_LARGEFILE      0100000
+#   define stat64 stat
        #   define _getcwd getcwd
        #   define _stat stat
        #endif


(положить в папку с ядром в виде FileSystem.patch и залить гитом)

Либо руками прописать в dep/g3dlite/source/FileSystem.cpp

Код
+#elif defined(__FreeBSD__)
+#   include <dirent.h>
+#   include <fnmatch.h>
+#   include <unistd.h>
+#   define O_LARGEFILE      0100000
+#   define stat64 stat
+#   define _stat stat
+#   define _getcwd getcwd


Если же будет ошибка с jemalloc:

Код
[ 98%] Built target scripts
Linking CXX executable worldserver
/usr/bin/ld: cannot find -ljemalloc
gmake[2]: *** [src/server/worldserver/worldserver] Error 1
gmake[1]: *** [src/server/worldserver/CMakeFiles/worldserver.dir/all] Error 2
gmake: *** [all] Error 2


Зайдите в /исходник/src/server/worldserver/CMakeLists.txt и в блоке:

Код:
Код
]else()
         target_link_libraries(
           worldserver
           game
           shared
           trinitysockets
           trinitydatabase
           trinityauth
           trinityconfig
           collision
           g3dlib
           jemalloc
           ${SCRIPT_LIB}
           ${READLINE_LIBRARY}
           ${TERMCAP_LIBRARY}
           ${ACE_LIBRARY}
           ${MYSQL_LIBRARY}
           ${OPENSSL_LIBRARIES}
           ${ZLIB_LIBRARIES}        
           ${OSX_LIBS}
         )
endif()

Просто уберите строку jemalloc

Взято с http://trinity-core.ru/,переписано и дополнено мной.
Присяжный - краб.
Сообщение # 1 отредактировано INFERNOS - Вторник, 25.08.2015, 23:28
  • Страница 1 из 1
  • 1
Поиск: