• Please make sure you are familiar with the forum rules. You can find them here: https://forums.tripwireinteractive.com/index.php?threads/forum-rules.2334636/

Server Linux KF Dedicated Server Tutorial

Sekra

Grizzled Veteran
May 15, 2009
72
5
Kuopio, Finland, Europe
So.. I dont see much point in running a dedicated server on a system that I need to boot every now and then (talking about windows here) and I've been running Left 4 Dead, CS, DoD etc servers on my linux box for a while now but I havent run any Unreal Engine servers. So I was thinking if we as a community could write up a tutorial of how to install, setup and run a Linux Dedicated Server of Killing Floor. Now I know how to operate the hldsupdatetool so I'll start up by writing a tutorial on how to install the server but since I dont even know myself how to setup and run it I'd like you my fellow server admins to help out in writing this tutorial.

So here goes:

UPDATED: May 18th -> v0.5
UPDATED: May 17th -> v0.41
UPDATED: May 16th -> v0.4
UPDATED: May 16th -> v0.3
UPDATED: May 15th -> v0.2
Original post: May 15th

PART 1: Installing the server

The info below pertaining to hldsupdate is obsolete as of Killing Floor update 1036. Please refer to this thread for the new method of using SteamCMD.

Hosting a Dedicated Server with SteamCMD

Spoiler!
Spoiler!


PART 2: The quick and dirty start:

This part is for all of you who dont care much about how "well" and organised the server is setup. This part will get you started the quick way.

Like many others I couldnt locate the KillingFloor.ini from the <server>/system directory but it actually is under your home directory in a hidden folder ~/.killingfloor/System (see http://forums.tripwireinteractive.com/showthread.php?t=30916 for more information)

NOTE! The KillingFloor.ini will not be created before you start the server at least one time!

1. Before starting the server fire up your web browser and allready put in the addressbar the address to your server and port 8075 like this but DONT press enter yet:

http://12.345.67.89:8075 (the address here is NOT the one for you to use)

2. Navigate into the kfserver/system directory and run:

Code:
[system]$ ./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?AdminName=admin?AdminPassword=admin
3. As soon as the server has started go to your webbrowser and hit enter on the address you put in earlier. It will now ask for username and password and enter admin on both as provided earlier. Now in the WedAdmin interface navigate to "Defaults" on the top bar and click "Server" on the left sidemenu to setup the server Admin name and Admin password. Make them up and then click "Accept". After this jump back to the server window and stop it by pressing ctrl-c. Restart the server with just:

Code:
[system]$ ./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6
and relogin with the Admin name and password you put in the "Server" setup dialog. Now you can configure the server as you like from the WebAdmin.

Check PART 4: Post-installation tips for some tips on running the server afterwards.

There are many posts on this forum about setting up the server configurations so I wont go into these for now. (See links at the bottom of this post.)

PART 3: Running the server(s)

Okay here is a bit more complex but more organised way of running a server or if you plan on running multiple instances of KF Server on your server this will help the administrating.

First of all I know there is a few different kinds of ways of running multiple servers. One is to install every instance in its own directory. The other is using multiple KillingFloor<insert number>.ini files. I will try to make this tutorial as general as possible and I hope you can use your own brains to apply the information provided here to your own needs. But let us start!

1. After installing the server you might notice that there is something missing that we have allready talked about, the KillingFloor.ini. You can either run the server once (HOLD ON, dont do it yet! Use the code below to start) or you can copy the default.ini as KillingFloor.ini:

NOTE!!!!
Never EVER edit default.ini!!!!!!
http://forums.tripwireinteractive.com/showthread.php?t=30640

a) Copying default.ini as KillingFloor.ini (I have not tested this method myself)
Code:
[system]$ cp default.ini KillingFloor.ini
b) Running the server once
Code:
[system]$ ./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6 -nohomedir
After the server has started just hit CTRL-C to shut it down.

Now it all comes down to choices. Rather than trying to write every possible solution for your needs, I'm going to try to explain the switches and choices about how you decide to run your servers.

