Allods Developers Community

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

[4.0.02.42] start your first production allods server on linux (ubuntu server 16.04)

Сорок два

Administrator
Staff member
Admin
Content Creator
Guide Author
Seller
Premium
ADC Launcher Users
ALLODS ONLINE 4.0.02.42
Complete Server Installation and Operations Guide
Server revision 390809 / data revision 391095 — client network version 8455
​

About this guide

This guide replaces the unfinished installation notes originally published in 2020. It documents the historical Allods Online 4.0.02.42 server package using a current, reproducible Windows + WSL2 workflow. It covers only the public server package and its matching client.



Read before installing

This is a preserved legacy server, not a modern application. It requires its bundled Java 7 runtime, legacy MySQL/PostgreSQL compatibility, version-matched game data and a client using network version 8455. Do not replace components with files from 3.0, 4.0.01, 4.0.03, 4.2 or another branch merely because their names look similar.



Contents​

  • 1. What changed since the 2020 guide
  • 2. Package identity and architecture
  • 3. Hardware and software requirements
  • 4. Prepare Windows, WSL2 and Docker
  • 5. Extract and verify the release
  • 6. Understand the directory layout
  • 7. Install and initialize the databases
  • 8. Verify the game resources
  • 9. Configure addresses and service files
  • 10. Start the core server
  • 11. Create an account
  • 12. Configure and launch the client
  • 13. Daily operations and logs
  • 14. Optional Log Server and GameTool
  • 15. Backups and security
  • 16. Troubleshooting
  • 17. 3.0 and 4.0 differences
  • 18. Final validation checklist

1. What changed since the 2020 guide​

The original draft required Ubuntu 16.04, a MATE desktop, XRDP, OpenJDK 7 from an obsolete repository, PostgreSQL 9.3 from the host package manager, Apache, PHP and phpMyAdmin. That approach is no longer recommended.

The modernized approach


  • Use Windows 10/11 with WSL2 and a current Ubuntu distribution.
  • Run the server from the Linux filesystem, for example ~/allods40.
  • Use the Java 7 runtime already included under vendors/Java.
  • Run the legacy databases in isolated Docker containers.
  • Install no graphical desktop on the server.
  • Install no Apache, PHP or phpMyAdmin for the core game server.
  • Keep Log Server and GameTool disabled unless they are explicitly needed.



Do not use the old package commands blindly

Ubuntu 16.04 and its repositories are end-of-life. Commands such as apt install openjdk-7-jdk or apt install postgresql-9.3 are no longer reliable on a current installation. Installing a newer Java release is not an equivalent replacement because this server still uses Java 7-era JVM options and libraries.



2. Package identity and architecture​


PropertyExpected value
Public version4.0.02.42
Runtime revision390809
Game-data revision391095
Client network version8455
Client/account protocol73
Account/frontend protocol48
Bundled JavaOracle Java 1.7.0_03, Linux x64 and x86 builds
Primary game databaseMySQL allods_online_RC_4_0_02
Account databasePostgreSQL allods_account_RC_4_0_02

The core service flow is:

Code:
Matching 4.0.02.42 client
        |
        +--> Account Server :9340
        |       |
        |       +--> PostgreSQL: allods_account_RC_4_0_02
        |
        +--> Shard frontends :9322-9325
                |
                +--> Master Server :9513
                +--> Billing Server :9320
                +--> Item Mall Server :9321
                +--> MySQL game databases

Terminology

The folder may be labelled “Server 4.0”, while community posts sometimes call the package “4.2” because the full build is 4.0.02.42. For compatibility decisions, use the complete version 4.0.02.42 and network version 8455, not the folder name.



3. Hardware and software requirements​

3.1 Recommended core-server host​

  • Windows 10 or Windows 11 x64.
  • WSL2 with Ubuntu 22.04 or 24.04.
  • Docker Desktop with WSL integration, or a native Docker Engine inside Linux.
  • 8 CPU threads or more.
  • 16 GB RAM available to Windows/WSL for the core stack.
  • At least 30 GB free SSD space for extraction, databases, logs and temporary files.

Practical core minimum: 12 GB can work with a reduced map list and no optional tools, but paging and long map-loading pauses are likely.

3.2 Host with Log Server and GameTool​

The historical 4.0 launchers request up to approximately:

ComponentHistorical heap settingsOperational effect
Shard-Xms4096M -Xmx4096M in the original launcherThe main game process can consume several gigabytes while maps are loaded.
GameTool-Xms1024m -Xmx4048mResource loading, JBoss and ETL add native and filesystem-cache usage beyond the heap.
Log Server-Xms4048m -Xmx6048mThe original profile alone reserves about 4 GB at startup.

