servers:games:trinitycore_3.3.5
Table of Contents
Information
Prerequisites
Notes
As of 2022/09/30, these notes were tested on F36 up until the systemd scripts; TODO: fix them
Do not use Warmane's WotLK client for content extraction nor to play with as it's modified and fails if
authserver.conf/StrictVersionCheck = 1
- WoWDL has a clean 3.3.5 client
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 also for WAN
- 8085/tcp is worldserver and needs forwarded from the router also for 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
- TDB335.21121
- Check https://github.com/TrinityCore/TrinityCore/releases for updates
Make certain the database is
335
, and not927
or etcDo 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.22101/TDB_full_world_335.22101_2022_10_17.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 compileFor 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 Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && 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 Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && ./'mapextractor' -f '0' && sync
VMaps
Extract
Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && ./'vmap4extractor' -l && sync
Assemble
Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && mkdir -p 'vmaps' && ./'vmap4assembler' 'Buildings' 'vmaps' && sync
MMaps
Run on the machine doing the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && mkdir -p 'mmaps' && ./'mmaps_generator' --bigBaseUnit 'true' --threads $(nproc) && sync
Archive Content
- Should be around 1.5GB
Run on the machine that did the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && tar -cvzf ~/'Downloads/WotLK-content-'$(date +%Y-%m-%d)'.tar.gz' 'dbc' 'maps' 'vmaps' 'mmaps' 'Cameras' && cd ~ && sync
Transfer Content to Server
- Should be around 3.6GB
Run on the machine that did the content extraction
cd ~/'Wine Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && 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 Prefixes/World of Warcraft 3.3.5/drive_c/Program Files/World of Warcraft' && 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
Settings
authserver
Copy
sudo su 'trinity' -s '/usr/bin/bash'
cp ~/'Projects/trinity-335/run/etc/authserver.conf.dist' ~/'Projects/trinity-335/run/etc/authserver.conf'
Settings
sudo su 'trinity' -s '/usr/bin/bash'
nano ~/'Projects/trinity-335/run/etc/authserver.conf'
WrongPass.MaxCount = 5 WrongPass.BanTime = 0 StrictVersionCheck = 1 LoginDatabaseInfo = ".;/var/lib/mysql/mysql.sock;authserver;x;authserver" Updates.EnableDatabases = 1 Updates.CleanDeadRefMaxCount = -1
worldserver
Copy
sudo su 'trinity' -s '/usr/bin/bash'
cp ~/'Projects/trinity-335/run/etc/worldserver.conf.dist' ~/'Projects/trinity-335/run/etc/worldserver.conf'
Settings
sudo su 'trinity' -s '/usr/bin/bash'
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" MaxCoreStuckTime = 10 CleanCharacterDB = 1 PersistentCharacterCleanFlags = 14 RealmZone = 2 StrictPlayerNames = 1 StrictCharterNames = 1 StrictPetNames = 1 DBC.Locale = 0 Instance.IgnoreRaid = 1 Quests.LowLevelHideDiff = -1 Motd = "Welcome to the Realm of Espionage World of Warcraft server!" Server.LoginInfo = 1 BirthdayTime = 1170471600 Updates.CleanDeadRefMaxCount = -1 Warden.Enabled = 0 PreserveCustomChannels = 0 Ra.Enable = 1 PacketSpoof.Policy = 0
Production
Warden.Enabled = 1 Warden.ClientCheckFailAction = 2 SOAP.Enabled = 1 SOAP.IP = "0.0.0.0" PreventRenameCharacterOnCustomization = 1 PacketSpoof.Policy = 2 PacketSpoof.BanMode = 2 AntiCheat.PendingMoveChangesTimeoutTime = 3000
Create GM Account
- Starting the
worldserver
by itself and first is intentional
sudo su 'trinity' -s '/usr/bin/bash'
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
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
If running a LAN server, change
wow.realmofespionage.xyz
to LAN IP
sudo mysql
UPDATE `authserver`.`realmlist` SET `name` = 'RoE (WotLK)', `address` = 'wow.realmofespionage.xyz' WHERE `realmlist`.`id` = 1;
Two-Factor Authentication
- 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
mysql -u root -p
UPDATE `authserver`.`account` SET `token_key` = 'x' WHERE `account`.`id` = 1
SOAP
- TODO: Re-figure out how SOAP works
Services
authserver
Service
sudo -e '/etc/systemd/system/tc-335-auth.service' && sudo systemctl daemon-reload && sudo systemctl enable 'tc-335-auth'
[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
SELinux
May have to re-run this series of commands over-time
sudo setenforce 0
sudo systemctl start 'tc-335-auth' && sudo systemctl status 'tc-335-auth' -l
mkdir -p ~/'policies' && cd ~/'policies' && sudo grep 'authserver' '/var/log/audit/audit.log' | sudo audit2allow -M 'authserver' && sudo semodule -i 'authserver.pp' && cd ~
sudo setenforce 1
nano ~/'policies/authserver.te'
worldserver
Make sure worldserver's Console is disabled before starting the
worldserver
service (see configuration)
Service
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
SELinux
May have to re-run this series of commands over-time
sudo setenforce 0
sudo systemctl start 'tc-335-world' && sudo systemctl status 'tc-335-world' -l
mkdir -p ~/'policies' && cd ~/'policies' && sudo grep 'worldserver' '/var/log/audit/audit.log' | sudo audit2allow -M 'worldserver' && sudo semodule -i 'worldserver.pp' && cd ~
sudo setenforce 1
nano ~/'policies/worldserver.te'
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
Everything below this line may need re-factored and isn't tested with the updated notes as of 2019/02/19
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
mysqldump -u 'root' -p --defaults-extra-file='/var/lib/mysql/auth/authserver' --single-transaction 'authserver' -r ~/'authserver-database-manual-'$(date +%Y-%m-%d)'.sql' && sync
mysqldump -u 'root' -p --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
mysql -u 'root' -p
DROP DATABASE authserver;
DROP DATABASE characters;
FLUSH TABLES;
Re-create Databases
mysql -u 'root' -p
CREATE DATABASE authserver;
CREATE DATABASE characters;
Restore Database
mysql -u 'root' -p 'authserver' < ~/'authserver-database-'*'.sql' && sync
mysql -u 'root' -p 'characters' < ~/'characters-database-'*'.sql' && sync
Reapply Permissions
mysql -u 'root' -p
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 will also require a Linux OS to run on
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/games/trinitycore_3.3.5.txt · Last modified: 2022/11/25 14:34 by Sean Rhone