Jump to content
  • 0

[Tutorial] Setting up home-based server for FREE (Ubuntu)


Rivers

Question


  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

 

In this section we are going to go through the steps to getting you set up with your very own server computer to run Ragnarok Online (and other games).
 

Requirements :

  • A Computer with at least 128 GB of space & 4 GB of RAM (8GB Recommended).
  • Latest rAthena (Download here)
  • Your own pre-made private client. (Not covered in this topic)
  • Stable Internet connection.
  • Ubuntu Bootable drive. (This guide was made using UBUNTU 22.04 LTS)
  • Download Rufus if you don't have a bootable drive made. (Not Portable)
  • Some time to process all of this information.
  • Replace 127.0.0.1 with your Public IPv4 address.
  • Wired Internet connection

Optional Requirements :

Now that we got a few things to get us moving let's get started...

 

 

STEP ONE: Making the Bootable (Rufus booter)

Once you've downloaded Rufus (here if still need) you will run it. You will a simple window with a basic user interface. Simple click "Boot selection" and make sure "Disk or ISO image" is selected. We will continue by clicking "SELECT" and choosing the Ubuntu disk image we downloaded earlier. The "Device" will be the USB drive we're making bootable:

image.png.129de61052456d96ad7771bc0d5331e1.png

The default "cluster size" we'll leave as default. The "Volume Label" is what we will name the USB (optional). With that we're ready to click "START"!

Here is what mine looks like at the end of it.

image.png.4fdd3173831e01c77219859ef2918339.png

 

 

STEP TWO: Setting up the OS (Ubuntu 22.04)

Upon booting up, you'll want to select "Try or Install Ubuntu". After this it will load up the start up interface. Follow the linear steps to instal your new operating system. (NOTE: Ubuntu Pro is optional)
image.png.acdf2a1b1d5dc42fefadeb329b993caf.png

We will do a normal installation for our example.
image.png.3564d22de4c3d94a7a6a0c817ba40a46.png

After selecting the driver and location, you will need to create your user account. This is very important as it will contain information used further into the guide. Make sure you can remember your credentials.
image.png.dd7f7e500cfb442e657db7a96ef0c0f6.png


Getting used to the system will be beneficial for you. For this guide, we will navigate to your app menu located by default in the bottom left corner.
image.png.3149aba64d30fe82e289e37150e0d3ad.png

 

 

STEP THREE: Preparing the Server (Adding Utilities & Libraries)

Here we are going to download a few necessary packages and then we will be able to simply update them whenever we need to using our update and upgrade commands.

First thing's first. Let's update & upgrade our system. Type inside your terminal the following command: image.png.8bd37b5728d75adf8281e3ddf7b6caac.png

sudo apt update && sudo apt upgrade -y

This will update and upgrade the system.

Next we will need to install some packaged to run the server. Still inside the terminal, we will enter the following commands: 

sudo apt update && sudo apt upgrade -y

sudo apt install build-essential zlib1g-dev libpcre3-dev -y

sudo apt install libmariadb-dev libmariadb-dev-compat -y

sudo apt install software-properties-common apt-transport-https -y

sudo add-apt-repository ppa:ondrej/php -y

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

sudo apt-get install g++

 

From here we are ready to download rAthena.
(If you have it downloaded manually and have a custom directory already ready for it, go ahead and uploa dit now. If not, follow these next couple steps to download and set the directory.)

In this example, we are going to make the rAthena folder inside our Documents folder so we can find it easily. In your terminal enter in the following command to change to your documents directory: (repalce the name with your user.)

cd /home/raguser/Documents

The terminal should now read something along the lines of:

raguser@RagServer:~/Documents$  


This is where we will create the rAthena directory. We will pull the rAthena trunk to a custom location we will name using the terminal. To do this we must enter in:

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

This will now clone the rAthena repository to the directory we specified as rAthena inside the Documents folder.
Now we need to update the repo to make sure we have the latest files. Change directory using the cd command and entering in the new folder we just created:
 

cd rAthena

And pull the latest updates from the repository to ensure we have the correct version:

git pull

We now have a fully functional rAthena that is ready to be set up with our packet information, SQL database, our website, and more.
In the next section we will cover how to set up the SQL server using PMA (phpmyadmin) right from the desktop browser!
 

 

STEP FOUR: PMA & SQL (Setting up the database)