Resource requirement

Use at least 24 GB RAM for the complete stack with GameTool and Log Server; 32 GB is preferable for comfortable first-time initialization. Do not enable these tools by default on a 12–16 GB host.



4. Prepare Windows, WSL2 and Docker​

4.1 Enable WSL2​

Open PowerShell as Administrator:

Code:
wsl --install -d Ubuntu
wsl --set-default-version 2
wsl -l -v

The Ubuntu distribution must show version 2. Restart Windows if requested.

4.2 Allocate enough memory to WSL​

Create or edit %UserProfile%\.wslconfig on Windows.

Code:
[wsl2]
memory=16GB
processors=8
swap=8GB

For GameTool and Log Server, increase memory to 24 GB or more if the physical host permits it. Never allocate all physical RAM to WSL.

Apply the change:

Code:
wsl --shutdown

Restart Docker Desktop afterwards.

4.3 Install only the useful Linux packages​

Bash:
sudo apt update
sudo apt install -y ca-certificates curl p7zip-full unzip dos2unix procps iproute2 net-tools

No desktop required

MATE, XRDP, Oh My Zsh, pgAdmin and a graphical session are optional personal conveniences. They are not server dependencies and consume memory that the Shard can use.



4.4 Verify Docker​

Bash:
docker version
docker compose version

If Docker commands fail inside Ubuntu, enable WSL integration for this distribution in Docker Desktop.

5. Extract and verify the release​

Download the Allods Online 4.0.02.42 server package from Allods Developers Community. Use the matching client release linked from the same community release topic.

Create a destination on the Linux filesystem:

Bash:
mkdir -p ~/allods40
cd ~/allods40

Copy the downloaded server archive into Ubuntu or extract it directly. Examples:

Bash:
7z x /mnt/c/Users/YOUR_WINDOWS_USER/Downloads/Allods-Online-4.0-Server-ADC.7z -o$HOME/allods40
cd ~/allods40/Allods-Online-4.0-Server

If your archive uses another name, adjust only the archive and extracted directory names.

Do not run from a Windows-mounted directory

Do not operate the server from /mnt/c, /mnt/d, /mnt/f or a network share. The legacy Java runtime performs many small reads, writes and symlink operations. Windows-mounted paths can cause extreme loading times, failed symlinks, JVM crashes and unexplained malloc() errors. Copy the complete package under ~/allods40 first.



Verify the package identity:

Bash:
sed -n '1,20p' Version.txt
cat Territory.txt
./vendors/Java/jdk-1.7-linux-64/bin/java -version

Expected values include Server Version = 4.0.02.42 and Java 1.7.0_03.

When an official SHA-256 manifest is supplied:

Bash:
sha256sum -c SHA256SUMS.txt

6. Understand the directory layout​

PathPurpose
game/data/Packs/Packed 4.0.02.42 server resources, maps, XDB data and localization.
game/data/System/Resource-system configuration and indices.
game/data/Types/Legacy resource type definitions.
server_bin/jars/Core server libraries and executable JAR manifests.
server_bin/accountServer/Authentication, accounts, API and account utility.
server_bin/masterServer/Shard/service registry and control service.
server_bin/billingServer/Billing protocol and local fake accounter configuration.
server_bin/itemMallServer/Item Mall network service and assortment configuration.
server_bin/shard/Main world process, frontend services, maps and game configuration.
server_bin/gametoolEAR/Optional JBoss-based administration application.
server_bin/logserverEAR/Optional central log collection service.
vendors/Java/The required version-matched Java 7 runtimes.

7. Install and initialize the databases​

7.1 Required databases​

These names were confirmed from a previously working 4.0.02.42 installation:

EngineDatabaseUsed by
MySQL 5.7allods_online_RC_4_0_02Shard, auction, items, mail, guild and game state.
MySQL 5.7a1_masterserver_RC_4_0_02Master Server.
MySQL 5.7allods_billing_RC_4_0_02Billing Server.
PostgreSQL 9.3allods_account_RC_4_0_02Account Server and account utility.
PostgreSQL 9.3gametoolOptional GameTool only.
PostgreSQL 9.3logserverOptional Log Server only.

7.2 Create the Docker Compose definition​

Legacy database images

