Setup Ragnarok Online Server on Ubuntu 14.04 x64

Published on: Tue, May 19, 2015 at 3:05 am EST
Game Servers Linux Guides Ubuntu

In this article, we are going to setup a Ragnarok Online Server on Ubuntu 14.04 x64. You can be logged in as root or a user with superuser privileges. It's safer to set this up as a non-root user with sudo. In this tutorial, we're going to use the rAthena server files.

If you're using Windows and you have Ubuntu Server (VPS or Dedicated), you will need the following programs.

  • FileZilla
  • PuTTY
  • Text editor (Sublime or Notepad++ recommended)

Requirements

  • apache2 - If you're planning to use phpMyAdmin for remote mysql access and setting up your website.
  • php5 - For web and phpMyAdmin.
  • phpmyadmin - Remote MySQL access using a web browser.
  • mysql-server - our database for the game server.
  • mysql-client
  • git
  • make
  • gcc
  • libmysqlclient-dev
  • zlib1g-dev
  • libpcre3-dev - Optional, for PCRE support.
  • libssl-dev - Required, for compiling with MySQL 5.5.

You may refer to this guide regarding the installation of Apache, MySQL and PHP.


Installing required packages

Run these commands over SSH.

  • Root user:

    apt-get install php5 phpmyadmin mysql-server mysql-client git make gcc libmysqlclient-dev zlib1g-dev libpcre3-dev
    
  • Non-root with sudo privileges:

    sudo apt-get install php5 phpmyadmin mysql-server mysql-client git make gcc libmysqlclient-dev zlib1g-dev libpcre3-dev
    

After successfully installing the server requirements, let's proceed on installing and configuring the server files.


Downloading the server files

Now, we're going to get the latest updates of rAthena server files. These are the files required on running a Ragnarok Online server. There are other server files that can be used, like Hercules and eAthena, but in this tutorial, we're using rAthena. Run the command below to download the files.

    git clone https://github.com/rathena/rathena.git ~/rAthena

This will place all the files inside rAthena of your current directory in terminal.

To update the server files to latest revision, run this command.

    cd rAthena
    git pull

MySQL setup

In this part, we're configuring MySQL for the database of our server. First, check if your MySQL Server is running.

    service mysql status

If its not running, enter this command.

    service mysqld start

After running the commands above, open the MySQL console.

    mysql -u root -p

You will be asked for your root password. After logging in, type the following commands to create the database for our server.

CREATE DATABASE (your ragnarok database name); -- We'll name it "ragnarok".

    mysql> CREATE DATABASE ragnarok;

Then, create a new user for the Ragnarok DB and log DB.

GRANT ALL ON ragnarok.* TO yourdatabaseusername@localhost IDENTIFIED BY "yourdesiredpassword"; -- We will create a new user called admin with a password of 123456.

    mysql> GRANT ALL ON ragnarok.* TO admin@localhost IDENTIFIED BY "123456";

You can replace localhost with an IP address if you want the user to be able to access your MySQL server remotely.

Create log database for the Ragnarok game logs.

CREATE DATABASE (your log database name) -- We'll name it "log".

    mysql> CREATE DATABASE log;

Set permissions for the user that we created earlier named admin.

    mysql> GRANT ALL ON log.* TO admin@localhost;

Restore the required tables in your Ragnarok and log database. Update your password after -p accordingly.

mysql> quit;

mysql -u admin -p123456 ragnarok  < /path/to/your/rathena folder/sql-files/main.sql
mysql -u admin -p123456 log < /path/to/your/rathena folder/sql-files/logs.sql

Creating a game account

We're using phpMyAdmin that we installed earlier to access the database. Access phpMyAdmin through your web browser.

Select the ragnarok database and choose the login table. We can see that there's one record in that table. Do not delete/modify it yet. It is used by the server. To create a game account, click the SQL tab while on the login table to open the query editor. Run the following query.

    INSERT INTO `ragnarok`.`login` (`account_id`, `userid`, `user_pass`, `sex`, `email`, `group_id`, `state`, `unban_time`, `expiration_time`, `logincount`, `lastlogin`, `last_ip`, `birthdate`, `character_slots`, `pincode`, `pincode_change`, `vip_time`, `old_group`) VALUES ('2000000', 'admin', 'password123', 'M', 'email@email.com', '99', '0', '0', '0', '0', '0000-00-00 00:00:00', '', '0000-00-00', '9', '', '0', '0', '0');

