This post provides an in-depth tutorial on how to install and configure a Vanilla, or Classic, World of Warcraft server. Yeah, I know… this is not exactly an Old School RuneScape (OSRS) topic, but I think that it may be interesting to readers who are excited about the prospect of WoW Classic. I personally started playing WoW sometime in mid-2005. Shortly after the release of the Hunter skill in RS2, I jumped ship from RuneScape 2 - as I was unhappy with the direction of the game. This was 6 months or so before the Burning Crusade launched. I didn’t come back to RuneScape until OSRS was released - although I didn’t even know it was released until 2016!
I embarked on creating my own WoW Vanilla server because I wanted some in-game practice before the official Blizzard servers launched. This gave me the opportunity to try every class from both fractions! Having your own server also allows you to use GM commands to change things like your level, talents, skills, and gold - so the possibilities are endless! This allowed me to try different classes, skills and various talent builds. I also used it to practice solo farming dungeons. Overall, it was much better for “training” than other private servers. However, it really feels like an empty world as you will be the only one in it! And it does require quite a lot of skill to get a server running - but hopefully, this tutorial will help.
There are many projects available for implementing a Vanilla WoW server. I decided to use Continued MaNGOS (cMaNGOS for short) as my solution to build a server. After a little research, I decided this was the most suitable option for me - as it is well documented and stable. The cMaNGOS GitHub has great installation instructions and excellent general documentation. This tutorial follows the cMaNGOS Installation Intructions but tailors it to Ubuntu Linux, and adds additional discussion and bits of information I learned along the way.
This post is a part one of a two-part series:
I am assuming you have a Linux install somewhere. I used an old machine I had laying around to run the server. However, I have also installed the cMaNGOS server in a virtualized environment (on VMWare Workstation) which ran pretty well. The server has pretty modest requirements, and doesn’t need much grunt if you are the only one using the server. The following list documents the setup and configuration information you need for this tutorial:
To start, make sure you update the system packages to get the newest versions available.
The next thing to do is install all the required packages to build cMaNGOS. These are documented on the cMaNGOS GitHub wiki and I have tested them on Ubuntu Server 16.04. Execute the following command to install all required packages.
During installation you should be prompted to set a password for the MySQL server for the
root account, however, this varies between Ubuntu and MySQL versions. If a dialog box for setting the password is not displayed, you will need to manually run the
mysql_secure_installation tool after the packages have finished installing (make sure to use
sudo when running the command). Instead of providing lengthy instructions here, I would recommend reading the official
mysql_secure_installation documentation in the MySQL Reference Manual. Make sure you set a MySQL root password, as during the cMaNGOS installation you will need this password.
This concludes configuring your Ubuntu Server system for the WoW Vanilla installation.
To start, I recommend creating a base directory to store all files and data for your WoW Vanilla server. I have set up a dedicated directory called
wow that resides in my users home directory. The remainder of this tutorial uses this structure, and I recommend following it if you are not comfortable changing the file system paths specified in this tutorial. To be specific, my server install is in the following directory:
/home/manager/wow/. This location can also be called using:
~/wow/. This is because the tilde character (
~) refers to the home directory of the logged in user - so if your username is
batman and you make a directory called
wow in your home folder, the notation of
~/wow will be the same for your user as it is for mine. The remainder of this tutorial provides commands that use the
~/wow location, so you will need to update these commands if you want to install the server elsewhere.
Start by making sure you are in your home directory, then create a folder for all server content called
wow. This is achieved using the following commands:
After creating the base directory for all content, we are going to download the cMaNGOS server code and data from their GitHub repository. This is the source code required to power the server and link together the art assets (player models, npc models, environment models etc.) and database code (item information, npc information etc.). First, download the core Vanilla (Classic) core code using the following command:
Now, download the Vanilla (Classic) database. As briefly mentioned, this repository contains all the data about the Vanilla server including item information (e.g., item bonuses) and npc information (e.g., hit points).
If you list the current directory you are in, you should see the following folders storing the data from the git repositories that we downloaded:
Next, we want to prepare the core source code (
mangos-classic) to be built (compiled) and installed on our Ubuntu Server system. Start by changing into the core source code directory and creating a new directory called
build. The following commands will get this done.
At this point, we can make a selection of unique configurations for the cMaNGOS server we are going to build. To set the build configurations we use the
cmake tool, the same tool we use to actually build (compile) the core server code. Below is a summary of the options that are available.
Some of these options are really important, and some of these are enabled by default. The basic things we require are
BUILD_LOGIN_SERVER to power our server and allow the game to run and players to log on (these are enabled by default). We should also set
BUILD_EXTRACTORS to be on, so we can build the extraction tools to extract art assets from the game client (discussed later). We should also set the
CMAKE_INSTALL_PREFIX so that we install the server to a specific file system location. Finally, I like to enable
BUILD_PLAYERBOT so that I can spawn some bots to play with (where you might require an additional player that is controlled by the computer, such as a dungeon when you are solo playing on your own server). If you want the same configurations as me, run the following
As a quick summary:
-DCMAKE_INSTALL_PREFIX=\../run: Install the server to the
rundirectory. In this tutorial, it will be in the
-DBUILD_EXTRACTORS=ON: Include tools to extract data from the client (art assets including maps and player/npc models)
-DPCH=1: Build using precompiled headers
-DDEBUG=0: Set debug level to 0 during the build, this means debugging is off. If you have problems during the build phase set this to 1
-DBUILD_PLAYERBOT=ON: Include player bot support
If you do not want player bots, just remove that part of the command. Same with the extraction tools if you do not need them (this means that you have the art assets from a previous server build).
When you are happy with your configuration, run the full
cmake command with the required arguments. You should get some output similar to the example snippet provided below. Make sure you check this for any errors or warnings. It will provide a summary at the bottom of what is going to be built.
When you are ready to proceed, run the
make command with no arguments, as specified below:
Depending on the capabilities of your system, this process might take a while. When writing this tutorial I built cMaNGOS on a Virtual Machine with 1 CPU and 2GB RAM and it took about 45 mins. On my physical server that has a 4 Core i5 processor and 16GB RAM, the build process took about 15 minutes. Regardless, find something to do for a while and come back later - it gets pretty boring looking a progress bar for any more than 5 minutes!
During the build process, you will see a variety of output when the core server code is being compiled. The output should be similar to the example below.
When done, we need to actually install the compiled code to the
~/wow/mangos-classic/run/ directory. This is easily achieved using the following command.
For your information, the
make install command usually requires
sudo or elevated system privilege, but we are installing to our own home directory which we own and have unrestricted access to, so we do not require elevated permissions.
To be thorough, I have included the output of the
make install command below.
So far we have only built (compiled) and installed the core server code. We still need to perform some server configurations and link together the database and server. To start with we will load the database data and then make some slight server configurations.
Setting up the database is relatively easy as there are a collection of scripts that just need to be run. To start, make sure you are in the root directory of
mangos-classic using the following command.
We will start by importing the contents from the
db_create_mysql.sql file into our own MySQL server database. This
.sql file is relatively simple, it creates the following three databases:
mangos: to store game/server information
characters: to store player character information
realmd: to store information and settings for our server realm (world)
To set up these databases require importing a few
.sql files. The first is
db_create_mysql.sql which creates the databases and sets the permissions. When importing this SQL file, it also creates a user called
mangos that is used to log in to the database and make changes or check database information. There is also a default password of
mangos set for the
mangos user. You can leave this password as the default, but I would recommend changing it. If you want to change the username or password, find the following line in the
You can change the password by changing the
IDENTIFIED BY value. For example, in the example below, I changed the default
mangos password to
sneakfeetpanda. Obviously, this is not my actual password.
If you make this change, you will need to make additional changes later in this tutorial, so make sure you read the later sections carefully. If you also change the default username of
mangos, you will need to change the
'mangos'@'localhost' values in this file, and other
.sql files. I don’t recommend changing the default
mangos username, as you will have to make a lot of other changes later. I did make this change for my server, and it was a bit of a hassle changing additional values.
Now we will import the database file using the following command. Note: you will be required to enter the
root password for the MySQL server that you set at the start of this tutorial. This is not the
mangos password that you just set! We are using the
root password, not the
mangos password! Also, you will be prompted for the password of your user as well, as you are executing this command using
sudo. Make sure you get the passwords entered in the correct order (as asked by the system).
Now we are going to initialize the main MaNGOS database and load all default content. Enter the following command to achieve this. Once again you will have to enter the password for the
root account for the MySQL server.
Still not done! We now need to import the original data for the server. The following command will require you to enter the
root MySQL password three times, as the
for loop loads three SQL files.
We also need to load any fixes that have been specified by the cMaNGOS development team.
Only one thing left to do. Import the characters and realmd database files using the following two commands:
Excellent, we have fully initialized the database. Later in this tutorial, we will discuss how to log in to the database and how to view information or edit information that we might want to change.
Now that we have installed the server and initialized the database we will start configuring our cMaNGOS installation. In this section, we will perform some basic customizations such as database connections for the server, realm name, and realm types.
To start, make sure you are in the run directory.
This directory contains a
bin directory with binaries (executables) to start the server and an
etc directory with configuration files.
etc directory, rename the configuration (
.conf) files so that they can be used when starting the server. The configuration files are shipped with a
.conf.dist file extension, but will not work unless you have a file that only ends in
.conf. So we will just make a copy of the files and remove the
.dist extension in the copying process. This is a good method as it keeps the original
.conf.dist files as a backup.
After this process, you should end of with a total of 6 files in the
run/etc/ directory. You can check that the files actually exist using the folloiwng command:
Before starting on the next step, we will make a specific directory for the server logs. I prefer to keep this in the
run/logs directory - but you could essentially put them anywhere. If you want to keep the exact method specified in this tutorial, run the following command to create a directory for the server log files.
Now we want to edit the realm configuration file and set some useful configuration options. The
realm.conf file contains some basic configuration options. There are comments (lines starting with the
# symbol, which explain the options in detail). I use the
vim editor, but you can also open the text file using
nano. Open the
realmd.conf file using the following command:
The first change we will make is to change the database login information. If you made any modifications to the database when importing (e.g., change the username or password), you will need to change the line named
LoginDatabaseInfo. The default example is provided below.
The only change I have made was the
mangos password. So my database login line is:
When you are finished, save and exit the file.
The next file we will edit is more important. The
mangosd.conf file is over 1500 lines long and has lots of configuration options for your WOW Vanilla server. The documentation embedded in the file is really useful to make sure you understand the options available. I will only discuss some of the more important configurations, but there are much more available. Open the file to edit.
Set the data directory, and make sure to replace the
<username> part with the username of your user. If you are unsure of your username, run the
whoami command on another terminal.
Below is an example of my user (which is named
manager) and the setting I put for my
Next, we will set the logs directory. This will require you make the logs directory first (as specified above). You need to perform a similar configuration change, putting in the absolute path to your specified log file directory. The example of the value I specified for my user is documented below.
You also need to set the database connection information in this file. There are a total of three lines, one for each of the required databases that we initialized earlier.
OK… everything should be set up and ready. However, before we move on we are going to edit one more server configuration option. We are going to set the server type (e.g., Normal, PVP). This is specified by the
GameType option. If you are going to solo play on your server this is not a big deal, but out of habit I always set it to PVP (value of
2), as shown below:
You can change a lot of other server defaults here including player naming conventions, start money for characters, flight paths configuration, server performance settings, logging configuration etc. I would recommend having a good read over the file to see in there are any configurations you want to set. Remember, you can always come back later and modify this file. Make sure you save and exit the file.
OK! So far we have compiled, installed and configured our WoW Vanilla server. We initialized the database, but we did not actually populate the database with any information - such as NPCs and quest information. We will do this now. Start by changing into the directory of the
classic-db repository that we downloaded right at the start of the tutorial.
Run the installation script. On the first run, the script creates a configuration file (called
InstallFullDB.config) that we must edit before running the script again.
Open the automatically generated configuration file.
In the generated configuration file we must edit the password if you used something other than the default
mangos password. For example, using the fictional password I previously used in the tutorial, set the password value to match.
Run the script again. It will use the configuration file this time to load the database provided.
This was pretty much the last step for any database configuration.
Now we are going to extract the client game data from the official WoW 1.12 client. This client is not included in the cMaNGOS GitHub repository as it is copyrighted by Blizzard. I own a version of the original game, so I use my previously installed copy. However, there are a variety of clients floating around the Internet, for example, the Kronos WoW server… but really, you should own your own copy! But I wouldn’t feel too bad about it… if you have previously bought a copy of the original WoW release. Also, this step is not required if you have previously extracted client data!.
In the following instructions,
~/wow-client is the directory that contains the install 1.12 WoW client. Below is an example listing of the contents of my
Start by copying the extractor scripts to the client folder.
Next, we will copy the extractor tools to the client folder.
Move into client folder, and change permissions on extractor scirpt:
Run the extractor script:
Follow the prompts for the ExtractResources script. Basically, you need to select
y to extract everything,
N for the number of processors (I choose
4 as my system has 4 cores), and
Enter to not delay mmap extraction (unless you want to). Make sure you press
Enter at the end to start the process when the following information is presented.
If you do not press
Enter after this line, the extraction process will not start! You can tell it starts are it provides detailed progress of what the script is doing. As a side note, it is recommended to extract
mmaps, but it takes a while (read: it takes forever!). If you are interested in
mmaps, and their importance, the following reference clearly describes their use:
Mmaps are similar (to vmaps) overlays that tell the server where to route creatures and NPCs so that they don't run over top of rocks and fence posts. They aren't technically necessary but they greatly enhance the game experience and there isn't really a good reason not to use them.
Extracting all the client data took 40 minutes on my system - but about 2 hours on my other virtual machine setup. The long time is due to extracting the mmaps - but they are definitely worth it!
When finished, we need to copy all created directories and data from the client extraction scripts to the
~/wow/mangos-classic/run directory. The following command will do this for each of the four (4) extracted types of client data.
As an optional step, you can backup all files extracted from the client for future use. I created a compressed tarball of all the files using the following commands.
This command will create a tarball archive of all the extracted data, and save it in a file called
1.12.1-extracted-client-data.tar.gz in the
~/wow-client directory. Make sure to save it if you ever want to repeat this process again.
DONE! We can pretty much run the game server now. But there are a large number of additional configuration steps available to make managing and running the server much easier! The steps are too long to include in this post, so I have written a second post called Configuring a WoW Vanilla Private Server on Ubuntu Linux.
This post discussed and outlined how to install a WoW Vanilla server on Ubuntu Linux 16.04. The end result is a private server that you host on a Linux system and connect to using the normal WoW 1.12 client. I personally installed a private server on my Linux box on my home network and practiced solo dungeons and tried out the various classes. Basically, I used it to get myself ready for the release of WoW Classic.
The next post in the series continues the journey of creating your own private WoW Vanilla server. Next time we perform various configurations of our server installation such as setting up methods to run the server easily, adding a firewall using
iptables, creating accounts, and adding then using game moderator status and the associated gm commands.