Setting up a dedicated Linux Unreal Tournament server



Objective.

Set up a dedicated Unreal Tournament server under Ubuntu.

Tasks.

Installation and configuration of UT dedicated server (covers Unreal Tournament although some parts of this guide may be applicable to later variants of UT such as UT2003/UT2004)

Recommendations.
Review all instructions on this page before you begin.
Refer to the following sites for more information on the commercial software referred to on this page:
http://en.wikipedia.org/wiki/Unreal_Tournament
http://www.epicgames.com/
http://www.planetunreal.com/files/

Page dependencies (ensure you have access to everything you need before you begin).
Commands issued at the command prompt in this section are done so as superuser or root unless otherwise specified. When installed, Ubuntu does not ask for a root password to be specified. Either set a root password using sudo passwd root so that you can log in as superuser, or enter the commands listed in this guide prefixed with 'sudo'.
Download the UT Linux Dedicated Server package (88MB). Various sites offer this for download, one of which is linked to here: http://ut.abfackeln.com/asu.html?page=dedicated
If UTPure is required (see text), download the version 7G release candidate from here:
http://www.unrealadmin.org/forums/showthread.php?t=6483

Text file editing from the command line.

This guide uses the Nano application for text editing because of its simplicity. Alternative text editors are available. Basic Nano key combinations to remember are CTRL-O to save and CTRL-X to exit.

Page format.
Text in this format indicates command line entry by the user.
Text in this format indicates an error returned by the system.
Text in this format indicates a normal return from the system.
Beware of similar characters such as 1(one), l(lowercase L), 0(zero), O(uppercase 'o'), | (pipe – Shift ' \ ' usually).
Text enclosed in [square brackets] indicates a build-specific variable such as a version number or user name.

Conditions.
This information is provided for guidance only. Use of these instructions is deemed to be at your own risk.
R3UK Limited welcomes comment on this information but cannot guarantee a reply and provides no technical support. Please use one of the many dedicated Linux forums or IRC channels if you require assistance.
As with any installation on any computing platform, it is good practice to ensure important data is backed up in case unforeseen difficulties arise.
Review all installation instructions on this page before you begin.
The information on this page is based on a Default Ubuntu 6.06 Dapper installation and may vary for other Linux distributions.


Procedure.
Back around the millennium, me and some other nerds took great delight in shooting each other in the face in an Unreal Tournament multiplayer online arena. Back then the server consisted of a Dell 266Mhz PII running WindowsNT over a 512k cable broadband connection with clients using 16MB VooDoo2 graphics cards (or being wowed by the 32MB GeForce) and connecting (in some cases) by dial-up (yuk!). Of course, newer versions of UT came out and I bought both UT2003 and UT2004 along with a 128MB GeForce graphics card, but recently we decided to resurrect the original UT, partly for nostalgic reasons and partly because we know of people who could join our little online battle but who don't have the graphics hardware capable of running the newer prettier variants of the game. While showing its age in the graphics department, the original UT still has the playability we all know and love. The great thing is that even people with fairly old (3 to 5 years) computers should be able to play this game which is itself coming up to eight years old at the time of writing.

I still had the NT Dell complete with UT server installation. It hadn't been fired up for years and didn't appreciate it's trip out of the attic. The box has turned an unhealthy yellow colour, had a flat CMOS battery and insisted the keyboard had a stuck key (which it didn't). Anyway, I decided it was best to allow the old girl to die with dignity and started afresh using Ubuntu and a different box (a Dell Optiplex GXa 233MHz PII – even older but in top condition!).

Ubuntu installed fine on this box (albeit slowly) and recognised everything except the audio chipset, but as this was to be a dedicated server and not used for playing the game (which it could do even with just 2MB video RAM), I didn't bother correcting this.

The following information should apply to any out-the-box Ubuntu install. The Dell was running Dapper and despite it's age (a manufacture date of 1997 pre-dating UT's release by two years), thorough 'testing' proved it was easily up to the dedicated server job. I've since installed it on a Duron 800 self-built box and installation was problem free on that too.

Let's assume you have downloaded the dedicated Linux server package to your Desktop. Move this to your 'games' folder...

mv ut_server_436.tar.gz /usr/local/games

Now switch to this directory and extract the archive...

cd /usr/local/games
tar -xvzf ut_server_436.tar.gz

This will create a directory called ut-server under /games/ which contains all your UT files. You can delete the .tar.gz archive if you wish as it's no longer needed.

