Difference between revisions of "MG/Dedicated Server"

From MegaGlest
Jump to navigation Jump to search
Line 79: Line 79:
  
 
Now you need to ensure that people can actually connect to it from the Internet so that it will get listed [http://master.megaglest.org on the master server]. For this to work, Internet originated traffic must be able to reach the server on '''''TCP port 61357'''''. For FTP functionality (not currently supported on headless servers by the time of writing) you also need to make Internet originated traffic on '''''TCP ports 61358 to 61366''''' reach the server.
 
Now you need to ensure that people can actually connect to it from the Internet so that it will get listed [http://master.megaglest.org on the master server]. For this to work, Internet originated traffic must be able to reach the server on '''''TCP port 61357'''''. For FTP functionality (not currently supported on headless servers by the time of writing) you also need to make Internet originated traffic on '''''TCP ports 61358 to 61366''''' reach the server.
 +
 +
You may now want to set a servername, this is currently done via the Playername option in glestuser.ini:
 +
 +
mkdir -p ~/.megaglest
 +
 +
echo 'PlayerName MyTestServer' > ~/.megaglest/glestuser.ini
 +
Obviously you can/should modify <code>MyTestServer</code> to anything you like the servername to be.
  
 
Automate the game server:
 
Automate the game server:

Revision as of 04:00, 5 November 2011

Starting MegaGlest 3.6.0 it is possible to host a dedicated headless game server. This means you can now install MegaGlest on a dedicated or virtual private server hosted in a data center, or a virtual server on your computer. This is can be quite useful since data centers do usually provide way better network connectivity at affordable pricing than ISPs can provide (and user can afford) in residential areas, meaning less people will drop out of games, and there will be less latency ('better ping'). Moreover, dedicated servers can run 24/7 so servers to play on can be available at any time.


Requirements

To host your own headless server, you will need a dedicated or virtual private server which meets the minimum hardware requirements the MegaGlest README lists. Of course, you do not actually need to have a video/graphics or audio card.

The cheapest way to host is probably to go with a Virtual Private Server (VPS). There are unbelievably many VPS providers out there and we have little to no experience with them so we can't really make a recommendation at this point. The only thing we know is that Amazon currently has an offer for free-for-one-year VPS on their cloud platform (conditions apply). Plus there is FreeVPS.us which provides what its name says if you strip naked and dance the hula-hula.

Operating system

Since we have to decide for one operating system, we go the easy (and good) way and use Debian GNU/Linux 6.0 (Squeeze). These steps may also work on later Debian versions as well as on Ubuntu servers.


Install a minimal Debian GNU/Linux server. This can be done with a Debian Netinstall CD image as well as by many other ways. The details are considered out of the scope of this manual - see the Debian website and installation manual.

You should now have a working minimal Debian server. Start by working as the root user. Depending on how you will manage this server you may want to install some additional packages:

apt-get install unattended-upgrades openssh-server less screen

If you installed an SSH server you can do the remaining installation remotely.

MegaGlest installation and configuration

The next steps are specific to the installation and configuration of MegaGlest on your dedicated server. If you already have a working multi-use(r) Debian 6.0 server, this is the point to start following this tutorial.

Still working as root, create a new restricted user megaglest:

adduser megaglest

Also as root, install dependencies for MegaGlest:

apt-get install bzip2 p7zip libsdl1.2debian-alsa libglu1 libsm6 libopenal1 libvorbisfile3 libglew1.5 libfontconfig1

Now switch to the megaglest user, this is the last time you need to work as root:

su -l megaglest

Download MegaGlest 3.5.3-beta1:

wget -O megaglest3.5.3-beta1_i386_64_linux_bin.tar.bz2 http://sourceforge.net/projects/megaglest/files/in_development/megaglest3.5.3-beta1_i386_64_linux_bin.tar.bz2/download
wget -O megaglest-data-3.5.3-beta1.7z http://sourceforge.net/projects/megaglest/files/in_development/megaglest-data-3.5.3-beta1.7z/download

Unpack and clean up:

mkdir megaglest
cd megaglest
7z x ../megaglest-data-3.5.3-beta1.7z
tar xjf ../megaglest3.5.3-beta1_i386_64_linux_bin.tar.bz2
# Careful: no typing errors, please!
find /home/megaglest/megaglest/ -name .svn -type d -print0 | xargs -0 /bin/rm -fr
rm start_megaglest_configurator start_megaglest_g3dviewer start_megaglest_mapeditor megaglest_configurator megaglest_editor megaglest_g3dviewer
mkdir -p ~/.megaglest

Do a test run:

megaglest@gameserver:~/megaglest$ ./start_megaglest --version
gamedir [/home/megaglest/megaglest]
Looking for LDCONFIG []...
LDCONFIG environment variable is not set...
Found LDCONFIG in /sbin [/sbin/ldconfig]...
default library [/home/megaglest/megaglest/lib/libopenal.so.0] is missing, attempting to find and link to a newer version if available...
new library link [/usr/lib/libopenal.so.1] pointed to from [/home/megaglest/megaglest/lib/libopenal.so.0]
default library [/home/megaglest/megaglest/lib/libdirectfb-1.2.so.0] is missing, attempting to find and link to a newer version if available...
new library link [/usr/lib/libdirectfb-1.2.so.9] pointed to from [/home/megaglest/megaglest/lib/libdirectfb-1.2.so.0]
default library [/home/megaglest/megaglest/lib/libfusion-1.2.so.0] is missing, attempting to find and link to a newer version if available...
new library link [/usr/lib/libfusion-1.2.so.9] pointed to from [/home/megaglest/megaglest/lib/libfusion-1.2.so.0]
default library [/home/megaglest/megaglest/lib/libdirect-1.2.so.0] is missing, attempting to find and link to a newer version if available...
new library link [/usr/lib/libdirect-1.2.so.9] pointed to from [/home/megaglest/megaglest/lib/libdirect-1.2.so.0]
default library [/home/megaglest/megaglest/lib/libjpeg.so.62] is missing, attempting to find and link to a newer version if available...
default library [/home/megaglest/megaglest/lib/libpng12.so.0] was found in [/lib/libpng12.so.0]
default library [/home/megaglest/megaglest/lib/libcurl-gnutls.so.4] was found in [/usr/lib/libcurl-gnutls.so.4]
default library [/home/megaglest/megaglest/lib/libxerces-c.so.28] is missing, attempting to find and link to a newer version if available...
default library [/home/megaglest/megaglest/lib/libicudata.so.40] is missing, attempting to find and link to a newer version if available...
default library [/home/megaglest/megaglest/lib/libicuuc.so.40] is missing, attempting to find and link to a newer version if available...
v3.5.3-beta1-GNUC: 40401 [64bit]-Nov  3 2011 23:48:39, SVN: [Rev: 2782], [STREFLOP]
megaglest@gameserver:~/megaglest$

These library messages are completely normal and can be ignored. All of them go to standard error. The only line returned to standard output is the very last one - the version info. Congratulations, MegaGlest works!

Now you need to ensure that people can actually connect to it from the Internet so that it will get listed on the master server. For this to work, Internet originated traffic must be able to reach the server on TCP port 61357. For FTP functionality (not currently supported on headless servers by the time of writing) you also need to make Internet originated traffic on TCP ports 61358 to 61366 reach the server.

You may now want to set a servername, this is currently done via the Playername option in glestuser.ini:

mkdir -p ~/.megaglest

echo 'PlayerName MyTestServer' > ~/.megaglest/glestuser.ini

Obviously you can/should modify MyTestServer to anything you like the servername to be.

Automate the game server:

wget http://dl.megaglest.org/megaglest-gameserver.tar.gz
tar xzf megaglest-gameserver.tar.gz
# Careful: only do this when there is not already a crontab for your user ('crontab -l' to check).
# In case there already is one then just add the contents of the 'cron' file to your crontab,
# by running crontab -e.
crontab cron
rm cron

After the next reboot, the gameserver should start up automatically. Once publishing to the master server succeeded you may connect to it from within your Desktops' MegaGlest installation. The first user connecting to a headless server controls it. If this user disconnects, the next joining user is in control.

After each played game, the game process will automatically quit, then respawn automatically. This is to rule out eventual side effects which may drain on system resources.

Use utilities like top and ps to inspect how things are going. Server logs are created at ~/.megaglest/server.log. If you run into any bugs, please report them at http://bugs.megaglest.org. If you have any questions, please discuss them at http://forum.megaglest.org/

Thanks for hosting a dedicated server!