First of all, the -nohomedir switch makes the server use the .ini files in the same directory as you are running it from. This is handy when you have installed just one set of binaries for the server but still want to run multiple instances, so you make KillingFloor1.ini for server 1, KillingFloor2.ini for server 2 etc.

You might also want to have a different set of binaries for each server (kfserver1 & kfserver2 directories for example) but then using the -nohomedir switch might be a bit troublesome since all the .ini files will be in different directories. If you use different folders for different server instances, leave out the -nohomedir switch.

Summary:
a) 1 binary, many servers, use -nohomedir, *.ini are in kfserver/system

b) many binaries (directories), many servers, DONT use -nohomedir, *.ini are in ~/.killingfloor/System

c) just one server, choose whichever way you want and find better for your needs

2. Lets edit the KillingFloor.ini next with your favourite text editor:

NOTE!!! From now on the .ini file and the location is related to the choice you made on step 1. If setting up multiple server you need to edit each .ini separately as each server instance needs its own .ini file.

Code:
[system]$ nano KillingFloor.ini
Okay now some things you WANT to edit:

a) under [Engine.GameReplicationInfo] add an AdminName so you can login from the WebAdmin and change ServerName so you can find it in the serverbrowser!

b) under [Engine.AccessControl] add an AdminPassword (this will be always saved as plaintext)

c) under [UWeb.WebServer] make sure that bEnabled=True if you want to use the WebAdmin to control the server

These options should suffice to run a single instance of the server. If you are setting up multiple servers read on, else you can skip to step 3.

For setting up multiple servers you need to have a unique port for each instance of course. The default port for KF server is 7707 but that is not the only port (see http://forums.tripwireinteractive.com/showthread.php?t=30634). But as explained in that post, the default port controls all the other ports (except WebAdmin):

7707 UDP/IP (Game Port)
7708 UDP/IP (Query Port)
7717 UDP/IP (GameSpy Query Port)
28852 TCP/IP and UDP (Allows your Server to Connect to the Master Server Browser)
8075 TCP/IP (Port set via ListenPort that your WebAdmin will run on)
20560 UDP/IP (Steam Port)

A good way to separate different server instances is to use +100 for each server (server 1 = default 7707, server 2 = 7807 etc). This will also affect all the other ports like this:

Server 1 is at the default configuration above (7707 etc).
Server 2 would be:

7807 UDP/IP (Game Port)
7808 UDP/IP (Query Port)
7817 UDP/IP (GameSpy Query Port)
28952 TCP/IP and UDP (Allows your Server to Connect to the Master Server Browser)
8075 TCP/IP (Port set via ListenPort that your WebAdmin will run on)
20660 UDP/IP (Steam Port)

(Notice the WebAdmin port staying the same, I left it on purpose because it is a separate config value)

d) in the beginning of KillingFloor.ini under edit Port setting for the Game por...ripwireinteractive.com/showthread.php?t=31044

Quick startup script(start/stop/restart)... Hope this is of any use.

Make sure to change the GAME_PATH

Code:
#!/bin/bash
#
# Init file for Killing Floor server
#
# chkconfig: 35 90 12
# description: Killing Floor
#
# source function library
. /etc/rc.d/init.d/functions
SCREEN_NAME=killing-floor
GAME_PATH=//srcds_l/killingfloor/system
 
start()
{
cd $GAME_PATH && /usr/bin/screen -A -m -d -S $SCREEN_NAME ./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecure=true?MaxPlayers=6
}
stop()
{
PID=`ps fax | grep $SCREEN_NAME | grep SCREEN | awk '{ print $1 }'`
kill $PID
}
restart()
{
stop
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
If this script doesnt work, contact LeAdGuEsT.

TIP IV: Terrorkarottes very advanced startup scripts

Terrorkarotte has made some very advanced fine tuning for running your servers (not for beginners). You can find them a few posts downward: http://forums.tripwireinteractive.com/showpost.php?p=438068&postcount=4

If any of these scripts doesnt work, contact Terrorkarotte.

TIP V: Server logs

If you are running multiple servers you might want to specify exactly where and what name the log files should be. You can do that by adding log=<unique name>.log in the startup line. For example you might want to have a logs directory in the ~/.killingfloor/System where you put all the logs of your servers then do this:

Code:
mkdir ~/.killingfloor/System/logs
then navigate into the kfserver/system directory and run:

Code:
./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6 ini=KillingFloor2.ini log=logs/server2.log
this will create a server2.log in the logs directory.

Changelog:
Code:
v0.5
-Rewrote and renamed parts 2 & 3
-Added the actual script from LeAdGuEsT and a direct link Terrorkarottes advanced scripts to the first post
-Added a tip about logging
-A touch of color ;)
 
