RU/Building MTASA Server on GNU Linux

From Multi Theft Auto: Wiki
[[{{{image}}}|link=]] Note: Эта статья предназначена только для тех владельцев, кто внес изменения в код сервера. Если вам нужен прекомпилированный сервер (для обычных владельцев серверов), перейдите на linux.mtasa.com

Подготовка системы

Чтобы собрать выделенный сервер Multi Theft Auto, вам понадобится снабдить свою систему определенными библиотеками и инструментами. Как их устанавливать, зависит от вашего дистрибутива.

Наш сетевой модуль (net.dll или net.so) поставляется как прекомпилированная двоичная библиотека. Файл для GNU/Linux можно получить из новейшего nightly-билда для Linux, то есть отсюда. Используйте net.so от 1.4, если компилируете из trunk, или net.so от 1.3.x, если компилируете ветвь 1.3.x. Удостоверьтесь, что вы прочитали верхнюю часть MTA10_Server/version.h, так как там содержатся указания по компилированию билдов разного типа.


Debian Linux


Включает производные дистрибутивы типа Ubuntu.

Вам понадобятся необходимые инструменты для сборки, заголовки и библиотеки, поставляемые через соответствующие пакеты Debian (напр. Debian Lenny):

  • build-essential: содержит необходимые инструменты, заголовки и библиотеки для сборки приложений
  • automake: содержит инструменты automake (автосборка)
  • libtool: содержит программное обеспечение libtool, нужное для сборки библиотек
  • libcurl3-dev: содержит библиотеку cURL (версия 3 без поддержки SSL)
  • libpcre3-dev: содержит библиотеку PCRE (версия 3)
  • libsqlite3-dev: содержит библиотеку SQLite (версия 3)
  • libreadline5-dev: содержит библиотеку readline (версия 5)
  • subversion: содержит SVN-клиент, используемый для checkout'а нашего репозитория
  • libncurses5-dev: содержит программное обеспечение для контроля над записью в окне консоли
  • libncursesw5-dev: содержит поддержку для широких символов
  • libsparsehash-dev: содержит поддержку для Google hash-map (Так что вам не придется компилировать sparehash!)
  • libmysqlclient-dev: содержит библиотеку MySQL

Чтобы установить эти пакеты через apt, используйте команду apt-get install <package list>, как в следующем образце (выполнять от root):

apt-get install build-essential automake libtool libcurl4-openssl-dev libpcre3-dev libsqlite3-dev libreadline5-dev subversion libncurses5-dev libncursesw5-dev libsparsehash-dev libmysqlclient-dev



Gentoo Linux


Вам понадобятся необходимые инструменты для сборки, заголовки и библиотеки. Но так как система портирования Gentoo сделана так, что компиляция любых пакетов происходит внтури самой системы, необходимые инструменты для сборки будут итак предустановелены. Все, что остается - установить необходимые библиотеки:

  • sqlite: содержит библиотеку SQLite
  • subversion: содержит SVN-клиент, используемый для checkout'а нашего репозитория
  • curl: содержит библиотеку cURL; чтобы скомпилировать с поддержкой SSL, примените флаг net-misc/curl ssl USE

Чтобы скомпилировать и установить эти пакеты через emerge, используйте команду emerge -v <package list>. Опция -v показывает дополнительную * * информацию и может быть опущена. (Если вы хотите задействовать какие-либо флаги USE, пре-запустите emerge с USE="здесь пишите флаги". Вы также можете использовать опцию -pv для проверки на предмет использования правильных флагов.) Ссылайтесь на Gentoo Handbook или руководство для получения более подробной информации по emerge.

Образец:

emerge -v subversion sqlite
USE=“net-misc/curl ssl” emerge -v curl



Fedora


Для успешной компиляции MTA сервера на Fedora вам понадобятся следующие пакеты:

  • glibc-devel:
  • curl-devel: содержит библиотеку cURL
  • pcre-devel: содержит библиотеку PCRE
  • sqlite3-devel: содержит библиотеку SQLite
  • readline-devel: содержит библиотеку readline
  • lua-devel: содержит Lua-библиотеки
  • subversion: содержит SVN-клиент, используемый для checkout'а нашего репозитория

Чтобы установить эти пакеты через yum, воспользуйтесь командой yum install <package list>, как в следующем образце (выполнять от root):

yum install glibc-devel curl-devel pcre-devel sqlite3-devel readline-devel lua-devel subversion


Замечание для x64


На данный момент сервер MTA:SA не может быть корректно скомпилирован в 64-битном режиме. Вместо этого, скомпилируйте его в 32-битном режиме и запустите в режиме 32-битной совместимости (используйте флаг -m32).

