0.) Check to see if your brand of *nix has an RPM or DEB that you can just run and install. If you can do something as simple as yum install or apt-get then this tutorial isn’t for you.
1.) Download UT Dedicated Server from some webserver to your Linux box of choice. I recommend finding one with the latest patch. Note that you will likely have problems finding a download link that works well with wget but lynx worked for me in a pinch. Expect it to be about 900M.
1a.) You may need to install compat-libstdc++ if your server doesn’t already have it. When you go to run Unreal, it will certainly complain about any missing dependencies.
2.) Create a new user to run unreal under with adduser and passwd, or just install it as yourself if you’d like assuming you’re not root. You’ll probably want to make an unreal/ directory somewhere as well.
3.) Move your UT server zip file to your unreal folder and unzip it.
4.) Now is an excellent time to create an unreal.sh script. It should cd in to the System path for Unreal and call the ucc-bin file with the options of your choice. Here’s mine:
cd ut2k4/System ./ucc-bin server DM-Antalus?game=XGame.xDeathMatch ini=UT2004-ln.ini log=UT2004.log -nohomedir &
This starts the server off on the Antalus map in DeathMatch mode. It’s using my custom UT2004 script. I find that the start up settings aren’t too important as you’ll do most of the configuration through the webadmin or map voting.
Be sure to chmod u+x your unreal.sh file!
5.) Try to start your Unreal server by running ./unreal.sh. Hopefully you won’t have any dependency problems. This script will run the Unreal server in the background. I’m not sure how to have it start as an actual service at this time.
6.) Once you have a working server it’s time to start messing with the UT2004.ini file, or whatever .ini file you’re calling from your unreal.sh. This is a link to a handy ini file generator. It’s not perfect and I did a diff between the original and the generated one to find any new things that were missing. Don’t worry too much about editing map entries and such from in here. You can do that with the web admin.
7.) Make sure you open port 7777 UDP and port 8080 TCP, or whatever port numbers you prefer, in your firewall. If you need to figure out iptables, don’t ask me. I just used Fedora’s handy little ’setup’ program to add some firewall entries.
8.) You can connect to your Unreal webserver, assuming you left it enabled in your .ini file, by going to http://ip-or-host-of-unrealserver:8080/and logging in with Admin / Admin. Case is important here. Be sure to change your Admin password later from the webadmin interface.
You can edit nearly all of the UT settings you’d ever need here, just be sure to look around in here before resorting to an .ini change. You will certainly want to add all the maps you want for gametype rotations. You can adjust bot settings here as well as mutators.
9.) I highly recommend you enable map voting. This doesn’t seem to be a default so here is what you’ll need to add to your .ini file. Remember to restart your server to make sure these changes take effect.
[xVoting.xVotingHandler] VoteTimeLimit=70 ScoreBoardDelay=5 bAutoOpen=True MidGameVotePercent=50 bScoreMode=False bAccumulationMode=False bEliminationMode=False MinMapCount=2 MapVoteHistoryType=xVoting.MapVoteHistory_INI RepeatLimit=4 DefaultGameConfig=0 bDefaultToCurrentGameType=True bMapVote=False bKickVote=False bMatchSetup=False KickPercent=51 bAnonymousKicking=True MapListLoaderType=xVoting.DefaultMapListLoader ServerNumber=1 CurrentGameConfig=0 VoteTimeLimit=60 ScoreBoardDelay=3 bAutoOpen=True MidGameVotePercent=50 bScoreMode=False bAccumulationMode=False bEliminationMode=False MinMapCount=2 MapVoteHistoryType=xVoting.MapVoteHistory_INI RepeatLimit=4 DefaultGameConfig=0 bDefaultToCurrentGameType=True bMapVote=True bKickVote=False bMatchSetup=False KickPercent=51 bAnonymousKicking=True MapListLoaderType=xVoting.DefaultMapListLoader ServerNumber=1 CurrentGameConfig=3 GameConfig=(GameClass="Onslaught.ONSOnslaughtGame",Prefix="ONS",Acronym="ONS",GameName="Onslaught",Mutators=,Options=) GameConfig=(GameClass=,Prefix=,Acronym=,GameName=,Mutators=,Options=) GameConfig=(GameClass="XGame.xDeathMatch",Prefix="DM",Acronym="DM",GameName="DeathMatch",Mutators=,Options=) GameConfig=(GameClass="XGame.xCTFGame",Prefix="CTF",Acronym="CTF",GameName="Capture the Flag",Mutators=,Options=) GameConfig=(GameClass="XGame.xTeamGame",Prefix="TDM",Acronym="TDM",GameName="Team DeathMatch",Mutators=,Options=) GameConfig=(GameClass="Onslaught.ONSOnslaughtGame",Prefix="ONS",Acronym="ONS",GameName="Onslaught",Mutators=,Options=) GameConfig=(GameClass="UT2k4Assault.ASGameInfo",Prefix="AS",Acronym="AS",GameName="Assault",Mutators=,Options=) GameConfig=(GameClass="XGame.xBombingRun",Prefix="BR",Acronym="BR",GameName="Bombing Run",Mutators=,Options=) GameConfig=(GameClass="XGame.xDoubleDom",Prefix="DD",Acronym="DD",GameName="Double Domination",Mutators=,Options=) GameConfig=(GameClass="XGame.InstagibCTF",Prefix="iCTF",Acronym="iCTF",GameName="Instagib CTF",Mutators=,Options=) GameConfig=(GameClass="SkaarjPack.Invasion",Prefix="INV",Acronym="INV",GameName="Invasion",Mutators=,Options=) GameConfig=(GameClass="BonusPack.xLastManStandingGame",Prefix="LMS",Acronym="LMS",GameName="Last Man Standing",Mutators=,Options=) GameConfig=(GameClass="BonusPack.xMutantGame",Prefix="MU",Acronym="MU",GameName="Mutant",Mutators=,Options=)
10.) Adding maps, mutators, and other game play elements is as easy as just copying the appropriate files over to the unreal server directories, just like you would for your Unreal client.


