Learn How To Setup Ragnarok Online Server on Ubuntu 14.04 x64

October 1, 2019

Table of Contents

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.
  • https://www.itweb.services/tutorials/linux-guides/how-to-install-apache-mysql-and-php-on-ubuntu”>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 IT Web Services 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

    Need help?

    Do you need help setting up this on your own service?
    Please contact us and we’ll provide you the best possible quote!