Общее руководство для 1.5.7

Получение исходного кода.

Для начала вам понадобится скачать исходный код.

svn checkout http://mtasa-blue.googlecode.com/svn/branches/1.5.7/ mtasa-blue
cd mtasa-blue

Затем вот так его скомпилировать:

autoreconf -fiv
export PKG_CONFIG_PATH=/usr/lib32/pkgconfig
./configure LDFLAGS="-m32" CPPFLAGS="-m32" CFLAGS="-m32" CXXFLAGS="-m32" $@
make
make -C MTA10_Server install
make -C Shared/XML install

Получить net.so так:

wget http://nightly.mtasa.com/?multitheftauto_linux-1.5.7-rc-latest -O multitheftauto_linux-1.5.7-latest.tar.gz
tar -xzf multitheftauto_linux-1.5.7-latest.tar.gz --transform 's:[^/]*:latest_nightly:'
mv latest_nightly/net.so MTA10_Server/output/
rm -rf latest_nightly multitheftauto_linux-1.5.7-latest.tar.gz

Скопировать конфигурационные файлы:

cp MTA10_Server/mods/deathmatch/acl.xml MTA10_Server/output/mods/deathmatch/acl.xml
cp MTA10_Server/mods/deathmatch/mtaserver.conf MTA10_Server/output/mods/deathmatch/mtaserver.conf

Получить ресурсы:

svn export http://mtasa-resources.googlecode.com/svn/trunk/ MTA10_Server/output/mods/deathmatch/resources

И готовый сервер будет лежать по адресу MTA10_Server/output

Поиск и устранение неисправностей

Любые ошибки в процессе компиляции json-c могут быть разрешены через вызов autoreconf -fi из директории json-c.

Если вы получили какие-либо неожиданные ошибки в процессе компиляции, пожалуйста, посетите наш багтрекер или IRC канал


Вылеты сервера

Если ваш Linux-сервер вылетает, получите backtrace и опубликуйте отчет на нашем багтрекере

Как получить backtrace:

Есть ли у вас файл дампа ядра (core dump) в директории с MTA сервером?

Обычно он называется 'core', его размер свыше 100МБ, сам он выглядит примерно так:

Core.png

Если да, то:

  • Установите gdb. Для установки gdb на Debian, воспользуйтесь командой:
apt-get install gdb
  • И из директории, в которую установлена MTA, выполните команду

gdb mta-server -c core

  • Когда gdb запустится, введите следующую команду для получения backtrace:
bt full
  • Сохраните полученную информацию
  • (Чтобы выйти из gdb, используйте команду quit)

Если нет, то:

  • Установите gdb. Для установки gdb на Debian, воспользуйтесь командой:
apt-get install gdb
  • Из директории MTA сервера запустите mta-server примерно таким образом:
gdb mta-server --eval-command run
  • Теперь дождитесь вылета. (пока что игнорируйте странную информацию, выводимую на экран)
  • Когда вылет произойдет, выполните следующую команду для получения backtrace:
bt full
  • Сохраните полученную информацию
  • (Чтобы выйти из gdb, используйте команду quit)


Зависания сервера

Если ваш Linux-сервер зависает, получите backtrace с thread-информацией и опубликуйте отчет на нашем багтрекере

Как получить backtrace с thread-информацией:

  • Установите gdb. Для установки gdb на Debian, воспользуйтесь командой:
apt-get install gdb
  • Из директории MTA сервера, запустите mta-server примерно таким образом:
gdb mta-server --eval-command run
  • Теперь дождитесь зависания. (пока что игнорируйте странную информацию, выводимую на экран)
  • Когда зависание произойдет, нажмите ctrl-c для запуска gdb
  • Затем выполните следующую команду для получения backtrace:
bt full
  • Сохраните полученную информацию
  • Затем выполните следующую команду для получения thread-информации:
info threads
  • Сохраните полученную информацию
  • (Чтобы выйти из gdb, используйте команду quit)


Запуск на 64-битном Linux

  • Установите 32-битные библиотеки для вашего дистрибутива

Если вы получаете ошибку типа "libreadline.so.5: cannot open shared object file: No such file or directory.", то на Debian она может быть разрешена следующим способом:

wget http://ftp.uk.debian.org/debian/pool/main/r/readline5/libreadline5_5.2-7_i386.deb
dpkg -X libreadline5_5.2-7_i386.deb temp
cp -d temp/lib/libreadline.so.5* /usr/lib32/