Setting up a well organized Enemy Territory: Legacy Server
Managing servers with a lot of files or addons, and functionality can get confusing, when you have a ton of files mixed together in one folder.
Setting up a server with a well-designed structure can be very helpful for maintenance. I previously wrote about how I set up Nginx with include files, which greatly improves maintainability of nginx configuration. This time, I will talk about setting up a Wolfenstein: Enemy Territory server; more specifically a ET: Legacy server (which is compatible to the first). For a well separated structure, I will make use of the
fs_homepath variabes and specifying paths for configuration files, lua scripts, mapconfigs and mapscripts. This will lead to clear separation and categorization of files.
First step is to install the actual binary server. For ET:L, this means downloading the binaries and extracting them, and then copying the
etmain/*.pk3 files from a W:ET distribution (4 files) into the etl
If GeoIP is desired (server announces which country players are from), a
GeoIP.dat will also have to be placed in
Now that we have the binaries ready, we can start configuring and preparing our server instance. Because we separate the server binaries from server instance configurations in order to upgrade all the servers, we just have to upgrade that single binary folder (or use a separate, upgraded one).
We create a new public server, which we name
etpub2 (in my case, it is the second one, hence the name). For this, if we placed the binaries in
/srv/et/etbin, we will now create
/srv/et/etpub2; we create a folder right next to the
Within this configuration folder, we create an etmain folder, with further subfolders for further configuration:
mapconfigs– for map specific
.scriptfiles with map adjustment logic
As we set up a
legacy mod server, we copy the
etpub2/etmain. This way, we can adjust our configuration without influencing other server instances – we want to configure etpub2 specifically.
etl_server.cfg will be used as the main server config, and
legacy.cfg for more game specific settings and the mod specific settings. In the
etl_server.cfg you will probably want to adjust the server name in sv_hostname for example.
Because we have all our configuration in
etmain/cfg, we will also have to adjust config paths in
etl_server.cfg. The line
exec legacy.cfg will be changed to
exec cfg/legacy.cfg and the line
exec mapvotecycle.cfg will be changed to
exec cfg/cycle/mapvotecycle.cfg (where we now copy this file into from the etbin folder as well). The watchdog command
com_watchdog_cmd will have to be adjusted as well; can you do it? 🙂
If we use a lua script, we have to use the appropriate path in
lua_modules as well (
As for mapconfigs and mapscripts, we set
For the config folder (.config files) we don’t have to set up anything, as the config subfolder is the et default.
If we want custom maps and skins, we will place them in
etpub2/etmain. In my case, as I have full permissions on the server, I create symbolic links to the pk3 files on the webspace. This way, I have the file on the filesystem just once (taking up space), but et just reads them normally. (If you’re on a Windows server you will probably just want to duplicate the files.) Of course, if this is your first time setting up the server, you will add the custom content once the server starts and runs fine.
To test if the server works, let us run it.
./etbin/etl +set dedicated 2 +set net_port 27960 +set fs_basepath "/srv/et/etbin" +set fs_homepath "/srv/et/etpub2" +set fs_game legacy +set com_hunkMegs 128 +set com_zoneMegs 24 +set vm_game 0 +set ttycon 0 +exec cfg/etl_server.cfg
A log file will be placed in
etpub2/legacy/etconsole.log. If it works, you should be able to see and connect to the server now, on port
The only thing left is creating a start-stop-script. For reference, see the Linux script
etpub2.sh – which uses the user
et to start the server. You can use this to place in
/etc/init.d and use
update-rc.d adequately to let it start and stop on system startup and shutdown (
update-rc.d etpub2.sh defaults).
In my case, I am setting up a a
legacy mod server. Depending on your mod, the mod may not support lua scripts. If you want to set up a different mod, the setup is essentially the same, but you will specify a different
fs_game in the launch command and script, and your mod config won’t be
In case you don’t have a webspace for www-download set up yet, you probably should, as soon as you managed to prepare the other stuff, and the server works. Without www-downloads, connecting players that have to download custom maps or skins will take longer to download, and potentially disconnect. To enable www downloads in the etl_server.cfg enable sv_allowDownload and
sv_wwwDownload, and set the
sv_wwwBaseURL to the base HTTP address for the downloads (without “
etmain” in the path; it must point to the address that contains the