MySQL 5.7 and PostgreSQL 9.3 are end-of-life compatibility targets. Do not silently replace them with the latest database images. If a legacy tag can no longer be downloaded, use the checksummed Linux/amd64 image archive supplied or referenced by the ADC release, then load it with docker load -i IMAGE_FILE.tar.



Create docker-compose.yml at the server root:

YAML:
services:
  mysql:
    image: mysql:5.7
    container_name: allods40-mysql
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${ALLODS40_MYSQL_PASSWORD}
    command:
      - --character-set-server=utf8
      - --collation-server=utf8_general_ci
      - --sql-mode=NO_ZERO_DATE,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES
    ports:
      - "127.0.0.1:3306:3306"
    volumes:
      - allods40_mysql:/var/lib/mysql

  postgres:
    image: postgres:9.3
    container_name: allods40-postgres
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: ${ALLODS40_POSTGRES_PASSWORD}
    ports:
      - "127.0.0.1:5432:5432"
    volumes:
      - allods40_postgres:/var/lib/postgresql/data

volumes:
  allods40_mysql:
  allods40_postgres:

Create .env beside it:

Code:
ALLODS40_MYSQL_PASSWORD=CHANGE_THIS_MYSQL_PASSWORD
ALLODS40_POSTGRES_PASSWORD=CHANGE_THIS_POSTGRES_PASSWORD

Use long private values containing characters that are valid in XML and Java properties files. Restrict the file:

Bash:
chmod 600 .env
docker compose up -d
docker compose ps

7.3 Create the empty databases​

Bash:
docker exec allods40-mysql mysql -uroot -pCHANGE_THIS_MYSQL_PASSWORD -e \
  "CREATE DATABASE IF NOT EXISTS allods_online_RC_4_0_02 CHARACTER SET utf8 COLLATE utf8_general_ci;
   CREATE DATABASE IF NOT EXISTS a1_masterserver_RC_4_0_02 CHARACTER SET utf8 COLLATE utf8_general_ci;
   CREATE DATABASE IF NOT EXISTS allods_billing_RC_4_0_02 CHARACTER SET utf8 COLLATE utf8_general_ci;"

docker exec allods40-postgres createdb -U postgres allods_account_RC_4_0_02

For the optional tools only:

Bash:
docker exec allods40-postgres createdb -U postgres gametool
docker exec allods40-postgres createdb -U postgres logserver

If createdb reports that a database already exists, continue without deleting it.

7.4 Import the initial anonymized schemas​

Empty databases are not a complete installation

The server requires the version-matched anonymized initial schema/data bundle supplied with the 4.0 public release. Do not import live production data or schemas from another game version.



If the release stores one SQL file per table, import all files in lexical order. Adjust database/mysql/... to the actual database-bundle path shipped with your download:

Bash:
for sql in database/mysql/allods_online_RC_4_0_02/*.sql; do
  docker exec -i allods40-mysql mysql -uroot -pCHANGE_THIS_MYSQL_PASSWORD allods_online_RC_4_0_02 < "$sql"
done

for sql in database/mysql/a1_masterserver_RC_4_0_02/*.sql; do
  docker exec -i allods40-mysql mysql -uroot -pCHANGE_THIS_MYSQL_PASSWORD a1_masterserver_RC_4_0_02 < "$sql"
done

for sql in database/mysql/allods_billing_RC_4_0_02/*.sql; do
  docker exec -i allods40-mysql mysql -uroot -pCHANGE_THIS_MYSQL_PASSWORD allods_billing_RC_4_0_02 < "$sql"
done

Import the PostgreSQL account dump using the format supplied by the release:

Bash:
# Plain SQL example
docker exec -i allods40-postgres psql -U postgres -d allods_account_RC_4_0_02 < database/postgresql/allods_account_RC_4_0_02.sql

# Custom pg_dump example
docker cp database/postgresql/allods_account_RC_4_0_02.dump allods40-postgres:/tmp/account.dump
docker exec allods40-postgres pg_restore -U postgres -d allods_account_RC_4_0_02 /tmp/account.dump

Use only the command matching the supplied dump format.

7.5 Confirm that schemas are populated​

Bash:
docker exec allods40-mysql mysql -uroot -pCHANGE_THIS_MYSQL_PASSWORD -e \
  "SELECT table_schema, COUNT(*) AS tables_count
   FROM information_schema.tables
   WHERE table_schema IN ('allods_online_RC_4_0_02','a1_masterserver_RC_4_0_02','allods_billing_RC_4_0_02')
   GROUP BY table_schema;"

docker exec allods40-postgres psql -U postgres -d allods_account_RC_4_0_02 -c '\dt'

8. Verify the game resources​

The server package must retain all of these:

Code:
game/data/Packs/*.Server.pak
game/data/System/index.all
game/data/System/index.bin
game/data/System/index.srv
game/data/Types/types.xml

Do not delete the packed resources

The old 2020 draft instructed users to unpack and remove every XDB_*.pak. Do not perform that destructive step on the current preserved package. The known working 4.0 server loaded its resource indices and maps with the .Server.pak files present. Keep the original packs unless the exact release includes and documents a dedicated extraction helper.



Confirm the main files:

Bash:
test -s game/data/System/index.srv
test -s game/data/System/index.all
test -s game/data/Types/types.xml
find game/data/Packs -maxdepth 1 -type f -name '*.Server.pak' | wc -l

9. Configure addresses and service files​

9.1 Obtain the WSL address​

Bash:
hostname -I

Use the first normal WSL address, for example 172.30.113.41. Do not use a Docker bridge address such as 172.17.0.1.

9.2 Update the Shard configuration​

Edit:
Code:
server_bin/shard/cfg/shard.xml

Replace every historical LAN address such as 192.168.1.14 in the active LocalShard and frontEnd elements with the current WSL address.

The important block should follow this model:

XML:
<shard role="LocalShard" memory="1200" ip="YOUR_WSL_IP">
  <frontEnd externalHost="YOUR_WSL_IP" ip="YOUR_WSL_IP" port="9322" timeout="60000"/>
  <db database="allods_online_RC_4_0_02" host="127.0.0.1" user="root" password="CHANGE_THIS_MYSQL_PASSWORD"/>
  <http host="127.0.0.1" port="8080"/>
  <indicator/>
  <doorway/>
</shard>

Keep Master, Billing and Item Mall connections on 127.0.0.1 for a single-machine installation.

Territory and client data

Preserved copies may contain Territory.txt set to Europe while an old active shard.xml still contains <territory>Russia</territory>. Do not change this value blindly. Keep the territory, languages and resource packs aligned with the client included in the final ADC release, then confirm the selected languages in the Shard startup log.



9.3 Update Account Server​

Edit server_bin/accountServer/cfg/shard.xml. The authentication listener must be reachable from the Windows client:

XML:
<accountServer maxUsersOnShard="5000" clientsLimit="5000" build="builds/standard.xml" versionOnLogin="-1" ip="YOUR_WSL_IP">
  <approve ip="127.0.0.1" port="9347"/>
  <auth ip="YOUR_WSL_IP" port="9340" timeout="30000"/>
  <api protocol="http" host="127.0.0.1" port="9357"/>
  <db host="127.0.0.1" user="postgres" password="CHANGE_THIS_POSTGRES_PASSWORD"/>
  <authenticator>
    <api host="127.0.0.1" port="9399"/>
  </authenticator>
</accountServer>

Then update server_bin/accountServer/cfg/accountserverdb-config-pgsql.properties:

Code:
connection.master.url=jdbc:postgresql://127.0.0.1/allods_account_RC_4_0_02
connection.master.user=postgres
connection.master.password=CHANGE_THIS_POSTGRES_PASSWORD

Known stale value

Some historical copies still reference allods_online_account_trunk2. That was not the database used by the known working RC_4.0.02 installation. Use allods_account_RC_4_0_02 consistently in the server and account utility.



9.4 Update Master and Billing credentials​

In server_bin/masterServer/cfg/shard.xml, configure:

XML:
<db host="127.0.0.1" user="root" password="CHANGE_THIS_MYSQL_PASSWORD" database="a1_masterserver_RC_4_0_02"/>

In server_bin/billingServer/cfg/shard.xml, configure:

XML:
<db host="127.0.0.1" user="root" password="CHANGE_THIS_MYSQL_PASSWORD" database="allods_billing_RC_4_0_02"/>

If the schema name is generated through the shipped *-config-trunk.properties, confirm the startup log resolves to the exact database names listed above.

9.5 Verify that no old address remains​

Bash:
grep -RInE '192\.168\.|10\.[0-9]+\.|dev-db\.|online\.local' \
  server_bin/accountServer/cfg \
  server_bin/masterServer/cfg \
  server_bin/billingServer/cfg \
  server_bin/itemMallServer/cfg \
  server_bin/shard/cfg/shard.xml

Review each result. Sample, test and inactive files may retain documentation addresses, but every file used by the launch commands must be local and coherent.

10. Start the core server​

10.1 Prepare the bundled Java runtime​

From the server root:

Bash:
export ALLODS40_HOME="$PWD"
source vendors/Java/defineJavaHome.sh
mkdir -p "$ALLODS40_HOME/run"
"$JAVA_HOME/bin/java" -version

Do not substitute modern Java

Do not launch the server with the Ubuntu default Java 11, 17 or 21 runtime. Options such as PermGen and CMS are specific to the bundled Java generation, and the historical libraries were built and tested against Java 7.



10.2 Start services in dependency order​

Run the following from the same shell where ALLODS40_HOME and JAVA_HOME were exported.

Bash:
(
  cd "$ALLODS40_HOME/server_bin/accountServer/cfg" || exit 1
  nohup "$JAVA_HOME/bin/java" -server -XX:MaxPermSize=256m -Xms512M -Xmx512M \
    -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode \
    -jar ../../jars/accountserver.AccountServerMain.jar shard.xml \
    > "$ALLODS40_HOME/run/accountServer.log" 2>&1 &
  echo $! > "$ALLODS40_HOME/run/accountServer.pid"
)

(
  cd "$ALLODS40_HOME/server_bin/masterServer/cfg" || exit 1
  nohup "$JAVA_HOME/bin/java" -server -XX:MaxPermSize=128m -Xms512M -Xmx512M \
    -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode \
    -jar ../../jars/masterServer.MasterServerMain.jar shard.xml \
    > "$ALLODS40_HOME/run/masterServer.log" 2>&1 &
  echo $! > "$ALLODS40_HOME/run/masterServer.pid"
)

(
  cd "$ALLODS40_HOME/server_bin/billingServer/cfg" || exit 1
  nohup "$JAVA_HOME/bin/java" -server -XX:MaxPermSize=256m -Xms256M -Xmx512M \
    -XX:+UseConcMarkSweepGC \
    -jar ../../jars/billingserver.BillingServerMain.jar shard.xml -type billingServer \
    > "$ALLODS40_HOME/run/billingServer.log" 2>&1 &
  echo $! > "$ALLODS40_HOME/run/billingServer.pid"
)

(
  cd "$ALLODS40_HOME/server_bin/itemMallServer/cfg" || exit 1
  nohup "$JAVA_HOME/bin/java" -server -XX:MaxPermSize=256m -Xms256M -Xmx512M \
    -XX:+UseConcMarkSweepGC \
    -jar ../../jars/itemmall.server.ItemMallServerMain.jar shard.xml \
    > "$ALLODS40_HOME/run/itemMallServer.log" 2>&1 &
  echo $! > "$ALLODS40_HOME/run/itemMallServer.pid"
)

(
  cd "$ALLODS40_HOME/server_bin/shard/cfg" || exit 1
  nohup "$JAVA_HOME/bin/java" -server -XX:MaxPermSize=512m -Xms1024M -Xmx4096M \
    -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode \
    -jar ../../jars/shardstarter.ShardMain.jar shard.xml -maps map.cfg \
    > "$ALLODS40_HOME/run/shard.log" 2>&1 &
  echo $! > "$ALLODS40_HOME/run/shard.pid"
)

Why map.cfg is selected

The supplied map.cfg focuses on the main Kania and Hadagan maps and is safer for an initial start than an all-map configuration. Expand the map list only after the base stack is stable and memory use has been measured.



10.3 Watch startup​

Bash:
tail -f run/accountServer.log
tail -f run/masterServer.log
tail -f run/billingServer.log
tail -f run/itemMallServer.log
tail -f run/shard.log

Use separate terminals only when necessary. To follow several files in one terminal:

Bash:
tail -F run/accountServer.log run/masterServer.log run/billingServer.log run/itemMallServer.log run/shard.log

10.4 Verify processes and ports​

Bash:
pgrep -af 'AccountServerMain|MasterServerMain|BillingServerMain|ItemMallServerMain|ShardMain'

ss -ltnp | grep -E ':(9340|9347|9357|9513|10500|9320|9321|9322|9323|9324|9325)\b'

PortServiceExposure
9340Client authenticationWindows/private network
9347Shard session approvalInternal
9357Account APIInternal
9513Master ServerInternal
10500Master APIInternal
9320Billing ServerInternal
9321Item Mall ServerInternal
9322-9325Shard frontendsWindows/private network
3306MySQLLoopback only
5432PostgreSQLLoopback only

Known healthy markers

A known working installation reports Account Server started with protocol versions 73 and 48, connects the Shard to Master Server at 127.0.0.1:9513, then opens frontends 9322 through 9325. Full map loading can continue for many minutes after the ports appear.



11. Create an account​

Keep the databases running. From the server root:

Bash:
cd server_bin/accountServer
./account_utils.sh create YOUR_LOGIN User
./account_utils.sh setpassword YOUR_LOGIN YOUR_PASSWORD
./account_utils.sh list

Available base access levels are User, Master and Developer. A normal player account should use User.

Developer access

Do not give public players Developer or Master access. These levels are intended for controlled administration/testing and can expose privileged behavior.



To change access explicitly:

Bash:
./account_utils.sh modify YOUR_LOGIN User User

The utility reads cfg/accountUtilCfg.xml, which in turn uses the Account PostgreSQL configuration and the game MySQL configuration. If it cannot connect, fix those files instead of editing account tables manually.

12. Configure and launch the client​

12.1 Use the exact matching client​


The client must support:

Code:
Server branch: RC_4.0.02
Client network version: 8455
Client/account protocol: 73

Version mismatch

A client that displays “4.x” is not automatically compatible. If its network version is different, login or world connection will fail even when every port is open.



12.2 Configure Account Server​

Open the matching client file:

Code:
Profiles/accountServer.cfg

Set:

Code:
account_srv_host = "YOUR_WSL_IP"
account_srv_port = 9340

Preserve the exact syntax already used by the client file.

12.3 Test Windows connectivity​

In PowerShell:

Code:
Test-NetConnection YOUR_WSL_IP -Port 9340
Test-NetConnection YOUR_WSL_IP -Port 9322

Both tests must return TcpTestSucceeded : True.

If necessary, allow only the client-facing ports on private networks:

Code:
New-NetFirewallRule -DisplayName "Allods 4.0 Account" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9340 -Profile Private
New-NetFirewallRule -DisplayName "Allods 4.0 Shard" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 9322-9325 -Profile Private

Do not expose databases

Never forward MySQL 3306, PostgreSQL 5432, GameTool or internal service ports directly to the public Internet.



Launch the client using the batch file or executable supplied with the matching ADC client package, then log in with the account created above.

13. Daily operations and logs​

13.1 Status​


Bash:
pgrep -af 'AccountServerMain|MasterServerMain|BillingServerMain|ItemMallServerMain|ShardMain|gametoolEAR|logserverEAR'
ss -ltnp | grep -E ':(9340|9347|9357|9513|10500|9320|9321|9322|9323|9324|9325|8088|8888)\b'
free -h
docker compose ps

13.2 Controlled shutdown​

Stop in reverse dependency order:

Bash:
pkill -f 'shardstarter.ShardMain' || true
pkill -f 'itemmall.server.ItemMallServerMain' || true
pkill -f 'billingserver.BillingServerMain' || true
pkill -f 'masterServer.MasterServerMain' || true
pkill -f 'accountserver.AccountServerMain' || true

Wait and verify before using kill -9:

Bash:
sleep 10
pgrep -af 'AccountServerMain|MasterServerMain|BillingServerMain|ItemMallServerMain|ShardMain'

13.3 Log locations​

  • run/*.log — output captured by the manual launch commands in this guide.
  • server_bin/accountServer/out/*/logs/server.log — detailed Account Server log.
  • server_bin/masterServer/out/*/logs/server.log — detailed Master Server log.
  • server_bin/billingServer/out/*/logs/server.log — detailed Billing Server log.
  • server_bin/itemMallServer/out/*/logs/server.log — detailed Item Mall log.
  • server_bin/shard/out/*/logs/server.log — detailed Shard and map-loading log.

