Editing MG/Dedicated Server
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 2: | Line 2: | ||
== Requirements == | == Requirements == | ||
− | To host your own headless server, you will need a dedicated or virtual private server which roughly meets the minimum requirements the [ | + | To host your own headless server, you will need a dedicated or virtual private server which roughly meets the minimum requirements the [http://sourceforge.net/apps/trac/megaglest/export/HEAD/trunk/docs/README.txt MegaGlest README] lists. You should actually be okay with 512 MB unallocated RAM, though, meaning remaing free memory after it has fully started up. Of course, you do not actually need to have a good video/graphics or audio card. You currently do need to have ''a'' (any) video card, though. |
==Hosting== | ==Hosting== | ||
− | + | 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. Prices range from less than US $10 per month to amounts which would be better spent on a dedicated server. Please check websites such as [http://www.lowendbox.com/ lowendbox.com], [http://www.webhostingtalk.com webhostingtalk.com] and [http://webhostlist.de webhostlist.de] which compare and discuss various offers. | |
− | There are also few 'free' VPS offers. All we can say there is that Amazons [http://aws.amazon.com/free/ free-for-one-year VPS] and [http://www.host1free.com/free-vps/ Host1Free's VPS] do not provide sufficient resources to run a dedicated gameserver while ''some'' of the offers by [http://freevps.us/page-requirements.html FreeVPS.us] may work based on the resources they list. But we haven't actually tried this, since, of course, this offer is not entirely free but you need to dance the hula-hula. Generally, there are only few ''free'' offers on the Internet now, and those are usually by idealistic computer enthusiasts, almost never by companies - those always come with strings attached (which is completely understandable from their profit driven perspective). There are also donation based offers, or organisations operating without the target of/need to | + | There are also few 'free' VPS offers. All we can say there is that Amazons [http://aws.amazon.com/free/ free-for-one-year VPS] and [http://www.host1free.com/free-vps/ Host1Free's VPS] do not provide sufficient resources to run a dedicated gameserver while ''some'' of the offers by [http://freevps.us/page-requirements.html FreeVPS.us] may work based on the resources they list. But we haven't actually tried this, since, of course, this offer is not entirely free but you need to dance the hula-hula. Generally, there are only few ''free'' offers on the Internet now, and those are usually by idealistic computer enthusiasts, almost never by companies - those always come with strings attached (which is completely understandable from their profit driven perspective). There are also donation based offers, or organisations operating without the target of/need to generating profits (community service / hosting / colocation providers), which can be a good choice. |
==Operating system== | ==Operating system== | ||
− | Since we have to decide for one operating system, we go the easy (and good) way and use Debian GNU/Linux | + | 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. | 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. | ||
Line 23: | Line 23: | ||
==MegaGlest installation== | ==MegaGlest installation== | ||
− | 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 server, this is the point to start following this tutorial. | + | 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'': | Still working as ''root'', create a new restricted user ''megaglest'': | ||
− | adduser megaglest | + | adduser megaglest |
− | Also as ''root'', install dependencies for MegaGlest | + | Also as ''root'', install dependencies for MegaGlest: |
− | apt-get install | + | apt-get install bzip2 p7zip-full libsdl1.2debian-alsa libglu1 libsm6 libopenal1 libvorbisfile3 libglew1.5 libfontconfig1 libldap-2.4-2 libidn11 |
− | |||
− | |||
Now switch to the ''megaglest'' user, this is the last time you need to work as ''root'': | Now switch to the ''megaglest'' user, this is the last time you need to work as ''root'': | ||
Line 39: | Line 37: | ||
su -l megaglest | su -l megaglest | ||
− | + | [http://megaglest.org/download.html Download] binary and data archives for the latest stable MegaGlest release. On the download page, scroll down to the table and copy the two URLs there. If your server runs a 64 bit operating system (the ''arch'' command should say ''x86_64'' then) then go for the 64 bit Linux binary and data archives, otherwise use the 32 bit ones. You can download these using ''wget'', here's an example on how to do it with MegaGlest 3.6.0.3 for a 64 bit server: | |
− | wget | + | wget http://sourceforge.net/projects/megaglest/files/megaglest_3.6.0.3/megaglest3.6.0.3_i386_64_linux_bin.tar.bz2 |
− | wget | + | wget http://sourceforge.net/projects/megaglest/files/megaglest_3.6.0.3/megaglest-data-3.6.0.3.tar.xz |
− | + | Unpack, add a convenient symlink, then (optionally) clean up: | |
− | + | tar -xJf ./megaglest-data-3.6.0.3.tar.xz | |
− | + | ln -s megaglest-3.6.0.3 megaglest | |
− | + | cd ./megaglest-3.6.0.3 | |
− | + | tar --exclude='*/.svn/*' -xjf ../megaglest3.6.0.3_i386_64_linux_bin.tar.bz2 | |
− | tar -xJf | + | rm start_megaglest_g3dviewer start_megaglest_mapeditor megaglest_editor megaglest_g3dviewer |
− | + | mkdir -p ~/.megaglest | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | - | ||
− | |||
− | |||
− | |||
Do a test run: | Do a test run: | ||
− | megaglest@gameserver:~/megaglest- | + | megaglest@gameserver:~/megaglest-3.6.0.3$ ./start_megaglest --version |
− | megaglest v3. | + | gamedir [/home/megaglest/megaglest-3.6.0.3] |
− | Compiled using: GNUC: | + | Looking for LDCONFIG []... |
− | + | LDCONFIG environment variable is not set... | |
+ | Found LDCONFIG using which [/sbin/ldconfig]... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libopenal.so.1] was found in [/usr/lib/libopenal.so.1] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libdirectfb-1.2.so.0] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libfusion-1.2.so.0] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libdirect-1.2.so.0] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libjpeg.so.62] was found in [/usr/lib/x86_64-linux-gnu/libjpeg.so.62] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libpng15.so.15] is missing, attempting to find and link to a newer version if available... | ||
+ | new library link [/lib/x86_64-linux-gnu/libpng12.so.0] pointed to from [/home/megaglest/megaglest-3.6.0.3/lib/libpng15.so.15] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libcurl.so.4] was found in [/usr/lib/libcurl.so.4] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libxerces-c-3.1.so] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libicudata.so.40] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libicuuc.so.40] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libGLEW.so.1.5] was found in [/usr/lib/libGLEW.so.1.5] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libGLEW.so.1.5] was found in [/usr/lib/libGLEW.so.1.5] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libogg.so.0] was found in [/usr/lib/libogg.so.0] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libvorbis.so.0] was found in [/usr/lib/libvorbis.so.0] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libvorbisfile.so.3] was found in [/usr/lib/libvorbisfile.so.3] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libfontconfig.so.1] was found in [/usr/lib/x86_64-linux-gnu/libfontconfig.so.1] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libfreetype.so.6] was found in [/usr/lib/x86_64-linux-gnu/libfreetype.so.6] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libgnutls.so.26] was found in [/usr/lib/x86_64-linux-gnu/libgnutls.so.26] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libldap_r-2.4.so.2] was found in [/usr/lib/libldap_r-2.4.so.2] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libresolv.so.2] was found in [/lib/x86_64-linux-gnu/libresolv.so.2] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/liblua5.1.so.0] was found in [/usr/lib/liblua5.1.so.0] | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libftgl.so.2] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libircclient.so.1] is missing, attempting to find and link to a newer version if available... | ||
+ | default library [/home/megaglest/megaglest-3.6.0.3/lib/libdl.so.2] was found in [/lib/x86_64-linux-gnu/libdl.so.2] | ||
+ | megaglest v3.6.0.3 | ||
+ | Compiled using: GNUC: 40401 [64bit] on: Jan 24 2012 13:33:42 | ||
+ | SVN: [Rev: 3080] - using STREFLOP | ||
+ | megaglest@gameserver:~/megaglest$ | ||
− | If MegaGlest fails to start here, please check the [http://faq.megaglest.org FAQ] . | + | These ''default library'' messages (which are sent to to the error output stream) are completely normal and can be ignored unless errors about missing libraries are reported. The only line returned to standard output are those three last lines which provide the version info. If MegaGlest fails to start here, please check the [http://faq.megaglest.org FAQ] . |
==MegaGlest configuration== | ==MegaGlest configuration== | ||
Line 100: | Line 101: | ||
You are now ready to go. However, for advanced configuration, many more options which may matter for a game server are available. Here is an optional example for a more complex <code>~/.megaglest/glestuser.ini</code> file: | You are now ready to go. However, for advanced configuration, many more options which may matter for a game server are available. Here is an optional example for a more complex <code>~/.megaglest/glestuser.ini</code> file: | ||
### For more information on these options, please consult | ### For more information on these options, please consult | ||
− | ### [[MG/INI| | + | ### [[MG/INI|http://wiki.megaglest.org/INI]] |
### Network settings | ### Network settings | ||
NetPlayerName=Edit_glestuser.ini | NetPlayerName=Edit_glestuser.ini | ||
− | # | + | #ServerPort=61357 |
− | # | + | #MasterServerExternalPort=61357 |
#FTPServerPort=61358 | #FTPServerPort=61358 | ||
#EnableFTPServer=1 | #EnableFTPServer=1 | ||
Line 111: | Line 112: | ||
#EnableFTPServerInternetTilesetXfer=1 | #EnableFTPServerInternetTilesetXfer=1 | ||
#EnableFTPXfer=1 | #EnableFTPXfer=1 | ||
− | #Masterserver=[[MG/INI| | + | #Masterserver=[[MG/INI|http://master.megaglest.org/]] |
### Logging | ### Logging | ||
Line 133: | Line 134: | ||
#FileArchiveExtension=.7z | #FileArchiveExtension=.7z | ||
− | <span style="font-size:13px;">These and all other glestuser.ini options are</span><span style="font-size:13px;"> </span>[[MG/INI|documented on this wiki]]<span style="font-size:13px;">. Note that they may change between releases, so when you upgrade your server to the latest version, be sure to read the | + | <span style="font-size:13px;">These and all other glestuser.ini options are</span><span style="font-size:13px;"> </span>[[MG/INI|documented on this wiki]]<span style="font-size:13px;">. Note that they may change between releases, so when you upgrade your server to the latest version, be sure to read the changelog and review the INI document.</span> |
==Firewall configuration== | ==Firewall configuration== | ||
Line 154: | Line 155: | ||
==Testing== | ==Testing== | ||
− | You should now be able to start a server and it should automatically publish to the | + | You should now be able to start a server and it should automatically publish to the master server (this can take up to two minutes). Currently available game servers are listed at [http://play.mg Play.MG] , so your server should show up there with its IP address and the server/player name you have set. If publishing to the master server does not seem to work try running the server with ''--verbose'' option as discussed in the [http://faq.megaglest.org FAQ] . |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Currently available game servers are listed at [http://play.mg Play.MG] , so your server should show up there with its IP address and the server/player name you have set. If publishing to the master server does not seem to work try running the server with ''--verbose'' option as discussed in the [http://faq.megaglest.org FAQ]. | ||
Once publishing succeeded, start MegaGlest on your desktop computer, connect to your new game server and play a test game, ideally with a another human network player who will help you test because there is a two network player minimum to start a game (contact us on hints how to work around this limit if needed). The first user connecting to a headless server controls it. If this user disconnects, the next user who connected already (or will connect) takes control. | Once publishing succeeded, start MegaGlest on your desktop computer, connect to your new game server and play a test game, ideally with a another human network player who will help you test because there is a two network player minimum to start a game (contact us on hints how to work around this limit if needed). The first user connecting to a headless server controls it. If this user disconnects, the next user who connected already (or will connect) takes control. | ||
− | A good test setup which stresses your server is an eight player game on the ''Eight Rivers'' map, with the ''Desert'' tileset, where all non-human slots are set to ''CPU Mega'' and every one of them is on a separate team. All human players can have their faction set to ''observer'' (set '' | + | A good test setup which stresses your server is an eight player game on the ''Eight Rivers'' map, with the ''Desert'' tileset, where all non-human slots are set to ''CPU Mega'' and every one of them is on a separate team. All human players can have their faction set to ''observer'' (set ''allow ''''observers'' in ''advanced options'' first) so you don't actually have to play this game but can just watch.''' |
Play this game for a while, pressing '?' (question mark) to activate ''debug view''. It will list the total number of units in this game. Once this reaches 500 and more check your servers' load (using standard Linux/unix utilities like ''top'', ''ps'', ''free'', ''iotop'' etc.) to see how it handles this game and to get an idea how games will feel for players on your server. Note that this setup is close to maxing things out, so things may get a bit slow here and there, but the game should not fail. | Play this game for a while, pressing '?' (question mark) to activate ''debug view''. It will list the total number of units in this game. Once this reaches 500 and more check your servers' load (using standard Linux/unix utilities like ''top'', ''ps'', ''free'', ''iotop'' etc.) to see how it handles this game and to get an idea how games will feel for players on your server. Note that this setup is close to maxing things out, so things may get a bit slow here and there, but the game should not fail. | ||
− | |||
− | |||
− | |||
==Game server automation== | ==Game server automation== | ||
− | |||
− | |||
− | |||
− | You | + | If you want to run the game server regularly, you can introduce some level of automation. You may want to make it start up automatically on boot. And you most likely want to have it quit and restart the game process after every played game to rule out side effects which may drain on system resources - remember, the headless server is still a pretty young feature, and restarting the game is very quick and does not hurt. Here's a crontab and a management script to do both of the above: |
− | + | wget http://dl.megaglest.org/megaglest-gameserver.tar.gz | |
− | + | tar xzf megaglest-gameserver.tar.gz | |
− | + | chmod +x start_megaglest_gameserver.sh | |
− | + | # 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 megaglest-gameserver.tar.gz cron | |
− | |||
− | |||
− | |||
− | crontab -e | ||
− | |||
− | |||
− | |||
− | |||
− | |||
After the next reboot, the gameserver should start up automatically. | After the next reboot, the gameserver should start up automatically. | ||
− | |||
− | |||
− | |||
==Status reporting== | ==Status reporting== | ||
Line 230: | Line 205: | ||
========================================= | ========================================= | ||
The reason this information is not available to the outside world by default is because it could stress the server (the server needs to handle these requests live at the same time a monstrous game may be going) but also to protect the players' privacy (it gives away IP addresses, language preference and system architecture of all connected players). This behaviour may change in the future. You, as a server admin, could already make it (or a subset of it) availabe now by either firewall rules (such as by forwarding inboound traffic on <external-ip>:61355 to 127.0.0.1:61355) or by means of a web server, which either proxies requests to 127.0.0.1:61355 (apache + mod_proxy) or provides access to a simple CGI script which wraps the output of <span style="font-family:monospace;">--headless-server-status</span> and adds HTTP headers to it. | The reason this information is not available to the outside world by default is because it could stress the server (the server needs to handle these requests live at the same time a monstrous game may be going) but also to protect the players' privacy (it gives away IP addresses, language preference and system architecture of all connected players). This behaviour may change in the future. You, as a server admin, could already make it (or a subset of it) availabe now by either firewall rules (such as by forwarding inboound traffic on <external-ip>:61355 to 127.0.0.1:61355) or by means of a web server, which either proxies requests to 127.0.0.1:61355 (apache + mod_proxy) or provides access to a simple CGI script which wraps the output of <span style="font-family:monospace;">--headless-server-status</span> and adds HTTP headers to it. | ||
− | |||
− | |||
− | |||
− | |||
==See also== | ==See also== | ||
Line 239: | Line 210: | ||
*[[Multiplayer]] | *[[Multiplayer]] | ||
[[Category:MG]] | [[Category:MG]] | ||
− | |||
− |