VMaNGOS Server Setup Guide

Assumed information:

User: thrall
OS: Debian 11 or 12
For managing the server after installation check out this script!
Credits to Digital Scriptorium for the original guide!

1. Granting sudo Privileges

First, ensure that the system has sudo installed.

su -
apt update && apt install sudo -y

Then, add the user thrall to the sudoers file:

sudo EDITOR=nano visudo

Add the following line at the bottom:

thrall ALL=(ALL) ALL

Save and exit. (Control+X then type y)

2. Disabling Automatic Updates

To prevent automatic updates that might interfere with the server:

sudo systemctl stop apt-daily.timer
sudo systemctl disable apt-daily.timer

3. Core Setup

Install essential dependencies:

sudo apt update
sudo apt install g++ git cmake openssl libssl-dev build-essential checkinstall zlib1g-dev mariadb-server mariadb-client libmariadb-dev libmariadb-dev-compat libreadline-dev p7zip-full -y

sudo apt install -qq libace-dev -y
export ACE_ROOT=/usr/include/ace

sudo apt install -y libtbb-dev -y
export TBB_ROOT_DIR=/usr/include/tbb

Clone the necessary repositories:

sudo mkdir /opt/vmangos
cd /opt/vmangos
sudo git clone -b development https://github.com/vmangos/core
sudo git clone https://github.com/brotalnia/database vmangos/db

Compile and intsall:

sudo mkdir /opt/build
cd /opt/build
sudo cmake /opt/vmangos/core -DSUPPORTED_CLIENT_BUILD=5875 -DUSE_EXTRACTORS=0 -DCMAKE_INSTALL_PREFIX=/opt/vmangos

sudo make -j $(nproc) install

4. Downloading and Extracting Data

cd /opt/
sudo wget https://www.mediafire.com/file_premium/j6cyqjeif3dvrv2/data.7z
sudo 7z x data.7z ; sudo chmod -R 755 data
sudo rm -r data.7z

5. Configuration

Copy configuration files and create log directories:

sudo cp /opt/vmangos/etc/mangosd.conf.dist /opt/vmangos/etc/mangosd.conf
sudo cp /opt/vmangos/etc/realmd.conf.dist /opt/vmangos/etc/realmd.conf

sudo mkdir /opt/vmangos/logs
sudo mkdir /opt/vmangos/logs/mangosd
sudo mkdir /opt/vmangos/logs/realmd
sudo mkdir /opt/vmangos/logs/honor

Edit Config Files

sudo nano /opt/vmangos/etc/mangosd.conf

Set the paths:

/opt/data
/opt/vmangos/logs/mangosd
/opt/vmangos/logs/honor
sudo nano /opt/vmangos/etc/realmd.conf

Set the path:

/opt/vmangos/logs/realmd

6. Check MariaDB Service State

Check if the MariaDB service is running:

systemctl status mariadb

Press q to exit.

7. Secure MySQL Installation

sudo mysql_secure_installation

Follow the prompts:

Hit Enter

N for Unix Socket
Y to Change root password
Y to Remove anonymous users
Y to Disallow root login remotely
Y to Remove the test database
Y to Reload privilege table

8. Creating SQL Databases and Permissions

sudo mysql -u root -p

Run the following SQL commands:

DROP USER IF EXISTS 'mangos'@'localhost';
CREATE USER 'mangos'@'localhost' IDENTIFIED BY 'mangos';
GRANT ALL PRIVILEGES ON *.* TO 'mangos'@'localhost' WITH GRANT OPTION;

CREATE DATABASE `realmd` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci;
CREATE DATABASE `mangos` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci;
CREATE DATABASE `characters` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci;
CREATE DATABASE `logs` DEFAULT CHARACTER SET UTF8MB4 COLLATE utf8mb4_general_ci;

GRANT ALL PRIVILEGES ON `realmd`.* TO 'mangos'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `mangos`.* TO 'mangos'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `characters`.* TO 'mangos'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `logs`.* TO 'mangos'@'localhost' WITH GRANT OPTION;

Exit MySQL:

exit

9. Populating SQL Databases with Data

cd /opt/vmangos/vmangos/db/
sudo 7z x world_full_14_june_2021.7z
mysql -u mangos -pmangos --database=mangos < world_full_14_june_2021.sql
cd /opt/vmangos/core/sql/
mysql -u mangos -pmangos --database=characters < characters.sql
mysql -u mangos -pmangos --database=logs < logs.sql
mysql -u mangos -pmangos --database=realmd < logon.sql

10. Altering Tables to Allow NULL

sudo mysql -u root -p

Run the following SQL commands:

USE mangos;
ALTER TABLE locales_item
MODIFY COLUMN name_loc1 VARCHAR(100) NULL DEFAULT '' COLLATE 'utf8_general_ci',
MODIFY COLUMN name_loc2 VARCHAR(100) NULL DEFAULT '' COLLATE 'utf8_general_ci';

USE realmd;
INSERT INTO `realmlist` VALUES ('1','RealmName', '192.168.X.X', '127.0.0.1', '255.255.255.0', '1', '2', '5875 6005 6141');

Exit MySQL:

exit

11. Updating SQL Data

cd /opt/vmangos/core/sql/migrations
sudo ./merge.sh
mysql -u mangos -pmangos --database=mangos < world_db_updates.sql
mysql -u mangos -pmangos --database=logs < logs_db_updates.sql
mysql -u mangos -pmangos --database=characters < characters_db_updates.sql
mysql -u mangos -pmangos --database=realmd < logon_db_updates.sql

12. Starting the Server

sudo /opt/vmangos/bin/realmd
sudo /opt/vmangos/bin/mangosd

13. Updating the Server

cd /opt/vmangos/core
sudo git config pull.rebase false
sudo git pull
cd /opt/build
sudo cmake /opt/vmangos/core -DSUPPORTED_CLIENT_BUILD=5875 -DUSE_EXTRACTORS=0 -DCMAKE_INSTALL_PREFIX=/opt/vmangos
sudo make -j $(nproc) install
cd /opt/vmangos/core/sql/migrations
sudo ./merge.sh
mysql -u mangos -pmangos --database=mangos < world_db_updates.sql
mysql -u mangos -pmangos --database=logs < logs_db_updates.sql
mysql -u mangos -pmangos --database=characters < characters_db_updates.sql
mysql -u mangos -pmangos --database=realmd < logon_db_updates.sql

14. Restarting the Server

sudo /opt/vmangos/bin/realmd
sudo /opt/vmangos/bin/mangosd