Find the newest Shard log:

Bash:
find server_bin/shard/out -type f -path '*/logs/server.log' -printf '%T@ %p\n' | sort -n | tail -n 1

14. Optional Log Server and GameTool​

Disabled by default

Log Server and GameTool are administration/reporting tools. They are not required for a player to log in and enter the world. Start them only when explicitly needed and only after the complete core stack is healthy.



The corrected server_bin/gametoolEAR supplied with the ADC public 4.0 release follows the same architecture as the corrected 3.0 directory: JBoss, PostgreSQL, resource loading, Master/Shard connections and ETL. Use the dedicated complete GameTool guide for its user roles, operations, ETL and security model.

Before enabling the tools:

  • Provide at least 24 GB RAM to WSL.
  • Create and initialize the gametool and logserver PostgreSQL databases.
  • Configure version-specific 4.0 shard.xml files; never reuse the 3.0 file.
  • Start Log Server before GameTool.
  • Confirm Log Server listens on 8888.
  • Confirm GameTool listens on 8088.
  • Keep both interfaces private or behind a VPN.

Historical launcher memory

The original run-logserver.sh uses -Xms4048m -Xmx6048m, and the original GameTool launcher can grow to about 4 GB of Java heap. Do not launch them casually on a 12–16 GB WSL instance. Review and measure the corrected public-release profiles instead.



