This guide walks you through compiling, installing, and running an EverQuest II Emulator server on Linux.
- MariaDB Server (MySQL is not supported)
- GCC 8 or newer (required for compilation)
Ensure MariaDB is installed and running before continuing.
-
Download the Linux compile script:
wget https://raw.githubusercontent.com/dlukt/eq2emu/main/linux_compile.sh
-
Edit configuration (optional):
LOG_FILE– Path for build logs (defaults to current directory)EQ2EMU_HOME_DIR– Base installation path (defaults to/home/eq2emu)
-
Run the script:
bash -x linux_compile.sh
This will build and install all required binaries.
The server will not start until the game database is populated.
-
Get the latest SQL dumps for:
- World database (
eq2emu.sql) - Login database (
eq2emuls.sql)
- World database (
-
Create two databases:
CREATE DATABASE eq2emu; CREATE DATABASE eq2ls;
-
Import SQL data:
USE eq2emu; SOURCE LOCATIONOFSQL_UPDATES/eq2emu.sql; USE eq2ls; SOURCE LOCATIONOFSQL_UPDATES/eq2emuls.sql;
-
Create a dedicated user:
CREATE USER 'eq2emu'@localhost IDENTIFIED BY 'eq2emu'; GRANT ALL PRIVILEGES ON *.* TO 'eq2emu'@localhost IDENTIFIED BY 'eq2emu';
Inside:
/home/eq2emu/eq2emu/server/
[Database]
host=localhost
user=eq2emu # your DB user
password=eq2emu # your DB password
database=eq2ls[Database]
host=127.0.0.1
user=eq2emu # your DB user
password=eq2emu # your DB password
database=eq2emu{
"LoginServer": {
"loginserver": "127.0.0.1",
"loginport": "9100",
"worldname": "TestLabs",
"worldaddress": "127.0.0.1",
"internalworldaddress": "127.0.0.1",
"worldport": "9001",
"locked": "false",
"account": "testlabs",
"password": "testpass"
},
"WorldServer": {
"Defaultstatus": "0",
"webaddress": "",
"webport": "",
"webcertfile": "",
"webkeyfile": "",
"webhardcodeuser": "",
"webhardcodepassword": ""
},
"LoginConfig": {
"ServerMode": "StandAlone",
"ServerPort": "9100",
"AccountCreation": "1",
"webloginaddress": "",
"webloginport": "",
"webcertfile": "",
"webkeyfile": "",
"webhardcodeuser": "",
"webhardcodepassword": ""
}
}Replace:
- loginserver – IP of login server (e.g.
127.0.0.1) - worldname – Your in-game server name
- worldaddress/internalworldaddress – IP of world server
- account/password – Server account credentials
USE eq2ls;
INSERT INTO login_worldservers
SET note='',
description='',
name='$WORLD_NAME',
account='$WORLD_ACCOUNT_NAME',
password=SHA2('$WORLD_ACCOUNT_PASSWORD',512);Replace the variables:
$WORLD_NAME– Your chosen server name$WORLD_ACCOUNT_NAME–accountvalue fromserver_config.json$WORLD_ACCOUNT_PASSWORD–passwordvalue fromserver_config.json
Both executables must run:
./login &
./eq2world &Or using screen:
screen -d -m ./login
screen -d -m ./eq2worldTo stay current:
-
Update source code:
git pull
-
Rebuild and copy binaries to your server location.
-
Apply the latest SQL updates.
Optional automation script:
wget -cO - https://www.dropbox.com/s/32qqmmviblulhwl/updater.sh?dl=1 > updater.sh
chmod +x updater.sh
./updater.shThen apply new SQL files found in SQL_UPDATES.
| Issue | Solution |
|---|---|
cc1plus: error: -Werror=class-memaccess |
Use GCC 8 or newer (gcc -v to check). |
mysql.h missing |
Install libmariadb-dev or edit Makefile: -I/usr/include/mysql in COPTS=$(WFLAGS). |
lmariadbclient missing |
In Makefile, replace -lmariadbclient with -lmysqlclient. |
undefined reference to WorldDatabase::LoadRuleSets() |
Run make clean then make again. |
fmt/format.h not found |
Edit EQ2EMu/EQ2/source/common/string_util.h: change #include <fmt/format.h> → #include <../depends/fmt/include/fmt/format.h>. |
- Compile with the provided script
- Populate both
eq2emuandeq2lsdatabases - Configure the
.iniand.jsonfiles - Run
./loginand./eq2world
Your EQ2Emu server should now be up and running on Linux.