RU/Building MTASA Server on GNU Linux
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.6.0
Получение исходного кода.
Для начала вам понадобится скачать исходный код.
svn checkout http://mtasa-blue.googlecode.com/svn/branches/1.6.0/ 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.6.0-rc-latest -O multitheftauto_linux-1.6.0-latest.tar.gz tar -xzf multitheftauto_linux-1.6.0-latest.tar.gz --transform 's:[^/]*:latest_nightly:' mv latest_nightly/net.so MTA10_Server/output/ rm -rf latest_nightly multitheftauto_linux-1.6.0-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.
Если вы получили какие-либо неожиданные ошибки в процессе компиляции, пожалуйста, посетите наш багтрекер или Discord
Вылеты сервера
Если ваш Linux-сервер вылетает, получите backtrace и опубликуйте отчет на нашем багтрекере
Как получить backtrace:
Есть ли у вас файл дампа ядра (core dump) в директории с MTA сервером?
Обычно он называется 'core', его размер свыше 100МБ, сам он выглядит примерно так:
Если да, то:
- Установите 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/