15. Backups and security​

15.1 Database dumps​


Stop the Java services before creating a full recovery point.

Bash:
mkdir -p backups

docker exec allods40-mysql mysqldump -uroot -pCHANGE_THIS_MYSQL_PASSWORD \
  --single-transaction --routines --triggers allods_online_RC_4_0_02 \
  > backups/allods_online_RC_4_0_02.sql

docker exec allods40-mysql mysqldump -uroot -pCHANGE_THIS_MYSQL_PASSWORD \
  --single-transaction --routines --triggers a1_masterserver_RC_4_0_02 \
  > backups/a1_masterserver_RC_4_0_02.sql

docker exec allods40-mysql mysqldump -uroot -pCHANGE_THIS_MYSQL_PASSWORD \
  --single-transaction --routines --triggers allods_billing_RC_4_0_02 \
  > backups/allods_billing_RC_4_0_02.sql

docker exec allods40-postgres pg_dump -U postgres -Fc allods_account_RC_4_0_02 \
  > backups/allods_account_RC_4_0_02.dump

15.2 Configuration backup​

Preserve:
  • server_bin/accountServer/cfg/
  • server_bin/masterServer/cfg/
  • server_bin/billingServer/cfg/
  • server_bin/itemMallServer/cfg/
  • server_bin/shard/cfg/
  • docker-compose.yml and a separately protected copy of .env

