Difference between revisions of "Linux dedicated server"

From Team Fortress Wiki
Jump to: navigation, search
(Added a tip strongly recommending usage of a firewall.)
(Running the server: orangebox/steam_appid.txt)
Line 57: Line 57:
  
 
== Running the server ==
 
== Running the server ==
We're almost done. The server is installed. The only thing left is to run it, using a number of arguments. Change to the ''gameserver/orangebox/'' directory. There should be a script called <code>srcds_run</code>, which is what launches the game. A basic use of this script '''could''' be:
+
We're almost done. The server is installed. The only thing left is to run it, using a number of arguments. Change to the <code>gameserver/orangebox/</code> directory. In this folder, create a file called <code>steam_appid.txt</code> and put in there only the following number:
 +
 
 +
440
 +
 
 +
Next, in the same <code>orange box</code> folder, there should be a script called <code>srcds_run</code>, which is what launches the game. A basic use of this script '''could''' be:
  
 
  $ ./srcds_run -game tf -autoupdate -maxplayers 24 +map cp_badlands
 
  $ ./srcds_run -game tf -autoupdate -maxplayers 24 +map cp_badlands

Revision as of 10:02, 3 September 2012

Linux is one of the two platforms currently supported by Valve's dedicated server tool (HLDS), the other being Microsoft Windows. Basic installation and configuration for a Linux dedicated server is the same for all distributions, but small details, such as package names, directories, etc. may differ from distribution to distribution. It is recommended that you check your distribution's repositories for the required packages before continuing.

Reading this article

This article has been written according to standard Linux documentation syntax, meaning the following:

  • A command prefixed by # (a hash) is meant to be run as root. Most distributions have a separate root account; for other distributions such as Ubuntu, Linux Mint, Crunchbang, etc., the sudo prefix to a command will ensure the command is run as root.
  • A command prefixed by $ (a dollarsign) is meant to be run as a user.
  • ./ means "current working directory".

Requirements

A number of requirements exist in order to run a Team Fortress 2 server on the Linux platform, namely:

  • Write-access to the current working directory
  • glibc >= 2.3.6
  • Approximately 5GB hard-drive space (for a barebones server with no custom maps, sounds, etc.)
  • In the case of a 64-bit distribution, the package lib32gcc1 or ia32-libs is required to be installed. On CentOS you will need libgcc.i686 and likely glibc.i686 - yum install libgcc.i686 glibc.i686
  • If you are installing on CentOS, you will have to use this command before yum install ncompress
  • If you are installing on FreeBSD (which is not Linux at all), you must enable Linux compatibility in the kernel and install a base system via the ports collection. Instructions to get you started are located here.

Installation

There are a number of different ways to run a dedicated server. In this article, we will assume that a specific user (tf2server) has been created for the sole purpose of running a Team Fortress 2 server. In order to create a user, issue the following command as root:

# adduser tf2server

You will be prompted for a name, a password, along with other information; fill this out as you please. Then log out of your current account, and log in as tf2server.

Next up, create a directory and change to it. You can call it anything you like; I've picked "hlds":

$ mkdir hlds && cd hlds

The next thing we need to do is to download the dedicated server update tool (hldsupdatetool.bin), and change its permissions to be executable, allowing us to download the Steam binary required to download our gameserver. Finally, we run the binary.

$ wget http://storefront.steampowered.com/download/hldsupdatetool.bin && chmod +x hldsupdatetool.bin
$ ./hldsupdatetool.bin

When we run the binary, we're prompted to accept Valve's Terms and Conditions for using the update tool; after reading and agreeing to the terms included, type "yes", and hit Enter. The next thing to happen is that the steam binary should extract. Run it to download the latest version of the HLDS Update Tool:

$ ./steam
Checking bootstrapper version ...
Getting version 42 of Steam HLDS Update Tool
Downloading. . . . . . . . . . . .
Steam Linux Client updated, please retry the command

Do as prompted; repeat the same command. All we need to do now is to download the gameserver files, and launch it.

Create another directory, which will house the actual files of the gameserver (inside /home/tf2server/hlds). We'll call this one gameserver.

$ mkdir gameserver

Next up, let's ask Steam to download the Team Fortress 2 game files into that folder, using the following command.

$ ./steam -command update -game tf -dir gameserver

This runs the update command of the game tf (Team Fortress 2) into the directory gameserver/. Sit back and wait, this may take some time.

Running the server

We're almost done. The server is installed. The only thing left is to run it, using a number of arguments. Change to the gameserver/orangebox/ directory. In this folder, create a file called steam_appid.txt and put in there only the following number:

440

Next, in the same orange box folder, there should be a script called srcds_run, which is what launches the game. A basic use of this script could be:

$ ./srcds_run -game tf -autoupdate -maxplayers 24 +map cp_badlands

This launches a Team Fortress 2 server with a maximum of 24 players on Badlands which will download updates automatically. There are many more ways of configuring the server and running it, but this covers the basics.

screen

Many server operators choose to run the server under screen, as it allows you to switch between the console and the shell at will, as well as end your SSH session without killing the server. It can be installed via your distribution's package manager. The server can then be run with:

$ screen -m -S tf2 ./srcds_run parameters

where parameters is your normal srcds_run parameters. You can use Ctrl+A+D to minimize the console, and screen -r tf2 to bring it back up. Ctrl+D will terminate the session (make sure you use the killserver console command first) and Ctrl+A+[ will allow you to scroll through it. See the manual for more commands and parameters.

Automated startup at server boot

In the event of unexpected power outages, it might be usefull to automatically restart your server. The following example Debian LSB script can be used to automatically restart the server. Note that screen is used. This script should be named TF2-server and can be put in the folder /etc/init.d. After doing that, run:

$ update-rc.d TF2-server defaults

This should ensure a proper startup of the server after each reboot.

#!/bin/sh

### BEGIN INIT INFO
# Provides:          tf2-server
# Required-Start:    $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $named
# Should-Stop:       $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Team Fortress 2 server
# Description:       Starts a Team Fortress 2 server
### END INIT INFO

NAME="Team Fortress 2"
SCREENREF="tf2"
BINARYPATH="/home/tf2server/hlds/gameserver/orangebox"
USER="tf2server"
BINARYNAME="srcds_run"
PIDFILE="tf2server.pid"
OPTS="-game tf -autoupdate -maxplayers 32 +map mvm_decoy +ip XXX.XXX.XXX.XXX"

cd "$BINARYPATH"

case "$1" in
    start)
        echo -n "Starting the $NAME server... "
	if [ -e "$BINARYNAME" ]; then
            start-stop-daemon --start --pidfile $PIDFILE --make-pidfile --chuid $USER --user $USER --chdir $BINARYPATH --exec "/usr/bin/screen" -- -dmS $SCREENREF $BINARYPATH/$BINARYNAME $OPTS
        else
            echo "Could not find binary, aborting!"
            exit 5
        fi
        if [ `pgrep $BINARYNAME` ]; then
            echo "Done!"
        else
            echo "Failed!"
            rm -f $PIDFILE
        fi
    ;;
    stop)
        echo -n "Stopping the $NAME server... "
        killall $BINARYNAME > /dev/null 2>/dev/null
        rm -f $PIDFILE
        echo "Done!"
    ;;
    status)
        if [ -e $PIDFILE ]; then
            echo "$NAME server is running"
        else
            echo "No $NAME server running ($PIDFILE is missing)"
        fi
    ;;
    *)
        echo "Usage: ${0} {start|stop|status}"
        exit 2
esac
exit 0

Tips

  1. The first run of ./steam may hang while checking the bootstrap version. You will need to retry several times until it completes.
  2. server.cfg goes in orangebox/tf/cfg. For more information on configuring your dedicated server, see Dedicated server configuration.
  3. Remember to open ports 27000-27015 from your firewall if you expect people outside of your network to connect.
  4. If you don't have a firewall, get one. Exposing your server to the internet without a firewall is very risky.
  5. Get an error like: "-bash: ./hldsupdatetool.bin: No such file or directory"? If on Debian, try installing lib32gcc1. "apt-get install lib32gcc1"

See also