TrinityCore Single-Player 3.3.5 на Linux: сборка, ресурсы, MariaDB и автозапуск
настраиваем MariaDB, импортируем TDB, добавляем таблицы NPCBot (если нужны) и включаем автозапуск через systemd.
Важно про версии: TrinityCore SP в этом сценарии рассчитан на клиент World of Warcraft 3.3.5 (WotLK).
Клиент другой версии = проблемы с ресурсами/БД и нестабильный запуск.
Подготовка системы
Ставим инструменты, библиотеки, архиватор, screen и MariaDB.
sudo apt update
sudo apt install -y htop mc p7zip-full screen git clang cmake make gcc g++ \
libmariadbclient-dev default-libmysqlclient-dev \
libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev \
mariadb-server pwgen
Делаем clang компилятором по умолчанию.
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang 100
Создаём отдельного пользователя под сборку и запуск (безопаснее, чем гонять сервер от root).
sudo adduser wow
sudo mkhomedir_helper wow
Генерация надёжных паролей.
pwgen -n -s -B 21 5
Получение исходников (обязательно с submodules)
Проект использует внешний модуль (например, Eluna/LuaEngine), поэтому репозиторий нужно клонировать
рекурсивно, иначе сборка может упасть на ошибке вида LuaEngine.h: No such file or directory.
sudo -iu wow
cd ~
git clone --recursive https://github.com/zaicopx/TrinityCore-Single-Player
Опционально: заархивировать исходники как “снимок состояния”.
7z a -m0=lzma2 -mx=9 TrinityCore-SP.7z TrinityCore-Single-Player/
Сборка и установка ядра
Создаём папку сборки и настраиваем CMake.
cd ~/TrinityCore-Single-Player
mkdir -p build && cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/home/wow/server \
-DCONF_DIR=/home/wow/server/etc \
-DTOOLS=1 \
-DSCRIPTS=dynamic \
-DWITH_WARNINGS=1
Компилируем (используем все потоки CPU).
make -j"$(nproc)"
Устанавливаем в /home/wow/server.
make install
ls -la /home/wow/server
Не удаляйте каталог с исходниками после сборки: он пригодится для SQL-скриптов модулей и обслуживания.
Конфигурация сервера
Создаём рабочие конфиги из .dist.
cd /home/wow/server/etc
cp authserver.conf.dist authserver.conf
cp worldserver.conf.dist worldserver.conf
Готовим директорию под игровые ресурсы.
mkdir -p /home/wow/server/data
Открываем worldserver.conf и указываем путь к данным.
nano /home/wow/server/etc/worldserver.conf
DataDir = "../data"
Извлечение игровых ресурсов (DBC/Maps/VMaps/MMaps/Cameras)
Для корректной работы нужны данные из клиента WoW 3.3.5:
dbc, maps, vmaps, mmaps и Cameras.
Критично: используйте клиент точно той же версии, что и ветка сервера (здесь — 3.3.5 WotLK).
Подключаем клиент
Предположим, клиент смонтирован в /mnt/WOW_3.3.5.
cd /mnt/WOW_3.3.5
ls
Внутри должны быть Wow.exe и папка Data.
DBC и Maps
/home/wow/server/bin/mapextractor
cp -r dbc maps /home/wow/server/data
VMaps
/home/wow/server/bin/vmap4extractor
mkdir -p vmaps
/home/wow/server/bin/vmap4assembler Buildings vmaps
cp -r vmaps /home/wow/server/data
MMaps (долго)
mkdir -p mmaps
/home/wow/server/bin/mmaps_generator
cp -r mmaps /home/wow/server/data
Cameras
cp -r Cameras /home/wow/server/data
Итог: в /home/wow/server/data должны быть папки:
Cameras
dbc
maps
vmaps
mmaps
MariaDB: настройка и безопасность
Открываем конфиг MariaDB и фиксируем безопасные базовые настройки.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Оставляем базу на локальном интерфейсе и увеличиваем размер пакета для больших дампов.
bind-address = 127.0.0.1
max_allowed_packet = 512M
sudo systemctl restart mariadb
Запускаем первичную защитную настройку.
sudo mysql_secure_installation
Пользователь и базы данных для TrinityCore
Создаём пользователя MariaDB под TrinityCore (пароль замените на свой).
sudo mariadb
CREATE USER 'trinity'@'localhost' IDENTIFIED BY 'STRONG_PASS';
GRANT ALL PRIVILEGES ON *.* TO 'trinity'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit;
Создаём три базы: auth, characters, world.
sudo mariadb
CREATE DATABASE `world` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `characters` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE DATABASE `auth` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
quit;
Прописываем доступ к БД в конфиги
Файл authserver.conf: меняем LoginDatabaseInfo.
nano /home/wow/server/etc/authserver.conf
LoginDatabaseInfo = "127.0.0.1;3306;trinity;STRONG_PASS;auth"
Файл worldserver.conf: меняем три строки.
nano /home/wow/server/etc/worldserver.conf
LoginDatabaseInfo = "127.0.0.1;3306;trinity;STRONG_PASS;auth"
WorldDatabaseInfo = "127.0.0.1;3306;trinity;STRONG_PASS;world"
CharacterDatabaseInfo = "127.0.0.1;3306;trinity;STRONG_PASS;characters"
Первый запуск worldserver и импорт TDB
Первый запуск создаст таблицы auth/characters и запросит дамп мира (TDB).
cd /home/wow/server/bin
./worldserver
Скачайте именно ту версию TDB, которую запросит сервер (имя будет похоже на
TDB_full_world_335.xxxxx_*.sql или архив .7z), распакуйте рядом с worldserver и запустите снова.
cd /home/wow/server/bin
7z x TDB_full_world_335.xxxxx_*.7z
./worldserver
Если нужна поддержка NPCBot: добавляем таблицы
Иногда сборка SP содержит NPCBot, но таблиц в БД нет. В таком случае после импорта TDB сервер ругнётся на отсутствие таблиц.
Таблицы создаются SQL-скриптами из исходников.
Собираем общий SQL-файл для characters и world.
cd /home/wow/TrinityCore-Single-Player/sql/Bots
sh ./merge_sqls_characters_unix.sh
sh ./merge_sqls_world_unix.sh
ls
Заливаем в базы.
sudo mariadb characters < ALL_characters.sql
sudo mariadb world < ALL_world.sql
Тестовый запуск authserver и worldserver
Запускаем в двух терминалах от пользователя wow.
sudo -iu wow
cd /home/wow/server/bin
Auth сервер:
./authserver
World сервер:
./worldserver
Если видите приглашение TC>, сервер мира поднялся корректно.
Автозапуск через systemd (вариант со screen)
Ниже — рабочий вариант автозапуска через systemd, где процессы запускаются от пользователя wow внутри screen.
Это удобно для домашнего сервера: можно подключаться к живой консоли в любой момент.
Unit для authserver
sudo nano /etc/systemd/system/tc-authserver.service
[Unit]
Description=TrinityCore Auth Server
After=network.target mariadb.service
[Service]
Type=forking
WorkingDirectory=/home/wow/server/bin
User=wow
ExecStart=/usr/bin/screen -dmS tc-authserver /home/wow/server/bin/authserver
ExecStop=/usr/bin/pkill -f --signal 15 tc-authserver
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
Unit для worldserver
sudo nano /etc/systemd/system/tc-worldserver.service
[Unit]
Description=TrinityCore World Server
After=network.target mariadb.service
[Service]
Type=forking
WorkingDirectory=/home/wow/server/bin
User=wow
ExecStart=/usr/bin/screen -dmS tc-worldserver /home/wow/server/bin/worldserver
ExecStop=/usr/bin/screen -S tc-worldserver -p 0 -X stuff "server shutdown force 0\r"
Restart=always
RestartSec=10s
[Install]
WantedBy=multi-user.target
Активируем и запускаем.
sudo systemctl daemon-reload
sudo systemctl enable tc-authserver.service
sudo systemctl enable tc-worldserver.service
sudo systemctl start tc-authserver.service
sudo systemctl status tc-authserver.service
sudo systemctl start tc-worldserver.service
sudo systemctl status tc-worldserver.service
Подключение к консолям.
sudo -iu wow
screen -r tc-authserver
screen -r tc-worldserver
Выход из screen без остановки: CTRL+a, затем d.
Проверка портов и потребления памяти
Проверяем, что сервисы слушают порты 3724 (auth) и 8085 (world).
ss -tulpen | grep -E '3724|8085'
Смотрим память процессов.
ps -eo pid,vsz,rss,comm | grep -E 'authserver|worldserver'
Создаём аккаунт и настраиваем realmlist
Подключаемся к консоли worldserver.
sudo -iu wow
screen -r tc-worldserver
Создаём аккаунт.
account create trinity sUperp@ss
Выдаём GM-права.
account set gmlevel trinity 3 -1
В клиенте редактируем realmlist.wtf и указываем IP сервера.
set realmlist 192.168.1.155
Готово: запускаете WoW 3.3.5 и логинитесь под созданным аккаунтом.