Within the ut-server directory is a System directory. In here is a file called UnrealTournament.ini which needs to be edited to configure the game to how you would like it to run. My .ini file is listed a bit later and you can copy and paste it or edit your own .ini file to your tastes. Note that by default the .ini contains information for playing the game on your computer (i.e. it holds information on the graphics hardware and the like). This can be stripped out of the .ini on a dedicated server which is why my .ini file is missing a lot of the default information.

Once your .ini file has been edited, you can start the game (if running just on a LAN). If running over the internet you need to ensure you open the following ports in your firewall....

Protocol: Port Start: Port End: Port Map:
UDP 7777 7781 7777
UDP 27500 27500 27500
UDP 27900 27900 27900
TCP 8080 8080 8080

Once these ports are mapped to the IP address of the machine running your dedicated server, the outside world should be able to connect to it.

To start the server, use the command below from within the ut-server/System dir:

./ucc-bin server CTF-Face?game=BotPack.CTFGame? ini=UnrealTournament.ini log=ut.log -nohomedir &

This will start a Capture The Flag (CTF) game using the BotPack.CTFGame parameters set in UnrealTournament.ini and starting with the Facing Worlds map. To save on typing, you could rename UnrealTournament.ini to something shorter such as ut.ini. An alternative game (such as a DeathMatch) with a mutator and renamed .ini file may begin as:

./ucc-bin server DM-Pressure?game=BotPack.DeathMatchPlus?Mutator=Instagib ini=ut.ini log=ut.log -nohomedir &


It is possible to issue both these commands and have the same physical machine acting as two (or more) simultaneous servers (so long as your hardware is up to it and your network connection can handle the amount of people you may be inviting to join). To free up resources on my ageing Dell 233 PII I switched to a command prompt at the GUI login screen (CTRL-ALT-F1), logged in, then stopped Gnome from running (/etc/init.d/gdm stop) before launching the server.

To stop the server, use the kill or pkill command (for example pkill ucc-bin) or kill [process ID] if you have obtained the process ID with the ps aux command.

Once nice feature of the dedicated server is the web-based Admin interface. With the server running you should be able to connect to it's web interface using your web browser. Normally this runs over port 80 but in my .ini file it has been changed to 5080, so from my LAN I type:

http://192.168.0.15:5080/ServerAdmin (where 192.168.0.15 is the fixed IP address of my dedicated server). This allows you to change game type, map, bot skill, etc. without having to edit the .ini file or restart the server. You can also kick and ban players from this interface (if you want to get rid of someone troublesome!)

Something else you may want to add is UTPure which checks connecting clients to see if they have cheats. With UTPure installed, hacked clients won't be allowed to join games (each client downloads UTPure the first time they join a UTPure-enabled server). It's not bulletproof but it might stop some annoying teenager with an aimbot from getting on your nerves. To be honest, it's not much of a problem these days as not too many members of the public play this version of the game any more (it tends to be die-hard fans still playing and they're not interested in cheating). To add UTPure to your server, download the latest release candidate (7G) and extract the contents (including the contents of the sub folders into the ut-server/System directory). An example is below (assuming you downloaded UTPure to your Desktop and you are in your Desktop directory)...

cp UTPureRC7G.zip /usr/local/games/ut-server/System
cd /usr/local/games/ut-server/System
unzip UTPureRC7G.zip
cd uz
cp * /usr/local/games/ut-server/System
cd ..
cd system
cp * /usr/local/games/ut-server/System
cd ..

Two lines then need to be added to UnrealTournament.ini to enable UTPure (see Notes below).

My UnrealTournament.ini files is listed below. IMPORTANT – read the Notes section at the end before copying any of my .ini file!


[URL]
Protocol=unreal
ProtocolDescription=Unreal Protocol
Name=Player
Map=Index.unr
LocalMap=CityIntro.unr
Host=
Portal=
MapExt=unr
SaveExt=usa
Port=7777
Class=Botpack.TMale1

[FirstRun]
FirstRun=0

[PackageRemap]
UnrealShare=UnrealI