We have inserted a new user in login table with the following information.

  • account_id = 2000000 (Always start with 2000000, then 2000001...)
  • userid = admin (Your in-game username)
  • user_pass = password123 (The password for your account)
  • sex = M (M or F, do not use S because its just for the server)
  • email = email@email.com (Your account's email, used for deleting character slots in-game)
  • group_id = 99 (refer to /rathena/conf/groups.conf and check the id lines. As for now, 99 to make this a GM account for special command usage ingame.)
  • character_slots = 9 (Number of characters that can be created per account)

Leave the other values as-is. Congratulations. You have successfully created your account for the game.


Configuring the server files

First, you must know your server's IP address. You may already know this since it was already included in the server information of your Vultr VPS. If you want to check it, type:

    ifconfig

Look for the eth0 inet addr:xxx.xxx.xxx.xxx part. xxx.xxx.xxx.xxx will be the IP address of your server. If you have Apache installed, you may access this to check if your web server is running.

In FileZilla, login to your VPS with your server credentials and access the /rAthena/conf folder.

Edit char_athena.conf and map_athena.conf with your preferred text editor.

Edit char_athena.conf from:

    // Login Server IP
    // The character server connects to the login server using this IP address.
    // NOTE: This is useful when you are running behind a firewall or are on
    // a machine with multiple interfaces.
    //login_ip: 127.0.0.1

    // The character server listens on the interface with this IP address.
    // NOTE: This allows you to run multiple servers on multiple interfaces
    // while using the same ports for each server.
    //bind_ip: 127.0.0.1

    // Login Server Port
    login_port: 6900

    // Character Server IP
    // The IP address which clients will use to connect.
    // Set this to what your server's public IP address is.
    //char_ip: 127.0.0.1       

To:

    // Login Server IP
    // The character server connects to the login server using this IP address.
    // NOTE: This is useful when you are running behind a firewall or are on
    // a machine with multiple interfaces.
    login_ip: xxx.xxx.xxx.xxx

    // The character server listens on the interface with this IP address.
    // NOTE: This allows you to run multiple servers on multiple interfaces
    // while using the same ports for each server.
    //bind_ip: 127.0.0.1

    // Login Server Port
    login_port: 6900

    // Character Server IP
    // The IP address which clients will use to connect.
    // Set this to what your server's public IP address is.
    char_ip: xxx.xxx.xxx.xxx

Where xxx.xxx.xxx.xxx is the IP address of your server.

In the inter_athena.txt file, make these changes:

    // Global SQL settings
    // overridden by local settings when the hostname is defined there
    // (currently only the login-server reads/obeys these settings)

    // MySQL Login server
    login_server_ip: 127.0.0.1 // <- either 127.0.0.1 or your server's ip, we'll use 127.0.0.1 since it listens to own mySQL server, change it to IP if your mySQL Server is in different server.
    login_server_port: 3306
    login_server_id: ragnarok // <- change this to your mySQL User your created earlier
    login_server_pw: ragnarok // <- its password 
    login_server_db: ragnarok // <- change this if your ragnarok db you set is different
    login_codepage:
    login_case_sensitive: no

    ipban_db_ip: 127.0.0.1 // <- either 127.0.0.1 or your server's ip, we'll use 127.0.0.1 since it listens to own mySQL server, change it to IP if your mySQL Server is in different server.
    ipban_db_port: 3306
    ipban_db_id: ragnarok // <- change this to your mySQL User your created earlier
    ipban_db_pw: ragnarok // <- its password 
    ipban_db_db: ragnarok // <- change this if your ragnarok db you set is different
    ipban_codepage:

    // MySQL Character server
    char_server_ip: 127.0.0.1 // <- either 127.0.0.1 or your server's ip, we'll use 127.0.0.1 since it listens to own mySQL server, change it to IP if your mySQL Server is in different server.
    char_server_port: 3306
    char_server_id: ragnarok // <- change this to your mySQL User your created earlier
    char_server_pw: ragnarok // <- its password 
    char_server_db: ragnarok // <- change this if your ragnarok db you set is different

    // MySQL Map Server
    map_server_ip: 127.0.0.1 // <- either 127.0.0.1 or your server's ip, we'll use 127.0.0.1 since it listens to own mySQL server, change it to IP if your mySQL Server is in different server.
    map_server_port: 3306
    map_server_id: ragnarok // <- change this to your mySQL User your created earlier
    map_server_pw: ragnarok // <- its password 
    map_server_db: ragnarok // <- change this if your ragnarok db you set is different

    // MySQL Log Database
    log_db_ip: 127.0.0.1 // <- either 127.0.0.1 or your server's ip, we'll use 127.0.0.1 since it listens to own mySQL server, change it to IP if your mySQL Server is in different server.
    log_db_port: 3306
    log_db_id: ragnarok // <- change this to your mySQL User your created earlier
    log_db_pw: ragnarok // <- its password 
    log_db_db: log // <- change this if your log db you set is different
    log_codepage:
    log_login_db: loginlog

In the map_athena.txt file, make these changes:

    // Character Server IP
    // The map server connects to the character server using this IP address.
    // NOTE: This is useful when you are running behind a firewall or are on
    // a machine with multiple interfaces.
    char_ip: x.x.x.x


    // The map server listens on the interface with this IP address.
    // NOTE: This allows you to run multiple servers on multiple interfaces
    // while using the same ports for each server.
    //bind_ip: 127.0.0.1

    // Character Server Port
    char_port: 6121


    // Map Server IP
    // The IP address which clients will use to connect.
    // Set this to what your server's public IP address is.
    map_ip: x.x.x.x

    // Map Server Port
    map_port: 5121

Where xxx.xxx.xxx.xxx is the IP address of your server.

Open subnet_athena.txt and set the IP Address.

    subnet: 255.0.0.0:x.x.x.x:x.x.x.x

And we're done configuring the server.


Compiling rAthena server

Now, time to compile the server! In this part, you need to know what Ragnarok Online client version you'll be using to connect to the server. For client setup, visit this page.

After you decide which client to be use, let's edit some files. Let's just say, we chose to use the 08072013 client since this is the stable renewal client.

Run this command on terminal:

    ./configure --enable-packetver=YYYYMMDD

Replace YYYYMMDD with the client date (reformatted).

    ./configure --enable-packetver=20130807

The configure script will perform necessary tests and generate makefiles for our server.

After that, compile the source code by entering these commands:

    make server
    chmod a+x login-server && chmod a+x char-server && chmod a+x map-server

... and wait for it to finish. If you make modifications on the files inside /rAthena/src folder, you will need to recompile it.

    make clean
    make server

Configuring the packet version for client connections

In FileZilla, point to the /rAthena/db folder and edit packet_db.txt.

Find this line and edit:

    //
    //packet_db_ver: 46
    packet_db_ver: default
    packet_keys_use: default

Since we're using the 2013-08-07Ragexe client, find the specified client below and look for its packet_ver and packet_keys.

    //2013-08-07Ragexe
    packet_ver: 45
    packet_keys: 0x7E241DE0,0x5E805580,0x3D807D80 // [Shakto] 

Replace the default value of packet_db_ver and packet_keys_use into the specified client values.

    //
    //packet_db_ver: 46
    packet_db_ver: 45
    packet_keys_use: 0x7E241DE0,0x5E805580,0x3D807D80

And save. This is for specifying what client is to be used by players. We don't want them to be able to use their version of choice.


Starting the server

After compiling the server files, use these commands to fire up the server.

To start:

    ./athena-start start

To stop:

    ./athena-start stop

To restart:

    ./athena-start restart

If you have encountered an error like this:

    -bash: ./athena-start: /bin/sh^M: bad interpreter

... then you need to install dos2unix to convert the script.

    apt-get install dos2unix
    dos2unix athena-start 
    chmod a+x athena-start

After running those commands, start the server again.

Now that we're done with the server setup, you just need to set your Ragnarok client to point to your VPS server. Enjoy playing on your new server!


References

Want to contribute ?

You could earn up to $300 by adding new articles