Now that we have a fresh rAthena installed, it's time to check MySQL to see if it installed correctly at the start. This may not be installed by default so follow the commands if you don't have it.

To check the status of MySQL enter in your terminal the following command:

service mysql status

This will tell you what the status of your MySQL is.

If this fails, install MySQL using:

sudo apt-get install php phpmyadmin mysql-server mysql-client git make gcc

You will want to select apache2 to install.
 

Now we will have full access to MySQL!

We need to start our first launch of SQL to get thigns started. To access SQL enter in:

sudo mysql -u root -p

This will access MySQL as the root user after you enter the password. (The password is the one you set up earlier when initially installing MySQL)

Once authenticated and inside we can create a database and populate it with our server account.
Creating the database is done using a few simple inputs. Enter in & modify the following details:

CREATE DATABASE ragserver;
CREATE USER 'raguser'@'localhost' IDENTIFIED BY 'StrongPassword';
CREATE USER 'raguser'@'%' IDENTIFIED BY 'StrongPassword';
GRANT ALL PRIVILEGES ON ragserver. * TO 'raguser'@'localhost' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON * . * TO 'raguser'@'%' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON * . * TO 'raguser'@'localhost' WITH GRANT OPTION;

This created the database 'ragserver' and added 'raguser' to the database with full access.

Next we need to make the logs and grant privileges to raguser on it. To do this enter in:

CREATE DATABASE log;
GRANT ALL ON log.* TO raguser@localhost;

Now we can leave by entering in:

quit

 

This next part of this step is a little more complicated, but very simple to do. rAthena has a database in their files that we are going to pull the columns and rows from so we don't have to manually construct it ourselves piece by piece. Thankfully we can execute it all in two simple commands:

mysql -u raguser -p ragserver < /home/raguser/rAthena/sql-files/main.sql

mysql -u raguser -p log < /home/raguser/rAthena/sql-files/logs.sql

 

And finally we are going to insert the first player account of our database. To do so we much enter & modify the following details. (This can always be changed later.)

sudo mysql -u raguser -p

Inside MySQL enter the following lines:

INSERT INTO `ragserver`.`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 ('20000000', 'admin', 'adminPassword', 'M', '[email protected]', '99', '0', '0', '0', '0', '2022-02-20 00:00:00', '', '2022-02-20', '9', '', '0', '0', '0');

(You can always change this later in the PMA window in the next steps.)
 

It's time to check our SQL to make sure it looks as good as we think. To do this we are going to need to go to your favourite web browser and enter in the following website ( your website! )

http://127.0.0.1/phpmyadmin/

And we're in!
image.png.032092db9cc5a3c44492ebbfbb8b9d81.png

Here inside PMA you will find all the accounts and database information. You can load item and mob databases directly to here and read from here instead of the traditional rAthena directory. There are many things to control inside here, especially if you're troubleshooting.
(You also have an App icon in your menu.)
image.png.2fef9e91b40eb6fbd01f817e0a85418c.png

 

 

STEP FIVE: Getting Green (Online)

Great! You're this far. Not much more to do from here.

We're going to now navigate to your rAthena directory and edit the "char_athena.conf" script located in:

/home/raguser/rAthena/conf/char_athena.conf


Open the file with any text editor, the default one will work. Inside this file, near the top, will be the lines that show your Name & Password. These are for your Login database we set up earlier for phpMyAdmin (PMA).
Search for and change the values to a random name and password:

// Server Communication username and password.
userid: s1
passwd: p1

For this step it is recommended to use random password generator of some sort. This never needs to be entered in manually anywhere. You can copy-paste it everywhere in this guide.
In this example we are changing it to:

userid: 4Xy3NAKxnl3sk6Aj
passwd: 79y59S3m8lWmMDMS

 

Now the Server's username and password are set, we can change the "inter_athena.conf" file so that the server can read our database we set up. Navigate to:

/home/raguser/rAthena/conf/inter_athena.conf

This is where we are going to change some access information so the server can read through our MySQL login we made earlier. Find and change:

// MySQL Login server
login_server_ip: 127.0.0.1
login_server_port: 3306
login_server_id: raguser
login_server_pw: StrongPassword
login_server_db: ragserver
login_codepage:
login_case_sensitive: yes

ipban_db_ip: 127.0.0.1
ipban_db_port: 3306
ipban_db_id: raguser
ipban_db_pw: StrongPassword
ipban_db_db: ragserver
ipban_codepage:

// MySQL Character server
char_server_ip: 127.0.0.1
char_server_port: 3306
char_server_id: raguser
char_server_pw: StrongPassword
char_server_db: ragserver

// MySQL Map Server
map_server_ip: 127.0.0.1
map_server_port: 3306
map_server_id: raguser
map_server_pw: StrongPassword
map_server_db: ragserver

// MySQL Web Server
web_server_ip: 127.0.0.1
web_server_port: 3306
web_server_id: raguser
web_server_pw: StrongPassword
web_server_db: ragserver

// MySQL Log Database
log_db_ip: 127.0.0.1
log_db_port: 3306
log_db_id: raguser
log_db_pw: StrongPassword
log_db_db: log
log_codepage:
log_login_db: loginlog

 

The last location we need to navigate to are our map server configurations. For this we will navigate to:

/home/raguser/rAthena/conf/map_athena.txt

Change the username and password for the server. It's the same as earlier:

userid: 4Xy3NAKxnl3sk6Aj
passwd: 79y59S3m8lWmMDMS

Now add (or uncomment) the following lines:

char_ip: 127.0.0.1
char_port: 6121
map_ip: 127.0.0.1
map_port: 5121

 

In this part of the step we will configure the client to match your packet version.

 

First we need to ensure "make" is installed. Enter in:

sudo apt install make

 

We'll need to give execution access to the configure file. Enter inside the rAthena directory (cd /home/raguser/rAthena) :

sudo chmod a+x ./configure

Then we are going to configure the server packet to match the client we downloaded.

./configure --enable-packetver=YYYYMMDD

The YYYMMDD is your client version for your server.exe. Our example is going to be 20211103:

./configure --enable-packetver=20211103

Once you've done that we're all ready to get the green light. Let's test it out!

Let's make a clean slate! Enter in the command while still inside your rAthena directory:

make clean

Now let's start constructing the server:

make server

After that's done loading, let's give execution access to the start files & servers:

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

 

Time to start it up! (Make sure you're inside the rAthena directory)

To start the server:

./athena-start start

To stop the server:

./athena-start stop

To restart the server:

./athena-start restart

To check the status:

./athena-start status

We're online!

image.png.6a14217274b4c1a02573d6fef1e5f1c1.png

 

 

EXTRA STEPS (OPTIONAL)

 

STEP SIX: DNS. (Mask your IP)

So many of you, like myself, would like to mask your IP address and the best way to do this is to use a domain name service to mask our IP. But does this mean you can't find my IP?
No. This does not mean your IP is hidden completely. It just means people have an easier way of accessing your website on a more reliable and trusted connection. In this part of the guide we will go through the process of obtaining and setting up the DNS on your personal dedicated server. Let's start by understanding what DNS means. I'll be quick.

Quote

The Domain Name System is a hierarchical and distributed naming system for computers, services, and other resources in the Internet or other Internet Protocol networks.
It associates various information with domain names assigned to each of the associated entities.

What this is telling is, is that we can now take one thing (our IP) and mask it with another thing (domain name). That's short enough.

Now some might be wondering... "Don't I need a website and a host for all of that?"
The answer is Yes. We set that all up in the previous steps of this guide. You're all ready good to go.


The first step is to navigate to your favourite (and trusted) domain name service provider. There are many out there that a simple google search can discover. In this example we are going to use Domain.com. It's affordable, takes Paypal, and has everything we need neatly displayed.

Right in the middle of the landing page, you'll notice a search bar. It's large and ahrd to miss. This is where you will type your domain name you want to look for. Don't worry about attaching the endings onto it (.com, .net, etc) as it will give you a list of all the available ones.

image.thumb.png.d996969d31974d24fd54822c77f09cff.png

Purchasing a domain will create an account for you using the details entered in during the billing process. The basic domain I purchased costs slightly more because it's a ".net", which holds a premium standard these days. You don't need to worry about protection and SSL either. We will be managing that all from the server computer as well. For free.

image.png.a7e7288f5ebcea47646837183669ea39.png

Once you find a domain name that fits what you want to achieve and your account was successfully created, it's time to navigate to your email and verify the website. This process is necessary to get the site online.
image.thumb.png.1ab14fea9fe178d0e4e017367f329680.png

image.png.b995d2e4557dd2c8488999e2114dbee9.png
We are now authenticated and ready to move onto the next part of this step.

Now that we have a domain, what do we do now? How do we ge this domain name we now own onto mask your personal address? Keep following along. We're almost there!

To confirm we have everything, in case there was an issue before, we're going run, in the terminal, the command:

sudo apt update && sudo apt upgrade -y && sudo apt install apache2 -y

Next we'll need a couple library files for the server to read the data. The following command will give us those libraries:

sudo apt install php libapache2-mod-php php-mysql -y

Now that we made some changes, it's always good to verify things are still where we left them. Let's verify PHP again to make sure it's the same version as before (8.2.2)

php -v


Earlier we made a web server. Now it is time to configure it!
Enter in and customise the name:

sudo mkdir /var/www/customName
sudo chown -R raguser /var/www/customName

This creates a folder and gives us full ownership of it inside the webserver directory. The custom name is for security measures. This is where we will upload our website and all the web files later. First we need to make a configuration file to run it properly. To do that we must enter in and adjust the name of:

sudo nano /etc/apache2/sites-available/customName.conf

An empty screen will appear. This is what we want. Now we can populate it with all the information necessary to maintain the web server. I recommend pasting this into a notepad and changing the values as needed. You will need your web site name, user name,custom folder name we made moments ago and your public IP address (v4). Change the values and paste it in to the blank page:

<VirtualHost *:80>
    ServerName localhost
    ServerAlias kingsman-gaming.net
    ServerAdmin [email protected]
    DocumentRoot /var/www/customName
    ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Now the website is almost ready. We've given it instructions where to go. All we have to do now is verify it and enable scripts for the site to operate.
Let's start by reloading our web server.

sudo systemctl reload apache2

You may have to reload the apache2 service. If this appears simply run the command again:

sudo systemctl reload apache2

This will appear a couple times through this part.
Next we need to enable the default script. To do this we will run a command called "a2dissite". What this does is uses system links to run the website and disaables them when needed. Once enabled, we can set and forget even after reboots.

sudo a2dissite 000-default

Now we're going to do the same thing, except for the config file we just created above. The name must be exact:

sudo a2ensite customName

Let's test the config to see if it throws any errors:

sudo apache2ctl configtest

It looks like we got an error! It reads:

Quote

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

If you encounter this, it's a simple fix!
Enter the command to edit the following file:

sudo nano /etc/apache2/apache2.conf

Now we need to go to the bottom of the page and insert (at the very bottom) :

ServerName localhost

And now we want to reload the apache2 service one more time:

sudo systemctl reload apache2

 

Finally, we must route our public IP to the domain name. This is done in that DNS menu on our domain host website. Let's navigate back to Domain.com and set this up.

image.png.b9f25796c0ad466f0be97e73c160ed1e.png

Here we want to edit (or add if it's not here) the "A record" that points to the host configured IP address. We will  simply click edit to change the existing record and have it reflect (and edit to match your public IP) the values below:

A             @             127.0.1.1

And to prepare things for the next steps, we are going to navigate to back to our basic domain settings and make sure the settings reflect the following: (Auto-renew optional)
image.png.2be4e65dce30cbe978e134069450cc66.png

This is telling us all the options are disabled. We won't be needing any of them supplied by the host.

That's it for this part! Our web server is ready for a website to be added and for the DNS to be redirected in our network settings. In the next step we will go through securing the website with a security certificate. It's free and easy to set up.

 

 

STEP SEVEN: Getting SSL Certified (HTTPS)

Quote

SSL, or Secure Sockets Layer, is an encryption-based Internet security protocol. It was first developed by Netscape in 1995 for the purpose of ensuring privacy, authentication, and data integrity in Internet communications. SSL is the predecessor to the modern TLS encryption used today.

In this step we're going to get that SSL set up. Currently when we access our website it says HTTP. We are going to make it say HTTPS.

Start by registering to SSL For Web. It's free and easy to set up.

 image.png.92ade298818425997ac6ca783e757f74.png

After registering, we're going to go right to the top right and click the create button.

image.png.27b8a754873f4b0afab6f1cbf315bdf7.png

You will be given two options. DNS & HTTP. We are going to select DNS to continue. You'll also need to enter your domain name to continue.
image.png.93121943aee4860207e13ef27508c9d6.png

This is where it gets a little more complicated, so follow closly.
You will be given two codes to enter into your DNS register. To find this, you will navigate to where you purchased the domain name and modify the existing DNS service to include these values. Simple, right?

In our example we used Domain.com. So we will continue using them.

Log in and navigate to your domain. On the left side panel you will have some options. Select the one that says DNS & Nameservers.

image.png.dee78ce18b698ff6dafbec31d9158309.png
image.png.e0dc0ab633559c287b860a5c183e5a2e.png

You will get a window like this:

image.thumb.png.028ff87febf8f5f9e964bc82fe553a40.png

We are going to click DNS Records.

image.png.b461f148e546cd9acebfa1dd4f29a235.png

This is where we will enter those values SSL generated for us. Go back to the SSL page and copy the first value on the left. This is a challenge domain for your domain name.

image.png.3eab0a0a9fbb28485219e5eec4e7b10f.png

Go back to your DNS records and enter in a new record. The record type we want is TXT.

Paste inside the "Name" box the value we jsut copied.
Go back to SSL and copy the value on the left. This is going to be pasted in the "Content" box.
Set the value to 1/2 hour and hit confirm.

image.thumb.png.7ceef58b628f5afe03306cfa90941793.png

Finally go back and verify that it worked. (It can take up to 30 minutes to fully work, but is usually quicker dependingon the service.)

image.png.18130f78917a96fe5b3412252d52da58.png  image.png.53213fabcf29a75a369f837bb5d1e512.png

There is a status checker so you don't need to submit every time. Use the scroll bar to go to the right and check the status.

image.png.73a9c3ccfdc37f7b4f096a1271874c18.png 

 

Now that we have the green light and a security certificate is added to the domain, we can download the certificates and add them to the server.

image.thumb.png.89598d4a1c0de1e5d7771e7e22db0190.png

There are two main types of certificate for use and a bundled version. All we need in this example is the Certificate and Private Key. Now that we have them, how do we add them?

Leave this page open for now, as we will need it shortly, and navigate back to your terminal. We're going to enter a few commands to get things set up on our dedicate server.
Enter in to edit your certificate file: (rename to your website)

sudo nano /etc/ssl/certs/kingsman-gaming.net.crt

Then paste your certificate value that was given to you. We're looking for the Certificate.

image.png.ca7c24a36da244b80579b9868e41e2f1.png

It now looks good to save! (CTRL-X, then enter Y to confirm)
image.png.a38a64821fe9b824fc225050b8de1a45.png

Now we must give it the key to the certificate. Enter in and edit the file:

sudo nano /etc/ssl/private/kingsman-gaming.net.key

We want to populate it with the key that SSLForWeb gave us. Go ahead and paste that in, then save the file.
The last certificate we're going to add is the CA bundle. This will be used in the later steps, but let's add it now since we're here. Create a new file and give it adifferent name. In this example we jsut added ca. to it:

sudo nano /etc/ssl/certs/kingsman-gaming.net.ca.crt


Certificates are added and ready to go. Here we will go back to our server config file we made earlier and set it up for SSL encryption. Open:

sudo nano /etc/apache2/sites-available/customName.conf

We want to change the values to reflect:

<VirtualHost *:443>
   SSLEngine on
   SSLCertificateKeyFile /etc/ssl/private/kingsman-gaming.net.key
   SSLCertificateFile /etc/ssl/certs/kingsman-gaming.net.crt

   ServerName localhost
   ServerAlias kingsman-gaming.net
   ServerAdmin [email protected]
   DocumentRoot /var/www/customName

   ErrorLog ${APACHE_LOG_DIR}/kingsman-gaming.net_error.log
   CustomLog ${APACHE_LOG_DIR}/kingsman-gaming.net_access.log combined

   <Directory /var/www/customName>
      Options FollowSymlinks
      AllowOverride All
      Require all granted
   </Directory>
</VirtualHost>

Then enable SSL to run scripts:

sudo a2enmod ssl


Let's break that down....


<VirtualHost *:80> is set to a standard, non-secured, port. We updated this to a secure port to allow the security certificates through.

We added three lines to the top. These lines will be read first and indicate we are turning the SSL Engine ON, setting the Certificate Key file to our private ssl folder, and setting the Standard Certificate file to our certificate folder.

And at the bottom we added some additional options for some System Links, Overrides, and Permission grantingNow the server can read all the security changes we made!

Once we save that file we are going to enable the SSL scripts in the server. This was done simply with one command.


With all this done, we have only one more step left to complete before we can fully set up SSL on the server. We need to allow our SSL access through the firewall. We can do this very easily with the following commands:

sudo ufw allow 443

Your firewall should now appear with these ports for all of default Ragnarok services: (Check out open allowed services with sudo ufw status)

443                       ALLOW       Anywhere 
5121                      ALLOW       Anywhere
6121                      ALLOW       Anywhere
6900                      ALLOW       Anywhere
3306                      ALLOW       Anywhere
80                        ALLOW       Anywhere
22                        ALLOW       Anywhere
21                        ALLOW       Anywhere

If you don't ahve an active firewall you can enable it with:

sudo ufw enable


With all this added, we are now going to check the syntax for the apache2 congifuration to make sure it's still "OK" and restart the apache2 service:

sudo apache2ctl -t
sudo systemctl restart apache2

 

Common issue after this step:

Quote

AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/customName.conf:
Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Action '-t' failed.

This is caused because the SSL scripts have to be passed through the system still. To do this we can enter in two commands to set this up:

sudo a2enmod ssl
sudo systemctl restart apache2

 

That's it for this step! We now have an SSL connection for our webserver.

In the next section we will go through various methods of setting up the File Transfer Protocol (FTP) for our webserver. This is great for setting up files from your server for others to download. Users can download files directly from the web server.

 

 

STEP EIGHT: File Trasnfer Protocol (FTP)

Quote

File transfer protocol (FTP) is a way to download, upload, and transfer files from one location to another on the Internet and between computer systems. FTP enables the transfer of files back and forth between computers or through the cloud. Users require an Internet connection in order to execute FTP transfers.

We're going to enable this on our server to allow users to download various files we set up in the download folder. Let's start by making that folder. Change directory to your web directory. We modified it earlier above:

cd /var/www/kingsman/

Now create a directory:

mkdir download

 

We now have a folder where we will be adding out downloadable files. Let's get the libraries ready for the web server.
Enter in:

sudo apt-get update && sudo apt-get install openssh-server

It will be a linear installation. Once it completes we can check the status of it:

sudo systemctl status ssh

If it failed to start load it again with:

sudo systemctl start ssh 

Once we set the configs we're all ready to go. Edit the file:

sudo nano /etc/ssh/sshd_config

These settings will be added at the very bottom of this document. Scroll to the bottom, add & edit the following values:

Match User raguser
    ForceCommand internal-sftp
    PasswordAuthentication yes
    ChrootDirectory /var/www/kingsman/download
    PermitTunnel no
    AllowAgentForwarding no
    AllowTcpForwarding no
    X11Forwarding no

Save the document and exit. (CTRL + X then Y & Enter)

Restart SSH with:

sudo systemctl restart ssh

We now have a fully functional FTP server attached to the web server.

Now to get links for your files, you'll need to understand how the folders work in the web server.

This part is completely ignored in the link you will generate:

/var/www/kingsman/

Your link will be the default web address, so let's start with that:

https://kingsman-gaming.net/

That's the start. Now we need to add our download folder.

We know the default location is /var/www/kingsman/ directory, so this means kingsman-gaming.net is that location. To add the downloads folder we simply just separate it with a " / " and add the download directoy, exactly how it's spelt,in the file hierarchy:

So /var/www/kingsman/download becomes:

https://kingsman-gaming.net/download/

You can add as many directories as you can fit into the web address search bar and break off from the download folder to download other parts of the site.
You'll add the file name to the link for which ever file you want to download. For example, I want to download VLRO.zip:

https://kingsman-gaming.net/download/vlro.zip

Now we have a place players can download our server from. Simply upload your files inside this download folder and send the link to your players to download.

In the next step we will go through how to create a launchable version of Windows 10 wil your Ragnarok Online server set up on it. We will also go through various tools that will be useful to development.

 

 

STEP NINE: Emulating Windows 10, Ragnarok & RO Tools (QEMU/KVM)

Quote

QEMU is a machine emulator that can run operating systems and programs for one machine on a different machine. However, it is more often used as a virtualiser in collaboration with KVM kernel components.
Kernel-based Virtual Machine (KVM) is a software feature that you can install on physical Linux machines to create virtual machines.

In this step we will be going through how to build and run a virtual machine based on Windows 10 operating system with our Ragnarok Online server installed onto it.

Make sure to download Windows 10 ISO while we work. This will save some time later. You may also want to consider moving it to a new directory inside your Documents folder. We'll be doing this for our example moving forward, as well.

 

Start by check that your system is Virtualization Ready. Enter in the terminal:

egrep -c '(vmx|svm)' /proc/cpuinfo

If your system is Virtualization Ready it will appear with a number greater than 0. My number came out as 16, so we're good to check if the system is supported. To do this enter in:

kvm-ok

If the system does not have the checker, you can enter this command to enable it:

sudo apt install cpu-checker -y

Now that we found out we can support virtualization it's time to install it, along with the librarfies neeeded to run it. Enter the following command to run all of this in one go:

sudo apt install qemu-kvm virt-manager virtinst libvirt-clients bridge-utils libvirt-daemon-system -y

We're going to run two more commands to make sure we have the virtualization daemon. Enter in:

sudo systemctl enable --now libvirtd
sudo systemctl start libvirtd

Now check the status of to make sure it's online and everything is green:\

sudo systemctl status libvirtd

Everything looks good so far!
image.png.5f74a5df74d578e17cfbf0d97bc8af7b.png

Before we can run the program we need to give our user specific permissions to access the daemon. To do this we will enter in:

sudo usermod -aG kvm $USER
sudo usermod -aG libvirt $USER

We are now ready to launch!

You can start the application in the application menu using the icon it supplies. (It can take a minute to populate)
image.png.e6b5631be7ebb2a90881fe34c075e364.png

If you can't find it, or it hasn't appeared yet, you can manually run it with the command:

sudo virt-manager

You should now have a window that looks like this:

image.png.a20e881823a607517328a8a99b7a485a.png

If you experience an error trying to connect after finishing up to this part of the step and it reads something along the lines of:

Unable to connect to libvirt qemu:///system.Verify that the 'libvirtd' daemon is running.
Error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': Permission denied

It is recommended to restart your computer and try connecting. Sometimes after the installation it won't have all permissions set properly. A full restart of the system can resolve this.

 

Now that we are set up, it's time to create a virtual machine!

Go ahead and click the New Machine button at the top left.
image.png.dbc98b7f57026dda58db46b8ff900aa9.png


We're going to select Local install media from the list and select the ISO file we downloaded at the start of this step.
(If you didn't donwload it before, now is a good time to. While you're waiting you can reflect over the steps you've went through to get this far. It is good to understand the system and how you got here.)

image.png.868a71c10b0b8a349a72429c90cb255a.png

We'll want to click "Browse..." and a new window will appear. Here we have our default filesystem directory. This is a default directory that is given with the application. We don't have files in this folder so we won't focus on this.

image.png.9401389a8cbd6ac8cb1b594c76a04b23.png

At the bottom left, there's green " + ". Click it.

image.png.54403b8d6e87eecafbb875a8b77709fc.png

Now we are presented with options for renaming the pool, changing the type of file it is, and setting the target path for where to read and write data. We are only going to focus on two of these options in this step. Name & Target Path.

We'll give it the name "DiskImages", though you can name it anything you want, and we want to select the path to be the folder we created inside our Documents which holds the Windows 10 ISO.

 

We now have a link to this folder inside the KVM.

If we select it, we can now see the Windows 10 64 bit ISO is there. We will click it and Choose Volume
image.png.5208f558c5d408246dde4a70b8366faf.png

The applicatiion will likely guess that it is Windows 11, so we need to uncheck that box and change it from an 11 to a 10.

image.png.ea9b85cd0da02220138b939671a99aa2.png

Change to
image.png.63c68abea6d5bf09b2e6765bcc0b82e3.png

Press Forward and agree to the promt. You can click the Don't Ask button for future changes.
image.png.1f983526fc05824a99cdebc4c8d5f390.png

Now we must set the amount of RAM and Cores to use. We can change this any time after shutting the virtual machine down. For now, we will use the default 8G and 4 Cores. (Recommend: 3G RAM or more, 2 cores or more for this setup)
image.png.03fc41aaf85704e6702b752128a29bc8.png

The next part of this step is to create the virtuale machine's hard drive. To do this we need to let the VMM do a rather long process to the 32 GB of space that will add a system file to a size we pre-determine, and it will allow us to boot Windows 10 off that space and dedicate it a hard drive to store files. It sounds complicated, but it's really simple to do. It just takes some time if you have larger spaces to work with.

Moving forward, we much select "Enable Storage for this virtual machine" and we will then go to the bottom and select "Create a dusk image for the virtual machine" and click "Forward".
image.png.f73d7d3fd84405fa1b7829f30de4f8cb.png

If we get asked to grant search permissions for the path. Click YES.

Now we are ready to create the Windows 10 disk space. Double check the information is correct, mainly the Windows 10 operating system doesn't say Windows 11.

image.png.7acf9c0927b967358c4cbe284c9b6edc.png


It will launch automatically for the first time on Finish.

You will now be able to set up your emulated Windows 10.

image.thumb.png.bd142c90380dbbd137428b7ce5c33334.png

(If you encounter...)

ERROR:

Quote

Failed to start. Error: Cannot access storage file '/home/raguser/RagDisk/file.img" : Permission denied.

If you experience an error, roughly like the one I created above, it's possible that the QEMU user does not have access to this directory still. You can manuall add this access very easily. Enter in the command to check the permissions, first:

The output should look close to this:

image.png.b9206f12347c0f9af2d76659b969eadc.png

 

This is showing us that our QEMU is not here on the list. Let's add it:

sudo setfacl -m u:libvirt-qemu:rx /home/raguser/RagDisk

 Now if we run the command to check it again:

sudo getfacl -e /home/raguser/RagDisk

We can see that the user is added successfully.

image.png.61b0719eb720fbfbf6d051069b6f0cd8.png

Finally, Restart the Virtualization library and you're ready to continue on to the next parts of this step:

sudo systemctl restart libvirtd

You should be ready to launch now!

We've got Windows 10 running and Updated as much as it can get. We're going to install a few necessary applications to run our programs and the game itself.
Download the following files from the following (trusted) sources:

-Microsoft Direct X Runtime
-Visual C++ Redistributable for Visual Studio 2015
-.NET 6.0 or 7.0
-(Optional) RO Tools List

With everything installed, and the system fully rebooted for good measure, we're ready to get started with the game installation.

Edited by Rivers
Text edits
  • Love 1
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

Included in this guide :

-Ubuntu OS Setup
-Web Server
-phpmyadmin Setup
-Game Server
-sFTP Setup
-SSH Setup
-Making Windows 10 on Linux
-Emulating all RO tools
-Emulating RO

 

Optional Recommended Resources : (terminal commands)

sudo apt install flatpak -y
sudo apt install wine -y
sudo apt install winetricks -y

Edited by Rivers
Steps
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.09
  • Content Count:  44
  • Reputation:   1
  • Joined:  06/22/23
  • Last Seen:  

Wow nice! this can connect through online players or it works only in local?

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

This will work as an online connection. you can even set up a web address linked directly from the computer to mask your IP.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  9
  • Topics Per Day:  0.09
  • Content Count:  44
  • Reputation:   1
  • Joined:  06/22/23
  • Last Seen:  

3 hours ago, Rivers said:

This will work as an online connection. you can even set up a web address linked directly from the computer to mask your IP.

Nice work! Thank you for sharing

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

Added a step for masking your IP with a domain name.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

Updated with SSL set up. HTTPS guide now available.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

-Edited to include DNS routing. Missed that last step to get the DNS pointing to your public IP.

-Added an extra piece of the step for SSL as it is not installed by default on the OS.

Edited by Rivers
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

-Added step how to make FTP server for sharing downloads with people.

-Touch ups on previous steps and minor corrections.

I ran this entire guide just now to ensure it works to this point.

Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

-Added step to Emulating Windows 10 on the system.
-Added cotnents to download and install to run various RO tools and game client.

Edited by Rivers
Link to comment
Share on other sites

  • 0

  • Group:  Members
  • Topic Count:  48
  • Topics Per Day:  0.01
  • Content Count:  175
  • Reputation:   21
  • Joined:  12/04/13
  • Last Seen:  

The guide is pretty much complete now. Since the start we've set up a server computer with a domain and a functional rAthena game server, then we went and emulated all Ragnarok Tools we would typcally use during the development process. This system is perfect for running a Ragnarok server for free. So well, in fact, I've been doing it for years privately.

Thanks for taking the time to read this guide. Leave a reaction if it helepd you. I can do basic support in this forum for members.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...