v0.41, May 17th 2009
-Added mention of Terrorkarottes scripts
 
v0.4, May 16th 2009
-Added post installation TIP II
-Added link to LeAdGuEsT's startup script
 
v0.3, May 16th 2009
-Added the Links section
 
v0.2, May 15th 2009
-Wrote parts 2 and 3 to get a quick start
-Added Part 4 for tips
 
Original post, May 15th 2009
LINKS

arramus' dedicated server tutorial for windows(also with lots of configuration info):
http://forums.tripwireinteractive.com/showthread.php?t=30579

LeAdGuEsT's excellent startupscript for linux:
http://forums.tripwireinteractive.com/showthread.php?t=31044

Zetsumeis How to enable high quality audio codec for dedicated servers:
http://forums.tripwireinteractive.com/showthread.php?t=31589


Thank you for the following people for helping with this tutorial:

Tagert
arramus
LeAdGuEsT
Terrorkarotte
Vociferous

PLEASE help me write this tutorial! If you find mistakes in my tutorial or if you have suggestions be free to tell me about them and I will correct it.
 
Last edited by a moderator:
First of all i would like to thank you for your work. Your tutorial helped me a lot setting up my server. By doing this I encountered some problems and found solutions everybody is asking here in the forum.
But first this link: http://wiki.fragaholics.de/index.code/EN:Linux_Kernel_Optimization

It should help you running your linux gameserver more stable. For beginners i would not use a 1000Hz Kernel. The importand things are the realtime,the to your hardware fitted kernel, and mostly importand the rescheduler and idler scipts. If you dont want a kernel try out the scheduler and the idler. Using Source Server (CS:S DOD:S etc) it helped me a lot.

You have to use another reschulder
Code:
#!/bin/sh

PIDS=`ps ax | grep sirq-hrtimer | grep -v grep | sed -e "s/^ *//" -e "s/ .*$//"`
for p in $PIDS; do
  chrt -f -p 99 $p
done

PIDS=`ps ax | grep sirq-timer | grep -v grep | sed -e "s/^ *//" -e "s/ .*$//"`
for p in $PIDS; do
 chrt -f -p 51 $p
done

PIDS=`pidof ucc-bin-real`
for p in $PIDS; do
  chrt -f -p 98 $p
done
Now to the Killing Floor Part:
Everybody is telling, that they can not find die KillingFloor.ini or and it is not created.
It is created. But everyone is looking in the wrong place. Enter your home directory and type:
Code:
ls -la
you will see something like this:
Code:
.killingfloor
kfserver
.killingfloor is a hidden directory with the subfolder System in it, in which you can find your KillingFloor.ini
This happens because the existing HowTo
 
Last edited:
Upvote 0
Everybody is telling, that they can not find die KillingFloor.ini or and it is not created.
It is created. But everyone is looking in the wrong place. Enter your home directory and type:
Code:
ls -la
you will see something like this:
Code:
.killingfloor
kfserver
.killingfloor is a hidden directory with the subfolder System in it, in which you can find your KillingFloor.ini
This happens because the existing HowTo
 
Upvote 0
If it wasn't for that fact that your installation guide was awesome I'd call you a linux fan boi who doesn't know how to set up her windows :D Cheers mate, awesome guide.

I absolutely frigging hate linux. The worst piece of crap there is. But uh-oh, I hear a flamewar coming! ;) Its only that with servers linux superior to windows.
 
