servers:linux:games:trinitycore_3.3.5
Table of Contents
Information
Notes
- 2024/10/30: These notes haven't been re-factored in a while and likely benefit from some more-recent changes on localhost Server notes
Prerequisites
Create Group and User
sudo groupadd 'trinity' && sudo useradd -c 'TrinityCore system account' -d '/var/lib/trinity' -g 'trinity' -m -r 'trinity'
Dependencies
Packages
sudo dnf install bzip2-devel clang cmake git mariadb-devel boost-devel readline-devel
Firewall
- 3724/tcp is loginserver and needs forwarded from the router for both LAN and WAN
- 8085/tcp is worldserver and needs forwarded from the router for both LAN and WAN
- 3443/tcp is Remote Console
- 7878/tcp is SOAP
sudo firewall-cmd --add-port='3724'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='8085'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='3443'/'tcp' --permanent && sudo firewall-cmd --reload
sudo firewall-cmd --add-port='7878'/'tcp' --permanent && sudo firewall-cmd --reload
Download Source
sudo su 'trinity' -s '/usr/bin/bash'
cd ~ && mkdir -p ~/'Projects' && rm -Rf ~/'Projects/trinity-335/src' && git clone --branch '3.3.5' --depth '1' --recurse-submodules 'https://github.com/TrinityCore/TrinityCore.git' ~/'Projects/trinity-335/src' && sync
exit
Databases
Initial
- This creates the
authserver
,characters
, andworldserver
databases
sudo mysql
CREATE DATABASE authserver;
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost' IDENTIFIED BY 'x';
CREATE DATABASE characters;
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost' IDENTIFIED BY 'x';
CREATE DATABASE worldserver;
GRANT ALL PRIVILEGES ON worldserver.* to 'worldserver'@'localhost' IDENTIFIED BY 'x';
FLUSH PRIVILEGES;
EXIT
TDB
- Check https://github.com/TrinityCore/TrinityCore/releases for updates
- Make certain the database is
335
, and not927
or etc - Do this after the initial compile 5)
- TODO: Move this down the page somewhere
sudo su 'trinity' -s '/usr/bin/bash'
rm -Rf '/tmp/TDB' '/tmp/TDB/TDB335.7z' && mkdir -p '/tmp/TDB' && cd ~ && wget -O '/tmp/TDB/TDB335.7z' 'https://github.com/TrinityCore/TrinityCore/releases/download/TDB335.23061/TDB_full_world_335.23061_2023_06_14.7z' && 7za x '/tmp/TDB/TDB335.7z' -o'/tmp/TDB' && mv '/tmp/TDB/TDB_full_world_335'*'.sql' ~/'Projects/trinity-335/run/bin' && rm -Rf '/tmp/TDB' && sync
Compile
- This wipes out the
run
folder, so ideally any extracted content and the full TDB shouldn't be moved there until after this initial compile - For content extraction, Fedora major versions should match between the compiler and extraction machines for Boost libraries 6)
sudo su 'trinity' -s '/usr/bin/bash'
rm -Rf ~/'Projects/trinity-335/build' ~/'Projects/trinity-335/run' && mkdir -p ~/'Projects/trinity-335/build' ~/'Projects/trinity-335/run' && cd ~/'Projects/trinity-335/build' && CC='/usr/bin/clang' CXX='/usr/bin/clang++' cmake ~/'Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX=~/'Projects/trinity-335/run' -DTOOLS='1' && sync && make --jobs=$(nproc) install && sync
exit
Extractors
- Copies
mapextractor
,vmap4extractor
,vmap4assembler
, andmmaps_generator
to/tmp/trinity-extractors
mkdir -p '/tmp/trinity-extractors' && sudo cp '/var/lib/trinity/Projects/trinity-335/run/bin/mapextractor' '/var/lib/trinity/Projects/trinity-335/run/bin/vmap4extractor' '/var/lib/trinity/Projects/trinity-335/run/bin/vmap4assembler' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps_generator' '/tmp/trinity-extractors' && sudo chown -R $USER:$USER '/tmp/trinity-extractors' && sync
Content
Transfer Extractors to Client
- Run on the machine doing the content extraction
- See WoW 3.3.5 installation notes
mkdir -p '/tmp/trinity-extractors' && scp espionage724@192.168.1.152:'/tmp/trinity-extractors/'* '/tmp/trinity-extractors' && mv '/tmp/trinity-extractors/'* ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && sync
Dependencies
- Run on the machine doing the content extraction
sudo dnf install 'boost'
Extract and Generate Content
DBCs, Maps, and Cameras
- Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && ./'mapextractor' -f '0' && sync
VMaps
Extract
- Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && ./'vmap4extractor' -l && sync
Assemble
- Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && mkdir -p 'vmaps' && ./'vmap4assembler' 'Buildings' 'vmaps' && sync
MMaps
- Run on the machine doing the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && mkdir -p 'mmaps' && ./'mmaps_generator' --bigBaseUnit 'true' --threads $(nproc) && sync
Transfer Content to Server
- Should be around 3.6GB
- Run on the machine that did the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && scp -r 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' espionage724@192.168.1.152:~
Cleanup on Client
- Run on the machine that did the content extraction
cd ~/'.wine/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft 3.3.5a.12340'*'/' && rm -Rf 'Buildings' 'Cameras' 'dbc' 'maps' 'vmaps' 'mmaps' && cd ~/'Downloads' && rm -f 'mapextractor' 'vmap4extractor' 'vmap4assembler' 'mmaps_generator' && sync
Move Content on Server
- Moves the
dbc
,maps
,vmaps
,mmaps
, andCameras
folders from the main user's~
into thebin
folder - Run on the machine that is running the server
ls ~/'dbc' ~/'maps' ~/'vmaps' ~/'mmaps' ~/'Cameras' > '/dev/null' && sudo rm -Rf '/var/lib/trinity/Projects/trinity-335/run/bin/dbc' '/var/lib/trinity/Projects/trinity-335/run/bin/maps' '/var/lib/trinity/Projects/trinity-335/run/bin/vmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/Cameras' && cd ~ && sudo mv 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' '/var/lib/trinity/Projects/trinity-335/run/bin' && sudo chown -R 'trinity':'trinity' '/var/lib/trinity/Projects/trinity-335/run/bin/dbc' '/var/lib/trinity/Projects/trinity-335/run/bin/maps' '/var/lib/trinity/Projects/trinity-335/run/bin/vmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/mmaps' '/var/lib/trinity/Projects/trinity-335/run/bin/Cameras' && sync
sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335' && sync
SELinux
sudo semanage fcontext --add --type 'bin_t' '/var/lib/trinity/Projects/trinity-335/run/bin/authserver' && sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335/run/bin/authserver'
sudo semanage fcontext --add --type 'bin_t' '/var/lib/trinity/Projects/trinity-335/run/bin/worldserver' && sudo restorecon -F -I -R '/var/lib/trinity/Projects/trinity-335/run/bin/worldserver'
Settings
authserver
- Last updated: 2023/07/30
- Last commit: Jul 28, 2021
68bf7e6
nano ~/'Projects/trinity-335/run/etc/authserver.conf'
LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver"
worldserver
- Last updated: 2023/07/30
- Last commit: Feb 16, 2023
e11613e
- TODO: Update for
conf.d
nano ~/'Projects/trinity-335/run/etc/worldserver.conf'
LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver" WorldDatabaseInfo = ".;/var/lib/mysql/mysql.sock;worldserver;x;worldserver" CharacterDatabaseInfo = ".;/var/lib/mysql/mysql.sock;characters;x;characters" Quests.LowLevelHideDiff = -1 Motd = "Welcome to the Realm of Espionage World of Warcraft server!" Server.LoginInfo = 1 BirthdayTime = 1170471600
TODO Settings
# Distance Visibility.Distance.Continents = 533 Visibility.Distance.Instances = 533 Visibility.Notify.Period.OnContinents = 250 Visibility.Notify.Period.InInstances = 250
Create GM Account
sudo su 'trinity' -s '/usr/bin/bash'
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/authserver'
- Ctrl + C
cd ~/'Projects/trinity-335/run/bin' && ~/'Projects/trinity-335/run/bin/worldserver'
account create Espionage724 x
account set gmlevel Espionage724 3 -1
server shutdown 1
Other Settings
Disable Console
Config
- This prevents the system log from having unnecessary console spam
- To be done after creating the initial GM account
- Any additional console use should come from
telnet
from a remote machine on the local network - Credentials for the remote console are the same as the GM account created above
- 2023/07/30: TODO:
sed
didn't work as-expected, hence this isn't a one-liner yet
sudo su 'trinity' -s '/usr/bin/bash'
nano ~/'Projects/trinity-335/run/etc/worldserver.conf'
Console.Enable = 0
telnet
telnet '192.168.1.152' '3443'
server shutdown 1
Realm Information
- To be done after databases are initialized
- Applies to the first realm
sudo mysql
UPDATE `authserver`.`realmlist` SET `name` = 'RoE (WotLK)', `address` = 'wow.realmofespionage.xyz' WHERE `realmlist`.`id` = 1;
Two-Factor Authentication
- 2023/07/30: This may have different behavior, see
TOTPMasterSecret
in auth and world confs
- To be done after databases are initialized
- Applies to the first account
token_key
must contain and not exceed 16 characters and can only contain characters A-Z and numbers 2-7 7)- Add key to Authenticator app
- Authenticator will be prompted from the game client on each log-in
sudo mysql
UPDATE `authserver`.`account` SET `token_key` = 'x' WHERE `account`.`id` = 1
SOAP
- TODO: Re-figure out how SOAP works
Services
authserver
- 2027/07/30: TODO: Rename the service as
tc-335-auth
isn't rememberable
sudo -e '/etc/systemd/system/tc-335-auth.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-auth' --now
[Unit] Description=TrinityCore 3.3.5 authserver Wants=network-online.target After=network-online.target mysqld.service [Service] Type=simple User=trinity Group=trinity WorkingDirectory=/var/lib/trinity/Projects/trinity-335/run/bin ExecStart='/var/lib/trinity/Projects/trinity-335/run/bin/authserver' -c '/var/lib/trinity/Projects/trinity-335/run/etc/authserver.conf' Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
sudo systemctl status 'tc-335-auth' -l
worldserver
- Make sure worldserver's Console is disabled before starting the
worldserver
service - 2027/07/30: TODO: Rename the service as
tc-335-world
isn't rememberable
sudo -e '/etc/systemd/system/tc-335-world.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-world'
[Unit] Description=TrinityCore 3.3.5 worldserver Wants=network-online.target After=network-online.target mysqld.service [Service] Type=simple User=trinity Group=trinity WorkingDirectory=/var/lib/trinity/Projects/trinity-335/run/bin ExecStart='/var/lib/trinity/Projects/trinity-335/run/bin/worldserver' -c '/var/lib/trinity/Projects/trinity-335/run/etc/worldserver.conf' Restart=always RestartSec=5 [Install] WantedBy=multi-user.target
sudo systemctl status 'tc-335-world' -l
Information
- Explanation of the update process and following services
- Pull-in updated sources and compile TC (1:00)
- Stop TC auth and world services (3:00)
- Install updated-compiled TC (3:02:30)
- Start TC auth and world services (3:05)
Updater
Service
- Change
make --jobs=2
as-needed
sudo -e '/etc/systemd/system/tc-335-up.service'
[Service] User=trinity Group=trinity Type=oneshot WorkingDirectory=/var/lib/trinity/Projects/trinity-335/build Environment='CC=/usr/bin/clang' Environment='CXX=/usr/bin/clang++' ExecStartPre='/usr/bin/make' clean ExecStartPre='/usr/bin/git' -C '/var/lib/trinity/Projects/trinity-335/src' pull origin '3.3.5' ExecStartPre='/usr/bin/sync' ExecStart='/usr/bin/cmake' '/var/lib/trinity/Projects/trinity-335/src' -DCMAKE_INSTALL_PREFIX='/var/lib/trinity/Projects/trinity-335/run' -DTOOLS='1' ExecStart='/usr/bin/make' --jobs='2' ExecStartPost='/usr/bin/sync'
Timer
- Every day at
01:00:00
sudo -e '/etc/systemd/system/tc-335-up.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-up.timer' --now
[Unit] Description=TrinityCore 3.3.5 Git Updater and Compiler Wants=network-online.target After=network-online.target [Timer] OnCalendar=*-*-* 01:00:00 Persistent=true [Install] WantedBy=timers.target
Stopper
Service
sudo -e '/etc/systemd/system/tc-335-stop.service'
[Service] Type=oneshot ExecStart='/usr/bin/systemctl' stop 'tc-335-auth' ExecStart='/usr/bin/systemctl' stop 'tc-335-world' ExecStartPost='/usr/bin/sync'
Timer
- Every day at
03:00:00
sudo -e '/etc/systemd/system/tc-335-stop.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-stop.timer' --now
[Unit] Description=TrinityCore 3.3.5 Services Stopper Wants=network-online.target mysqld.service After=network-online.target [Timer] OnCalendar=*-*-* 03:00:00 Persistent=true [Install] WantedBy=timers.target
Post-updater
Service
sudo -e '/etc/systemd/system/tc-335-up-post.service'
[Service] User=trinity Group=trinity Type=oneshot WorkingDirectory=/var/lib/trinity/Projects/trinity-335/build ExecStart='/usr/bin/make' install ExecStartPost='/usr/bin/sync'
Timer
- Every day at
03:02:30
sudo -e '/etc/systemd/system/tc-335-up-post.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-up-post.timer' --now
[Unit] Description=TrinityCore 3.3.5 Post-Updater Wants=network-online.target After=network-online.target [Timer] OnCalendar=*-*-* 03:02:30 Persistent=true [Install] WantedBy=timers.target
Restarter
Service
sudo -e '/etc/systemd/system/tc-335-restart.service'
[Service] Type=oneshot ExecStart='/usr/bin/systemctl' start 'tc-335-auth' ExecStart='/usr/bin/systemctl' start 'tc-335-world' ExecStartPost='/usr/bin/sync'
Timer
- Every day at
03:05:00
sudo -e '/etc/systemd/system/tc-335-restart.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-restart.timer' --now
[Unit] Description=TrinityCore 3.3.5 Services Restarter Wants=network-online.target mysqld.service After=network-online.target [Timer] OnCalendar=*-*-* 03:05:00 Persistent=true [Install] WantedBy=timers.target
Database Backup
- This backs up an archive to the local disk
authserver
Database Auth
sudo -H -u 'mysql' -e '/var/lib/mysql/auth/authserver' && sudo chmod '600' '/var/lib/mysql/auth/authserver'
[mysqldump] user=authserver password=x
Service
mkdir -p ~/'backups' && sudo -H -u 'mysql' mkdir -p '/var/lib/mysql/tmp' && sudo -e '/etc/systemd/system/authserver-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/authserver-db.service'
[Service] Type=oneshot WorkingDirectory=/var/lib/mysql/tmp ExecStartPre='/usr/bin/mysqldump' --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r '/var/lib/mysql/tmp/authserver.sql' ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/authserver.sql' ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/authserver.sql.gz" "/home/CHANGEME/backups/authserver-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"' ExecStartPost='/usr/bin/sync'
Timer
- This happens daily
sudo -e '/etc/systemd/system/authserver-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'authserver-db.timer' --now && sudo systemctl start 'authserver-db' && sudo systemctl status 'authserver-db' -l
[Unit] Description=TrinityCore (authserver) Database Backup After=mysqld.service [Timer] OnCalendar=*-*-* 03:40:00 Persistent=true [Install] WantedBy=timers.target
characters
Database Auth
sudo -H -u 'mysql' -e '/var/lib/mysql/auth/characters' && sudo chmod '600' '/var/lib/mysql/auth/characters'
[mysqldump] user=characters password=x
Service
mkdir -p ~/'backups' && sudo -H -u 'mysql' mkdir -p '/var/lib/mysql/tmp' && sudo -e '/etc/systemd/system/characters-db.service' && sudo sed -i 's/'CHANGEME'/'$USER'/g' '/etc/systemd/system/characters-db.service'
[Service] Type=oneshot WorkingDirectory=/var/lib/mysql/tmp ExecStartPre='/usr/bin/mysqldump' --defaults-extra-file='/var/lib/mysql/auth/characters' --single-transaction 'characters' -r '/var/lib/mysql/tmp/characters.sql' ExecStart='/usr/bin/gzip' -f '/var/lib/mysql/tmp/characters.sql' ExecStart='/usr/bin/bash' -c '"/usr/bin/mv" "/var/lib/mysql/tmp/characters.sql.gz" "/home/CHANGEME/backups/characters-database-auto-"$$(date +%%Y-%%m-%%d)".sql.gz"' ExecStartPost='/usr/bin/sync'
Timer
- This happens daily
sudo -e '/etc/systemd/system/characters-db.timer' && sudo systemctl daemon-reload && sudo systemctl enable 'characters-db.timer' --now && sudo systemctl start 'characters-db' && sudo systemctl status 'characters-db' -l
[Unit] Description=TrinityCore (characters) Database Backup After=mysqld.service [Timer] OnCalendar=*-*-* 03:41:00 Persistent=true [Install] WantedBy=timers.target
Backup
- Create backup archive on server and transfer to client computer
Server
Stop Services
sudo systemctl stop authserver worldserver
Backup Database
sudo mysqldump --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r ~/'authserver-database-manual-'$(date +%Y-%m-%d)'.sql' && sync
sudo mysqldump --defaults-extra-file='/var/lib/mysql/auth/characters' --single-transaction 'characters' -r ~/'characters-database-manual-'$(date +%Y-%m-%d)'.sql' && sync
Start Services
sudo systemctl start authserver worldserver
Client
Transfer Files To Client
scp espionage724@192.168.1.152:~/'authserver-database-'*'.sql' espionage724@192.168.1.152:~/'characters-database-'*'.sql' ~/'Downloads' && sync
Restore
Client
Uncompress Database
- This is only needed if restoring an automated database backup 8)
gunzip ~/'Downloads/authserver-database-'*'.sql.gz'
gunzip ~/'Downloads/characters-database-'*'.sql.gz'
Transfer Files To Server
scp ~/'Downloads/authserver-database-'*'.sql' ~/'Downloads/characters-database-'*'.sql' espionage724@192.168.1.152:~
Remove Files
rm -f ~/'Downloads/authserver-database-'*'.sql' ~/'Downloads/characters-database-'*'.sql' && sync
Server
Stop Services
sudo systemctl stop authserver worldserver
Drop Previous Database
sudo mysql
DROP DATABASE authserver;
DROP DATABASE characters;
FLUSH TABLES;
Re-create Databases
sudo mysql
CREATE DATABASE authserver;
CREATE DATABASE characters;
Restore Database
sudo mysql 'authserver' < ~/'authserver-database-'*'.sql' && sync
sudo mysql 'characters' < ~/'characters-database-'*'.sql' && sync
Reapply Permissions
sudo mysql
GRANT ALL PRIVILEGES ON authserver.* to 'authserver'@'localhost' IDENTIFIED BY 'x';
GRANT ALL PRIVILEGES ON characters.* to 'characters'@'localhost' IDENTIFIED BY 'x';
FLUSH PRIVILEGES;
Start Services
sudo systemctl start authserver worldserver
Remove Backups
- Verify that TrinityCore works before running
rm ~/'authserver-database-'*'.sql' ~/'characters-database-'*'.sql' && sync
3)
WoW
realmlist.wtf
4)
required for content extraction, and since the core and tools are compiled on Linux the extraction tools also require Linux
5)
the compile command below wipes out the
run
folder if it exists before compiling6)
can use
LD_LIBRARY_PATH=.
for all the extraction commands, and copy the requested .so
library files from downloaded packages into the WoW folder7)
in other words,
token_key
requires a 16-character Base32 string8)
manual doesn't gzip
/var/www/wiki/data/pages/servers/linux/games/trinitycore_3.3.5.txt · Last modified: by Sean Rhone