Credential hygiene

Do not reuse passwords found in historical sample files. Do not publish .env, database dumps, account tables, RSA keys, GameTool users or complete runtime logs. The public release must use anonymized initial databases and fresh local credentials.



16. Troubleshooting​

Operating-system OOM kill

A bare Killed line usually means Linux terminated Java because WSL exhausted RAM and swap. It is not a normal Java exception.



Bash:
free -h
dmesg -T | grep -i -E 'oom|out of memory|killed process' | tail -n 30

Stop memory-heavy applications, optional tools, archive compression and unrelated containers. Increase WSL memory/swap or reduce the selected map list. Do not start GameTool or Log Server until the core is stable.

Confirm the server is stored under ~/allods40. Running Java 7 directly from /mnt/* can trigger slow I/O, symlink problems and native-runtime instability. Copy the package to the Linux filesystem and retry from a clean shell.

Compare the error with the required names:

Code:
MySQL:     allods_online_RC_4_0_02
MySQL:     a1_masterserver_RC_4_0_02
MySQL:     allods_billing_RC_4_0_02
PostgreSQL: allods_account_RC_4_0_02

Create/import the missing database and correct the active shard.xml or properties file. Reusing a Docker volume does not rerun initialization scripts automatically.

Inspect:

Bash:
grep -n 'connection.master' server_bin/accountServer/cfg/accountserverdb-config-pgsql.properties

The URL must point to allods_account_RC_4_0_02. Also confirm accountUtilCfg.xml references the same active properties file.

Master must start first and listen on 127.0.0.1:9513.

Bash:
pgrep -af MasterServerMain
ss -ltnp | grep ':9513'
tail -n 200 run/masterServer.log

Fix Master Server/database startup before restarting the Shard.

Check all of the following:
  • The client uses network version 8455.
  • Profiles/accountServer.cfg contains the current WSL address and port 9340.
  • Account Server is bound to that address, not only to 127.0.0.1.
  • Windows can pass Test-NetConnection for port 9340.
  • The WSL address did not change after wsl --shutdown or a reboot.

Confirm the Shard is still running and all four frontend ports are present:

Bash:
ss -ltnp | grep -E ':(9322|9323|9324|9325)\b'
tail -n 300 run/shard.log

Wait for the main Kania/Hadagan maps to finish loading. Also confirm externalHost contains the WSL address visible to Windows.

Verify game/data/System/index.srv, index.all, Types/types.xml and the .Server.pak files. Restore missing files from a clean matching archive. Do not combine resource packs from another revision.

This preserved Debug-oriented build can report resource-validation warnings and nonfatal ErrorsContainer entries. Judge startup by the final service state:
  • Did the Java process remain alive?
  • Did it connect to Master Server?
  • Did frontends 9322–9325 open?
  • Did the requested maps finish loading?

A fatal database, protocol, resource-index or Master connection error must still be fixed.

The known working server recommended:

Code:
NO_ZERO_DATE,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES

Use the Docker Compose command in this guide. Do not disable every SQL safety mode simply to hide a warning.

Bash:
ss -ltnp | grep -E ':(3306|5432|8080|9320|9321|9322|9323|9324|9325|9340|9347|9357|9513|10500)\b'
pgrep -af 'AccountServerMain|MasterServerMain|BillingServerMain|ItemMallServerMain|ShardMain'

Stop the stale instance or change every consumer consistently. Do not launch duplicate Java services repeatedly because the first start appears slow.

17. Important 3.0 and 4.0 differences​

Area3.0 public release4.0.02.42 release
Client network version64868455
Account login port93379340
Account protocol3773
Account/frontend protocol3448
Game databaseallods_online_RC_3_0allods_online_RC_4_0_02
Account databaseao_accounts_testallods_account_RC_4_0_02
Resources3.0-specific packs and indices4.0.02.42-specific .Server.pak files and indices
GameToolCorrected version-specific directorySeparate corrected 4.0 directory; never cross-copy
Tool memoryReduced public profileHistorical profiles are substantially heavier

18. Final validation checklist​

  • The server is stored under the Linux filesystem, not /mnt/*.
  • Version.txt identifies 4.0.02.42.
  • The bundled Java 1.7.0_03 runtime launches.
  • MySQL and PostgreSQL containers are healthy and bound only to loopback.
  • All four required core databases exist and contain their initial schemas.
  • No historical LAN/database address remains in an active configuration.
  • Account Server listens on the current WSL address at 9340.
  • Master, Billing and Item Mall are healthy before the Shard starts.
  • The Shard connects to Master Server and opens 9322-9325.
  • The main maps finish loading without the Java process exiting.
  • A normal User account can be created and listed by account_utils.sh.
  • The client is the matching network-version 8455 build.
  • Windows can reach 9340 and 9322.
  • The client logs in, displays the Shard and enters the world.
  • Log Server and GameTool remain disabled unless deliberately configured.
  • Fresh database/configuration backups exist before customization.

Installation complete

When every item above is true, the Allods Online 4.0.02.42 core server is installed, reachable by the matching client and ready for controlled private development/testing.




Guide rebuilt for Allods Developers Community by Sorok Dva, founder of ADC.
​
 
Last edited:
I would like to see the following parts of the manual:
  • Server configuration
  • Starting the AO server
At the moment I don't have the time to complete this tutorial. So if anyone have any knowledges in Allods on Linux, you can help me finish this guide or you'll have to wait that I've time to spent on this guide
 
A typo crept into the installation command of the odbc driver!
sudo apt-get install odbc-posgresql
so be right:
sudo apt-get install odbc-postgresql

UPD:
If the driver is not installed in this case either, you can try to reproduce the following command before installing it:
sudo apt-get install unixodbc-bin unixodbc
and then:
sudo apt-get install odbc-postgresql
 
Will you continue the guide or is it like 99% of the internet, just unfinished stuff ? Just asking because its the only reason i registered here :D
 
Will you continue the guide or is it like 99% of the internet, just unfinished stuff ? Just asking because its the only reason i registered here :D

Hello. You have to know it takes time to create tutorial and trying to explain in the most simple way. Especially when you have to write the tutorial in a language that isn't your. And at the moment I don't have enought time to complete this due to my profesionnal life. So yeah, i'll finish this guide one day, but I don't know when, you have to be patient. And if you're not happy about that just learn yourself, you have to understand that sometimes you have to make the work by yoursself and do not wait for someone to do it for you.

Just experiment by yourself and with motivation and a minimum of reasoning you can understand and manage to start your allods server with all the actual resources that are available on internet.
 
EDIT : Its to do for debian distrubition before starting installation :

# Create the file repository configuration:
sudo sh -c 'echo "deb
You do not have permission to view link Log in or register now.
$(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

# Import the repository signing key:
wget --quiet -O -
You do not have permission to view link Log in or register now.
| sudo apt-key add -

# Update the package lists:
sudo apt-get update

# Install the latest version of PostgreSQL.
# If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
sudo apt-get -y install postgresql



you do command line ony by one

Note : I tried debian and i find it not really good for allods
 
Last edited:
Back
Top