Upvote 0
When I tried to compress a custom map as it is described in the windows thread, I encountered a few problems.
First of all you have to use the ucc-bin instead of the ucc file. The second thing is to use / instead of \.
The last thing is to add the "-nohomedir" variable. If you do not add it the compressed files will be in the hidden .killingfloor directory instead of the maps directory in the kfserver folder.
The full command:

Code:
./ucc-bin compress ../maps/mapname.rom  -nohomedir
 
Last edited:
Upvote 0
With linux you can run a script with cron every X minutes/hours that checks if the screen process is running and if not execute the startscript of your server.
This script checks for a screen with the name "kf.one" and executes the startscript "kfstart" If you have other names you have to change it to your needs:

Code:
#!/bin/sh
#clear
if[[ `screen -ls |grep kf.one ]]
then 
echo
else
/home/kfserver/kfstart restart
fi
 
Last edited:
Upvote 0
./ucc-bin server
DA2-BlackGold.rom?game=DA2.DefenceAlliance?VACSecured=true?AdminName=HEREISAADMINNAME?AdminPassword=ANDHEREAPASSWORD?Mutator=da2.mutkf -nohomedir -multihome=HEREISTHEINTERNETIP -mod=DA2 ini=DA2.ini

The forum splits the commandline so watch for breaks in the part where the commands are connected with ?
 
Last edited:
Upvote 0
I'm not much of a linux pro... more like a beginner :D
But I wrote some small scripts that might come in handy.

The following 2 belong in the system folder.
create a .sh file, or a textfile and upload it via ftp.

start.sh
Code:
echo
echo = Trying to kill running servers =
echo
killall ucc-bin-real
screen -dmS kfserver ./ucc-bin server KF-BioticsLab.rom?game=KFmod.KFGameType?VACSecured=true?MaxPlayers=6?AdminName=admin?AdminPassword=admin
echo = KillingFloor Server starts =
echo = Process: ucc-bin-real =
echo
killall is stopping the server - if it is running. Just to make sure you don't start it twice. If there wasn't any server running it will say that it didn't kill any processes.
screen -dmS is starting the server and running it in a background window. That way the process keeps on running even if you shut down putty.
echo just puts out some text.

stop.sh
killall ucc-bin-real
echo = KillingFloor Server stopped =
echo
Again... the killall to shut down the server and an echo to say that the script ran. Take note that you start the server with ucc-bin and you shut down the ucc-bin-real!

Then you switch back to the main folder where the hlds files are.
you then type:
Code:
$ ln -s ./system/start.sh
$ ln -s ./system/stop.sh
This will create links in this folder. (if it doesn't work leave the "." ... can't remember that now)

It is also usefull to create an update.sh in this folder.
Code:
killall ucc-bin-real
./steam -command update -game killingfloor -dir .
again I think it is wise to shut down all running servers before actually updating them. Obviously.

Oh and you can check wether the server runs with
Code:
ps aux
 
Upvote 0
I tried this on my Linux-Ubuntu server an cannot get it running keeps telling me there is no server running after I have started a server without the script
I have the same thing and it is working excellent. Create a new file called kf-server.sh in your home directory by typing
Code:
pico kf-server.sh
Copy, paste, and edit this script into kf-server.sh. Edit username, password, and folder where steam is located. (line 6)
Code:
#!/bin/bash
echo Killing current server
killall ucc-bin-real
# This will effectively make the script a means of restarting the server.

cd kfserver
./steam -command update -game killingfloor -dir . -verify_all -retry
# This updates the files to latest version before launching the game.

# Server start vars
vac="true"
slots="6"
adminuser="username"
adminpass="password"

echo "Starting  KF Server..."

cd system/

# use screen -r kf-server to view server console,
# ctrl+a, d to go back, ctrl+c to terminate the server.
screen -A -m -d -S kf-server ./ucc-bin server KF-BioticsLab.rom\
?game=KFmod.KFGameType\
?VACSecure=$vac\
?MaxPlayers=$slots\
?AdminName=$adminuser\
?AdminPassword=$adminpass


# EOF
Code:
chmod +x kf-server.sh
then
Code:
./kf-server.sh
good luck
 
Upvote 0