[Core.System]
PurgeCacheDays=30
SavePath=../Save
CachePath=../Cache
CacheExt=.uxx
Paths=../System/*.u
Paths=../Maps/*.unr
Paths=../Textures/*.utx
Paths=../Sounds/*.uax
Paths=../Music/*.umx
Suppress=DevLoad
Suppress=DevSave
Suppress=DevNetTraffic
Suppress=DevGarbage
Suppress=DevKill
Suppress=DevReplace
Suppress=DevSound
Suppress=DevCompile
Suppress=DevBind
Suppress=DevBsp

[Engine.GameEngine]
CacheSizeMegs=4
UseSound=True
ServerActors=IpDrv.UdpBeacon
ServerActors=IpServer.UdpServerQuery
ServerActors=IpServer.UdpServerUplink MasterServerAddress=unreal.epicgames.com MasterServerPort=27900
# ServerActors=IpServer.UdpServerUplink MasterServerAddress=master0.gamespy.com MasterServerPort=27900
ServerActors=IpServer.UdpServerUplink MasterServerAddress=master.mplayer.com MasterServerPort=27900
ServerActors=UWeb.WebServer
ServerActors=UTPureRC7G.UTPureSA
ServerPackages=SoldierSkins
ServerPackages=CommandoSkins
ServerPackages=FCommandoSkins
ServerPackages=SGirlSkins
ServerPackages=BossSkins
ServerPackages=Botpack
ServerPackages=UTPureRC7G

[Engine.Player]
ConfiguredInternetSpeed=2600
ConfiguredLanSpeed=20000

[IpDrv.TcpNetDriver]
AllowDownloads=True
ConnectionTimeout=15.0
InitialConnectTimeout=150.0
AckTimeout=1.0
KeepAliveTime=0.2
MaxClientRate=20000
SimLatency=0
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=20
LanServerMaxTickRate=35
DownloadManagers=IpDrv.HTTPDownload
DownloadManagers=Engine.ChannelDownload

[IpDrv.HTTPDownload]
RedirectToURL=
ProxyServerHost=
ProxyServerPort=3128
UseCompression=True

[Engine.DemoRecDriver]
DemoSpectatorClass=Botpack.CHSpectator
MaxClientRate=25000
ConnectionTimeout=15.0
InitialConnectTimeout=500.0
AckTimeout=1.0
KeepAliveTime=1.0
SimLatency=0
RelevantTimeout=5.0
SpawnPrioritySeconds=1.0
ServerTravelPause=4.0
NetServerMaxTickRate=60
LanServerMaxTickRate=60

[Engine.GameReplicationInfo]
ServerName=R3UK UT Server
ShortName=R3UKUT
MOTDLine1=www.r3uk.com
MOTDLine2=Leamington Spa UK
MOTDLine3=Dedicated Linux UT Server
AdminName=
AdminEmail=
Region=0

[Engine.GameInfo]
bLowGore=False
bVeryLowGore=False
bNoCheating=True
GameSpeed=1.000000
MaxSpectators=1
AdminPassword=setyourpassword
MinPlayers=10
MaxPlayers=12
ServerLogName=ut.log
bLocalLog=False
bWorldLog=False
bHumansOnly=False
bLowGore=False
bVeryLowGore=False
bMuteSpectators=False
bAllowFOV=False
bExternalBatcher=False
AutoAim=0.930000
GamePassword=
IPPolicies[0]=ACCEPT,*
IPPolicies[1]=
IPPolicies[2]=
bBatchLocal=False
DemoBuild=0
DemoHasTuts=0
bNoMonsters=False
bCoopWeaponMode=False
bClassicDeathMessages=False

[IpDrv.TcpipConnection]
SimPacketLoss=0
SimLatency=0

[IpServer.UdpServerQuery]
GameName=ut

[IpDrv.UdpBeacon]
DoBeacon=True
BeaconTime=0.50
BeaconTimeout=5.0
BeaconProduct=ut

[UMenu.UnrealConsole]
RootWindow=UMenu.UMenuRootWindow
UWindowKey=IK_Esc
ShowDesktop=True

[Botpack.ChallengeBotInfo]
Difficulty=1

[Botpack.DeathMatchPlus]
bExpertMode=True
bHardCoreMode=True
bUseTranslocator=False
bCoopWeaponMode=False
MinPlayers=10
AirControl=0.350000
bChangeLevels=True
bMegaSpeed=False
bAltScoring=False
bTournament=False
NetWait=17
RestartWait=15
InitialBots=0

[Botpack.CTFGame]
bUseTranslocator=True
bCoopWeaponMode=True
GoalTeamScore=3.000000
bNoTeamChanges=False
FriendlyFireScale=1.000000
MaxTeams=2
MaxTeamSize=6
FragLimit=0
TimeLimit=15
bMultiWeaponStay=True
bForceRespawn=True
MaxCommanders=2
bNoMonsters=False
bHumansOnly=False
bClassicDeathMessages=False
bChangeLevels=True

[Botpack.Domination]
bDumbDown=True
bUseTranslocator=True
bCoopWeaponMode=True
GoalTeamScore=100

[Botpack.Assault]
bUseTranslocator=True
bCoopWeaponMode=True

[Botpack.TeamGamePlus]
bBalanceTeams=True
GoalTeamScore=30
bPlayersBalanceTeams=True

[BotPack.CTFMapList]
Maps[0]=CTF-Face.unr
Maps[1]=CTF-EternalCave.unr
Maps[2]=CTF-HallOfGiants.unr
Maps[3]=CTF-TwinValley.unr
Maps[4]=CTF-Outlook.unr
Maps[5]=CTF-Slum_Lord.unr
Maps[6]=
MapNum=4

[UnrealShare.UnrealGameOptionsMenu]
bCanModifyGore=True

[UTMenu.UTMultiplayerMenu]
OnlineServices[0]=LOCALIZE,MPlayer
OnlineServices[1]=LOCALIZE,Heat
OnlineServices[2]=LOCALIZE,WON

[UWeb.WebServer]
Applications[0]=UTServerAdmin.UTServerAdmin
ApplicationPaths[0]=/ServerAdmin
Applications[1]=UTServerAdmin.UTImageServer
ApplicationPaths[1]=/images
DefaultApplication=0
bEnabled=True
ListenPort=5080

[UBrowser.UBrowserHTTPClient]
ProxyServerAddress=
ProxyServerPort=

[UTServerAdmin.UTServerAdmin]
AdminUsername=admin
AdminPassword=setyourpassword

[IpServer.UdpServerUplink]
DoUplink=True
UpdateMinutes=1
MasterServerAddress=
MasterServerPort=27900
Region=0

[UTMenu.UTServerSetupPage]
bLanPlay=False
bDedicated=True

[UTMenu.UTStartGameCW]
Map=CTF-Face.unr
GameType=BotPack.CTFGame
MutatorList=
bKeepMutators=False

[UTPureRC7G.UTPure]
bUTPureEnabled=True
Advertise=1
AdvertiseMsg=1
bAllowCenterView=False
CenterViewDelay=1.000000
bAllowBehindView=False
TrackFOV=2
bAllowMultiWeapon=False
bFastTeams=True
bUseClickboard=True
MinClientRate=1000
bAdvancedTeamSay=True
bHitSounds=False
bTeamHitSounds=False
ForceSettingsLevel=2
bNoLockdown=True
bWarmup=False
bCoaches=False
bAutoPause=False
ImprovedHUD=1
bDelayedPickupSpawn=False
bTellSpectators=False
bNoWeaponThrow=False
bForceDemo=False
PlayerPacks[0]=
PlayerPacks[1]=


Notes on the above:
To enable UTPure after you have put the UTPure files in place, edit the [Engine.GameEngine] section with the following lines:

ServerActors=UTPureRC7G.UTPureSA
ServerPackages=UTPureRC7G

The [UTPureRC7G.UTPure] section is then added automatically the first time a server is started with UTPure enabled. The second time the server is started, UTPure should be active. This means you don't need to paste the [UTPureRC7G.UTPure] section above into your .ini file.

Under [Engine.GameEngine], notice the following line has been commented out (#) so that it doesn't run:

# ServerActors=IpServer.UdpServerUplink MasterServerAddress=master0.gamespy.com MasterServerPort=27900

This is because when my server was running, there was a constant stream of traffic between it and the internet which we found was some communication with gamespy. To kill this traffic, the above line needs to be disabled or removed.

[Core.System] details the directories where maps, textures and sounds are stored. To add extras to your server (such as more maps), copy them to the appropriate directory (e.g. /usr/local/games/ut-server/Maps). To use directories other than the defaults, change the paths listed under [core.system].

[Engine.GameReplicationInfo] contains the information you may want to list in the Message Of The Day lines (which shows up when a client joins one of your games).

[UTServerAdmin.UTServerAdmin] holds the admin password for the web server interface.

The amount of players and whether bots or humans only are allowed is set in [Engine.GameInfo].

To advertise your server to the outside world, set DoBeacon=True in the [IpDrv.UdpBeacon] section. Also, under [IpServer.UdpServerUplink] set DoUplink=True . Remember though, not many people are playing this any more and those that do probably run their own servers so it won't be like the good 'ol days when people dropped in for a frag at any time of the day!

Set the various 'BotPack' sections so that each type of game plays as you want it. If you want certain maps to rotate in a particular type of game, set the map list accordingly (such as with my [BotPack.CTFMapList] section). You can create, for example, a [BotPack.DeathMatchPlusMapList] section if you were planning on running a DeathMatch server. Don't forget though all this can be set up with the point & click web interface once the server is running.

[Uweb.Webserver] contains the ListenPort line which allows you to define the port your webserver is running on (80 by default).

Happy fragging!


Did the information on this page help you? If so, please help to fund this site by clicking one of our sponsored ads...