Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 103 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

LinuxGSM_

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

map-compressor

The map-compressor command is used to compress maps for some Unreal engine servers, allowing for faster maps downloads to clients.

Supported Servers

  • Unreal Tournament 99

  • Unreal Tournament 2004

  • Killing Floor

  • Red Orchestra

Commands

Standard: ./gameserver map-compressor

Short: ./gameserver mc

debug

The debug command is used to start your server directly in your current terminal (outside of (tmux) and should only be used for diagnosing issues. If a game server is already running in the background debug will stop it to start a debug session.

Commands

Standard: ./gameserver debug

Short: ./gameserver d

To exit debug mode use CTRL+c

Getting Started

To get started is to visit linuxgsm.com and pick a server to install. Follow the simple step-by-step guide to install your game server on Linux.

Once the installation is complete a working game server will be available. Use the various LinuxGSM commands available to manage the game server.

Read through this documentation to ensure you understand how to configure your game server.

The configuration section will help you understand how to configure both LinuxGSM and the game server.

console

The console command allows access the output of the game server executable. Depending on which server you are running it allows you to see the current activity of the game server, check errors in real time, and input commands.

Some game servers provide a verbose output in console.

Some game servers can be managed from the console.

Commands

Run the following command to access console:

Standard: ./gameserver console

Short: ./gameserver c

Answer y at the prompt.

Exiting the console

To exit the console: Press CTRL + b, then, press d

Take your time as this can be confusing at first.

Pressing CTRL+c while in console will kill the tmux session, stopping the game server.

Configuration

update-lgsm

The update-lgsm command updates LinuxGSM to the latest version.

It will automatically update LinuxGSM including the _default.cfg config file to make sure the game server gets the latest settings.

It is a good idea to regularly update LinuxGSM to receive new features and bug fixes.

Commands

Standard: ./gameserver update-lgsm

Short: ./gameserver ul

test-alert

The test-alert command is used to send a test alert that is used to ensure that configured alerts are functioning and being recieved.

Commands

Standard: ./gameserver test-alert

Short: ./gameserver ta

start-stop-restart

LinuxGSM provides an easy way to start, stop and restart your game server. LinuxGSM knows the location of the server binaries and inserts the start parameters to allow the server to start. LinuxGSM will also run various checks to prevent issues and apply any required server fixes to get the game server running.

Commands

Starting a server

Will start the server in a session allowing the server to run in the background.

./gameserver start

Stopping a server

Stop will attempt a of a game server. Failing this stop will kill the tmux session.

./gameserver stop

Stop only if empty (optional)

If stoponlyifnoplayers setting is enabled LinuxGSM will only stop the server if it is empty and prevent it from stopping otherwise. This feature only works with game servers that can use gamedig.

Restarting a server

Will simply stop, and then start the server.

./gameserver restart

Home

The command-line tool for quick, simple deployment and management of Linux dedicated game servers.

  • User docs:

  • Dev Docs:

Welcome

Welcome to the LinuxGSM documentation covering various topics related to the project.

Contributions to this documentation are welcome and can be submitted via GitHub.

force-update

This is a command for game servers using only.

The force-update command bypasses the update check and runs the SteamCMD update regardless of update availability. This will run the SteamCMD update and restart the game server.

Force update is a useful feature for admins that restart their server daily. It allows LinuxGSM to check for updates while restarting the server.

Commands

Standard: ./gameserver force-update

Short: ./gameserver fu

update

LinuxGSM comes with an game server update command. All games servers are supported, as well as some other servers such as Teamspeak, Minecraft, Mumble & Factorio.

Commands

Standard: ./gameserver update

Short: ./gameserver u

Update will check for any available update, taking no action if no update is available. If there is an update it will apply the update, restarting the server if already running.

Automatic update

Update on start

It is possible to update a game server on start, by editing the LinuxGSM config.

updateonstart="on"

This will take longer for the game server to start but can be useful for servers that are kept offline most of the time.

Scheduled updates

A can be set to run update at any given time.

To edit cronjobs, type:

crontab -e

A cronjob can be run as the gameserver user or as root, this choice is down to personal preference. Remember to amend the examples to match a specific game server.

Here is an example of a user based cronjob to check for an update once an hour.

Here is an example of a root based cronjob to check for an update once an hour.

The extra su - username -c indicates which user to run the script as.

It is recommended to check for updates once per hour.

is a great resource to generate cronjobs.

skeleton

The skeleton command created a mirror of the directory structure of a game server. This allows you to create a skeleton directory of custom files, configs, maps etc.

Commands

Standard: ./gameserver skeleton

Short: ./gameserver sk

Skeleton Directory

The skeleton directory is created in skel.

Use Case

Skeleton can be used alongside version control software like or backed up to save custom configurations for a game server. If a change is added to your git repository/backup it is possible to pull/copy the updates to your game server. If you want to re-deploy a game server you can create a fresh installation and pull/copy in the custom changes over the top of the fresh install.

stoponlyifnoplayers="off"
tmux
graceful shutdown
SteamCMD
0 * * * * /home/username/gameserver update > /dev/null 2>&1
0 * * * * su - username -c '/home/username/gameserver update' > /dev/null 2>&1
SteamCMD
cronjob
crontab.guru
/home/gameserver/skel
git
docs.linuxgsm.com
dev-docs.linuxgsm.com

check-update

LinuxGSM comes with a game server check-update command. All SteamCMD games servers are supported, as well as some other servers such as Teamspeak, Minecraft, Mumble & Factorio.

Commands

Standard: ./gameserver check-update

Short: ./gameserver cu

Unlike the update command check-update will check for any available updates and take no action if no update is available. If there is an update it will send an alert.

Automatic check for update

Scheduled check for updates

A cronjob can be set to run check-update at any given time.

Ensure that an alert is configured so you are alerted to any updates

To edit cronjobs, type:

crontab -e

A cronjob can be run as the gameserver user or as root, this choice is down to personal preference. Remember to amend the examples to match a specific game server.

Here is an example of a user-based cronjob to check for an update once an hour.

0 * * * * /home/username/gameserver check-update > /dev/null 2>&1

Here is an example of a root-based cronjob to check for an update once an hour.

The extra su - username -c indicates which user to run the script as.

0 * * * * su - username -c '/home/username/gameserver update' > /dev/null 2>&1

crontab.guru is a great resource to generate cronjobs.

network-interfaces

TODO

install

LinuxGSM allows for the simple installation of game servers. The installer is designed to get a game server to a working state allowing the game server to be started right away.

The installer will:

  • Create required directories

  • Install/advise on required dependencies

  • Download the game server files

  • Load config files

  • Apply any fixes required to get the game server working

Commands

Standard Install

The standard installation is the default installation method that requires user interaction.

Standard: ./gameserver install

Short: ./gameserver i

Auto Install

Auto install is useful for automatic server deployments as no user prompt is required.

Standard: ./gameserver auto-install

Short: ./gameserver ai

Installation

  1. Make your script executable:

chmod +x gameserver

  1. Run the install command: ./gameserver install or ./gameserver auto-install to bypass any prompts.

  2. Follow on-screen instructions.

Install Dependencies

Installation of dependencies requires either sudo or root access. LinuxGSM can automatically install dependencies if the user has sudo or is root.

If dependencies are not installed the server may not start.

Dependencies as root

As root run ./gameserver install and the installer will complete a dependency installation only, ignoring the other installation steps.

Dependencies as sudo user

If a user has sudo access the installer will prompt to enter the sudo password to automatically install dependencies. If sudo is not available the installer will advise on the command required to install dependencies.

Common Installation Issues

User Permission Issues

LinuxGSM may fail to run if the correct permissions have not been used. This fault commonly occurs if an admin has not correctly followed installation instructions found on

Common faults include:

  • Trying to install the LinuxGSM as root.

  • Trying to install LinuxGSM in a directory not owned by the correct user.

  • Not making gameserver file executable using the chmod +x command.

If trying to run as root LinuxGSM will fail to run. See .

To check if the correct user owns the directory or gameserver file, use ls -al

Example output

If some files/directories are not owned by the correct user, use the chown command. Login as root and use the following command, changing the details to match your server

chown -R username:username /home/gameserver

chown -R csgoserver:csgoserver /home/csgoserver

Poor Network Connection to Steam servers

If the connection to the Steam servers is poor (quite common), the SteamCMD download can fail. This is why LinuxGSM will always ask you if the installation was successful allowing admins to retry the download should it fail.

If there are still issues downloading try the option.

./gameserver validate

If downloading is still failing it may be worth contacting your server provider to confirm Steam servers are not being blocked for any reason.

It is also worth searching the internet for issues relating to the error message you receive.

Not Enough Storage

Some game servers take up a significant amount of disk space. If you are having issues downloading check that your server has enough space available.

To check your available storage, use:

df -h or ./gameserver details

DNS Issue

Make sure you can ping using a hostname.

Should this fail, your server may not have DNS lookup correctly configured.

Running on Boot

Using systemd

systemd is the default init system for most modern distros.

You need to create a service file in /etc/systemd/system/

Example ts3server.service

Replace the user and paths to fit your setup.

You need to reload the systemd-daemon once to make it aware of the new service file by systemctl daemon-reload

Now you can do

Crontab

The crontab will allow you to create that allow you to run a command on a set time or on boot. The below example uses @reboot that will run a command on boot.

Most admins will also have a timed monitor cronjob configured. If you do not want to have extra cronjobs the timed monitor will also start a server but with a timed delay.

Using monitor command

After a reboot, any game server that has a "started" status will be started on boot. Servers that were manually stopped will remain stopped.

To learn more, see and .

Using start command

Start a game server unconditionally, even if you manually stop a server.

To learn more, see

rc.local

rc.local is another method to run scripts on boot. Any commands added to the rc.local file will run on boot.

Game Servers

LinuxGSM cannot always provide support for specific game servers. However, there are various support forums available for specific game server support that may be useful. Below is a list of useful links support forums:

Start Parameters

Also known as Command-Line Parameters, Command line arguments, or Launch Parameters.

Many game servers require start parameters, these are command-line options that are set with the server executable when the server starts.

Using over parameters is preferred, however, sometimes this is not an option. When this is the case only parameters or a mixture of game server config and parameters will be used.

Parameters being used by the game server can be found in ./gameserver details. To alter them, you will need to edit .

Predefined Parameters

LinuxGSM often uses predefined parameters that can be edited. This makes adjusting common settings easier and allows them to be displayed in ./gameserver details.

Additional Parameters

Additional command-line parameters can be added to the startparameters setting.

Anything added will be appended to the server executable binary.

Basic Example

Full Example

Parameters reference

  • 7 Days to Die

  • Gold Source Servers

fastdl

FastDL (Fast Download) allows the client to download custom server content (maps, materials, models, particles, sounds, fonts, images) from a web server.

It is used to offload content downloads to a web server instead of relying on source servers (SRCDS) that only allows 20KBps downloads to clients. Content on the web server can be compressed to further speed up the download process. This means that custom content downloads much faster.

Valve now use steam workshop for most custom content however FastDL is still required in some cases.

LinuxGSM FastDL automatically creates the web directories and compresses the content for you.

Supported Servers

  • All Source engine servers

Commands

Standard: ./gameserver fastdl

Short: ./gameserver fd

Supported file formats

  • Maps (.bsp)

  • Materials (.vtf, .vmt, .png, .svg)

  • Models (.vtx, .vvd, .mdl, .phy)

  • Particles (.pcf)

  • Sounds (.wav, .mp3, .ogg)

  • Fonts (.otf, .ttf)

  • Images (.png, .svg)

Requirements

  • Web server on the game server (Apache/Nginx).

    or

  • Access to a remote web server.

Usage

Generate Compressed files

Run the FastDL command on your main LinuxGSM script. This will create a new directory /home/gameserver/public_html/fastdl

./gameserver fastdl

Create A virtual Host (local Apache web server)

If Apache2 is being used a virtual host pointing to the newly created public_html directory can be used.

Tip: Apache2 mod "userdir" is useful if the Linux server is hosting , as it creates a url for the current user http://yourwebsite.ltd/~username.

Tutorial on setup of Apache2 server with Virtual Hosts

Here is an example of setting up Apache2 using a subdomain.

This works for Apache 2.4+ and when using a domain name. If you have got a different configuration, refer to the Apache2 documentation.

Firstly make sure your subdomain redirects to your game server and that Apache2 is correctly installed and started. Create a virtual host in order to be able to host a website :

nano /etc/apache2/sites-available/yourvirtualhost.com.conf

See the example below and edit the relevent details.

Enable your website by restarting Apache2

Test the domain, to make sure it is working http://subdomain.domain.com/fastdl

Edit Game Server config

The new url will need to be added to the

nano serverfiles/gamename/cfg/game-server.cfg

Make sure you have this:

Re-generate FastDL

If the custom server content is updated or removed re running the fastdl command is required to ensure that the webserver is in sync with the game server.

Note for addons developers : Note that clients won't download a file that they already downloaded unless you rename it.

Bzip2 Compression

Custom server content can be compressed using bzip2 which is supported by source games, allowing clients downloads will be faster. It is a must-have if you're hosting large files, as it will save you bandwidth, and speed up downloads for clients. However, using bzip2 on many small files can slow down client loading times.

Garry's Mod Download enforcer

In order for a client to download files from a FastDL in Garry's Mod, the developer of an addon must put files from the addon into lua code resource.Addfile ( "/path/to/file.ext" ). However, some addon developers do not do this. In order for clients to download the required files, an lua file needs to be generated for it to work, which is what the lua enforcer feature does. The only downside is that clients may download files that are not required on the server.

drwxrwxr-x  5 nmrihserver nmrihserver 4096 Jul 17 20:25 lgsm
drwxr-xr-x  4 nmrihserver nmrihserver 4096 Aug 27  2015 log
-rwxrwxr-x  1 nmrihserver nmrihserver 3885 Aug  9 23:04 nmrihserver
drwxrwxr-x  8 nmrihserver nmrihserver 4096 Jul 17 20:32 serverfiles
drwxrwxr-x  3 nmrihserver nmrihserver 4096 Jul 17 20:25 .steam
drwxrwxr-x  8 nmrihserver nmrihserver 4096 Aug 19 16:00 Steam
drwxrwxr-x  6 nmrihserver nmrihserver 4096 Aug 19 16:00 steamcmd
ping google.com
https://linuxgsm.com
FAQ
validate
https://www.cyberciti.biz/faq/linux-setup-dns-lookup/
[Unit]
Description=LinuxGSM Teamspeak3 Server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=ts3server
WorkingDirectory=/home/ts3server
#Assume that the service is running after main process exits with code 0
RemainAfterExit=yes
ExecStart=/home/ts3server/ts3server start
ExecStop=/home/ts3server/ts3server stop
Restart=no

[Install]
WantedBy=multi-user.target
systemctl start ts3server # Start the server
systemctl stop ts3server  # Stop the server
systemctl enable ts3server # Enable start on boot
systemctl disable ts3server # Disable start on boot
    @reboot '/home/username/gameserver monitor' > /dev/null 2>&1
crontab -e
@reboot su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1
crontab -e
@reboot su - username -c '/home/username/gameserver start' > /dev/null 2>&1
nano /etc/rc.local
su - username -c '/home/username/gameserver start'
cronjobs
cronjobs
automated monitoring
Start-Stop-Restart
ARK: Survival Evolved
ARMA 3
Counter-Strike: Global Offensive
Counter-Strike 1.6
Counter-Strike: Source
Day of Defeat: Source
Day of Infamy
Garry's Mod
Insurgency
Killing Floor 2
Minecraft
Quake 3
Rust
Terraria
Team Fortress 2
Teamspeak 3
Unreal Tournament 2004
Unreal Tournament 3
Unreal Tournament 99
Xonotic
## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
defaultmap="map_name"
gamemode="game_mode"
maxplayers="42"
port="27015"
sourcetvport="27020"
clientport="27005"

Parms variable

Executable

startparameters="-game nmrih"

./srcds_run -game nmrih

## Server Parameters | https://docs.linuxgsm.com/configuration/start-parameters#additional-parameters
startparameters="-game nmrih -strictportbind -ip 91.121.72.41 -port 27015 +clientport 27017 +tv_port 27016 +map nmo_broadway +servercfgfile nmrih-server-1.cfg -maxplayers 8"
game server configs
LinuxGSM config files
Source Dedicated Servers
Memories Of Mars
Natural Selection 2
Rust
Squad
Killing Floor 2
<VirtualHost *:80>
        ServerAdmin [email protected]
        ServerName subdomain.domain.com
        ServerAlias subdomain.domain.com
        DocumentRoot /home/gameserver/public_html
        <Directory /home/gameserver/public_html>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Require all granted
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/error.log
        # Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
a2ensite yourvirtualhost.com.conf
service apache2 reload
sv_downloadurl "http://subdomain.domain.com/fastdl"
sv_allowdownload 1
multiple game servers
game server config

Call of Duty 4

Call of Duty 4 Server Files

Many tutorials state that the game disk is required to install a CoD4 server. This is because the server is built into the client. This made it difficult to distribute and create a CoD4 server.

After investigating this issue, it was found that it is possible to run a server with most of the client files removed. This greatly reduces the file size and prevents the client from being used. Because of this LinuxGSM provides a download to only the files required to run the server. Preventing the use of the client, removing the opportunity to use the server to pirate the game.

CoD4x

cod4server uses CoD4x project for its server, rather than the original, as it fixes various bugs and adds a few features over the vanilla server.

https://cod4x.ovh

Updating CoD4x

CoD4x has its own update functionality. It will automatically check for updates and does not require LinuxGSM to check for updates.

CoD4x Master Server

CoD4x game servers (since version 17.6) require a server token to be listed on the CoD4x master server.

To generate a token visit here.

Once a token is generated add it to the sv_authtoken cvar in server.cfg or command-line parameters.

server.cfg

set sv_authtoken "mytokenhere"`

command-line parameters

+set sv_authtoken "mytokenhere"

The server then needs to be restarted to allow the game server to be listed.

CoD4x master server list

Mod Support

Mods for Call of Duty 4 have to be manually added to the game server.

Adding Mods

To run a mod the servers fs_game variable must be set correctly. Mods reside in the mods folder inside fs_homepath. Example directory tree:

mods/                                  
     ├── pml220                         
     │   ├── mod.ff                         
     │   ├── pml220.iwd                     
     │   ├── z_c_r.iwd

To start the server with a mod set the fs_game variable accordingly.

parms="+set sv_punkbuster 0 +set fs_basepath ${serverfiles} +set dedicated 1 +set net_ip ${ip} +set net_port ${port} +set sv_maxclients ${maxplayers} +exec ${servercfg} +map ${defaultmap} +set fs_game "mods/pml220""

Custom Maps

Modded CoD4 servers have the ability to run with user-created maps. To run a server with a custom map, it has to first be placed in the usermaps directory (if missing simply create it yourself).

    ├── usermaps
    │   ├── mp_nuketown
    │   │   ├── mp_nuketown.ff
    │   │   ├── mp_nuketown.iwd
    │   │   ├── mp_nuketown_load.ff

Typically, maps are prefixed by mp_ following the maps name.

Running custom maps on unmodded servers

Running custom maps on unmodded servers is not supported, but there is a neat workaround to still load custom maps. First, create a mods folder and some empty folder inside it.

    ├── mods
    │   ├── myemptymod

Now set fs_game to mods/myemptymod and you will be able to run custom maps.

Fast Download

Fast download is possible with CoD4 to allow custom maps and mods to be hosted on a webserver.

set sv_allowDownload "1" // allow clients to download gamefiles
set sv_wwwDownload "1" // enable download redirection
set sv_wwwBaseURL "http://domain.tld/cod4fastdl/" // defines url to download from
set sv_wwwDlDisconnected "0" // disconnect clients while downloading

here sv_wwwBaseURL has to point to a URL served by your web server.

An example directory tree for a served folder may look as below:

    cod4fastdl/
    ├── mods
    │   ├── pml220
    │   │   ├── mod.ff
    │   │   ├── pml220.iwd
    │   │   ├── z_c_r.iwd
    ├── usermaps
    │   ├── mp_nuketown
    │   │   ├── mp_nuketown.ff
    │   │   ├── mp_nuketown.iwd
    │   │   ├── mp_nuketown_load.ff

Minecraft: Java Edition

Java Requirements

Minecraft: Java Edition required Java 16

Release Settings

Minecraft java edition splits up its release in two ways. Firstly a branch is either classed as a release or a snapshot. A release is a stable version of the game whereas a snapshot is still under development

With LinuxGSM you can specify a specific release/snapshot or the latest release/snapshot. By default, LinuxGSM will use the latest release.

  • List of Minecraft Java releases

  • List of Minecraft Java snapshots

Email

A Linux server's own email solution can be used to receive alerts about LinuxGSM.

Sending emails

LinuxGSM will send an email using the mail command.

Postfix or equivalent must be setup and correctly configured before sending emails. Failure to correctly configure Postfix and a domain for your server will mean the email alert may be flagged as spam or not arrive at all. Configuring postfix is not covered here, but there are many tutorials online to help.

Mailgun is a paid service with 3 month free trial that can be used as an email relay to reduce the chances of email alerts being blocked as spam.

Enable Email alerts

To enable email alerts you will need to add an email address to the LinuxGSM config.

# Email Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Email
emailalert="off"
email="[email protected]"
emailfrom=""

Trackmania Nations Forever / Trackmania United Forever

ANSI Colors

Networking

validate

This is a command for game servers using SteamCMD only.

The validate command will check the server files to make sure they match the SteamCMD repository. This command is useful if game server files are deleted, corrupted or SteamCMD is failing to update.

Validation will overwrite any files that have been changed. This may cause issues with customised servers. For example, if you customise mapcycle.txt, this file will be overwritten to the server default. Any files that are not part of the default installation will not be affected. It is recommended you use this command only on initial installation and if there are server issues.

Commands

Standard: ./gameserver validate

Short: ./gameserver v

mods

LinuxGSM supports the installation, updating, and removing of selected mods and add-ons for some games and engines. Zip add-ons are currently the only supported installations.

Commands

Install mods

./gameserver mods-install

./gameserver mi

Update mods

./gameserver mods-update

./gameserver mu

Remove mods

./gameserver mods-remove

./gameserver mr

Supported mods/add-ons

(This list was last updated on 2020-11-19)

Goldsrc Engine Games (v20.6.0+)

  • Metamod

  • AMX Mod X

Additional Game Specific AMX Mod X addons:

  • Counter-Strike 1.6

  • Day of Defeat

  • Team Fortress Classic

  • The Specialists

  • Natural Selection

Source Engine Games

  • Metamod: Source

  • SourceMod

For Garry's Mod

  • ACF

  • ACF Missiles

  • DarkRP

  • DarkRP Modification

  • PAC3

  • UClip

  • ULib

  • ULX

  • UTime

Unity3D Games

Rust, Hurtworld, 7 Days To Die

  • Oxide Mod

Technical Details

Install

  • All available mods are defined in the mods_list.sh.

  • Mods hosted on github use the latest archive link available. Others are scraped through a mods download mirrors in order to find the latest version.

  • If some mods are already installed, a list of installed mods shows up. If a user tries to install a mod that is already installed, there will be a warning that any custom files will be overwritten.

  • A list of available mods is displayed to the user, including the developers website.

  • After the user selects a mod, the file gets downloaded and extracted to a temporary directory.

  • A list of the mod files is created at lgsm/mods/modname-files.txt. This list allows the mod to be removed if required. LinuxGSM developers have whitelisted important customisable files such as mod config files that will not be removed. If there are any important files that have been missed please raise an issue.

  • Files and directories then get copied to the correct destination.

  • LinuxGSM updates a file containing a list of installed mods lgsm/mods/installed-mods.txt.

Update

  • The list lgsm/mods/installed-mods.txt is used to identify which mods are installed. If a non-referenced mod is found, the updater will stop with an error.

  • Three update types are available

    • OVERWRITE will overwrite all mod files.

    • NOUPDATE will prevent this mod from being updated. Useful for a framework that is designed to be entirely customized.

    • RETAIN keeps the whitelisted files and updating everything else.

  • As there is no easy way to check for mod versions, the update process will update every single installed mod every time the command is run.

  • The process is pretty similar as the installation, mod gets downloaded, extracted, files get removed. Removed files go to a temp file list, then file list list built and temp file list added to it. Finaly the mod gets copied to destination using cp -Rf.

  • If an admin wants to overwrite custom files, then he can either uninstall/reinstall the mod, or just install over it.

Remove

  • A list of installed mods is displayed, user has to pick one to remove.

  • Any file listed in lgsm/mods/modname-files.txt gets removed.

  • The file list gets removed, as well as the entry in installed-mods.txt.

Adding mod support

What mods can be added

Any as long as the archive can be found online and the installation consists of extracting an archive to the serverfiles directory.

Asking to add support for a mod

If there is a mod you wish to see supported by LinuxGSM please raise a GitHub issue with any relevant info about the mod.

Developers

If you wish to create a pull-request yourself for this, please make sure you read the "Developer" section at the bottom right of the wiki.

Usually, editing mods_list.sh should be enough to add mod support. This script contains comments helping you to understand how to use it.

Basically: Add an array variable containing mod info, then add the array to the global array.

Long explanation: The list is based on arrays, used to define all mod properties. You need to make sure that every value is filled up and in the correct order, that mod commands are unique and that multiple choices values are ended with a semicolon (;), otherwise the last value will be ignored. You might need to add an entry in fn_mod_tidy_files_list from mods_core.sh in order to remove lines from mod's file list so that they do not get wrongly removed with the mods-remove command. For further assistance on developing this contact UltimateByte who developed those functions and dgibbs that reworked it should be able to help.

Message Display Time

The Front [WIP]

Features

Linux

Sven Co-op

Information for Sven Co-op servers

Server Resources

Official Resources

Sven Co-op Forums

Sven Co-op Official Discord

The discord contains information for Sven Co-op under the information tab including mapping guides, server config information, and angelscript documentation, among other things.

Sven Co-op Map Database

Sven Co-op Tips

Reminder: Sven Co-op is incompatible with both CentOS and Fedora as libssl.so.1.0.0 is not available

Survival Mode settings, can be set in svenserver.cfg

//Default Survival state (enabled by default) 1=on 2=off
mp_survival_mode 

//1=Players can vote to enable/disable survival 2=Players can't vote on this
mp_survival_voteallow 

//Number of retries before "next map" vote starts. -1 is infinite,  3 is default
mp_survival_retries 

//Minimum number of players needed to start Survival mode
mp_survival_minplayers 

Sven Co-op Guides

Make FastDL Webserver Case Insensitive

backup

The backup command allows the creation of .tar.gz archives of a game server. This can be used to transfer a game server to another Linux server, to backup the game server before a risky change, to save the current state of the game server.

Each time a backup runs the whole game server will be backed up, this can take up significant storage space. Consider a backup policy to prevent your Linux server from running out of storage.

Commands

Standard: ./gameserver backup

Short: ./gameserver b

Example Output

Backup Settings

Alter these three settings by editing .

maxbackups

Set the maximum number of backups with maxbackups. If the number of backups exceeds this value, the oldest backup will be removed after a successful backup.

Setting the value to 0 will prevent any backups from being saved, including the one just created.

maxbackupdays

Set the maximum age of a backup using maxbackupdays. Any backups older than X days will be removed after a successful backup.

Setting the value to 0 will retain the backup for 24 hours.

stoponbackup

Set if the server should be stopped for a backup using stoponbackup. If the server is running it will be stopped while the backup is running and started again once complete. This is useful to prevent any file changes during compression that could result in a corrupt or failed backup.

Automated Backups

Automated backups can be set using . It is recommended that frequently you backup and your retention policy to prevent your server is carefully considered to prevent storage issues.

cronjob example

see

Backups Location

By default backups are saved in the backup directory.

You can change this using the and the property backupdir.

Checking Backups

Use ./gameserver details to view information about created backups.

Alternative Backup Methods

Using the backup feature is not the only way to backup a game server. There are other methods that have more features are are more powerful than the basic LinuxGSM backup feature. Below are are few applications that can be used instead of, or with LinuxGSM backups.

rsync

is one of the most common ways to backup. It is a remote sync tool that is created for sending files/directory's to another location. Particularly good for syncing to another server.

Duplicity

Is an incremental backup solution that allows backups to all sorts of different locations including many different cloud storage solutions like BackBlaze B2 and Amazon S3. Once configured it can be a powerful and efficient backup solution.

duplicity-backup.sh

duplicity-backup.sh is a very useful bash wrapper to help automate duplicity.

rclone

is similar to rsync however can easily sync to cloud storage solutions.

Multi Theft Auto

Server Information

An MTA server comes in two parts. MTA itself and then the resources you install. There is the option to install the default MTA resources to your server within LinuxGSM on install or using the ./mtaserver install-default-resources option. There are many resources available so it is recommended that you take a look at the MTA community resources page

Resources

Resources are a key part of Multi Theft Auto. A resource is essentially a directory that contains a collection of files - including essential script and content files, plus a meta file that describes how the resource should be loaded - and runs on a Multi Theft Auto dedicated server.

A resource can be seen as being partly equivalent to a program running in an operating system - it can be started and stopped, and multiple resources can run at once. Its worth remember though, that unlike programs on an operating system, there is no multi-tasking between resources. Resources generally contain content and Lua scripts for game modes, user interfaces and other tasks affecting the players that are connected to the dedicated server on which the resources are running.

For a collection of user created resources, head over to our web page which serves as a place for hosting our community's resources.

IFTTT

There are hundreds in integrations available on allowing you to send alerts in all sorts of different ways to various services and devices. This functionality is used to allow users to recieve alerts about LinuxGSM.

Setup IFTTT Webhook

To enable IFTTT you will need to setup a Webhooks integration.

  1. Visit

  2. Login and connect the Webhooks integration

  3. Select Documentation to get your IFTTT API key.

  4. Paste the API key into .

Create an IFTTT event name

An event name is a word used to trigger IFTTT event. This word is used when setting up an applet and can be any word you choose.

Values

IFTTT allows 3 different values to be sent using the webhook; Value1, Value2 and Value3. LinuxGSM sends different data for each value as listed below.

  • Value1: Sends the name of the server e.g csgoserver

  • Value2: Sends an alert subject e.g Alert - csgoserver - Test

  • Value3: Sends an alert summary message.

How to create an applet

  1. Create a New applet

  2. Select the Webhooks service

  3. Choose Receive a web request

  4. Enter your Event Name and click Create Trigger

  5. Select an action service.

  6. Give the applet a name and save.

Valheim

Server Resources

Valheim Servers require Passwords

Valheim servers require a server password to start a server. This means it is not possible to connect to a Valheim server unless you know the password.

Direct connect to a Valheim Server

The Valheim in-game browser can be slow, as a workaround you can directly connect to a server in-game through the Join Game tab by pressing the Join IP button, or by adding a server to your Steam server browser favorites. To access the Steam server list, at the top left of the Steam library window go View > Game Servers > Favorites, and click the blue + button. Use ./vhserver details to list the current query port. The default port is 2457.

Long Server Names

Valheim has been previously known to have problems with long server names and special characters, if you are having trouble connecting to a server try making its name shorter or remove special characters.

Other Resources:

Add admins to Valheim server:

Symlinking and ln command

Symlinks create multiple paths to a file or directory and are useful for saving space or having 1 set of files for multiple installs.

Using Symlinks to Save Storage Space

This guide is for pointing multiple directories to the same folder using ln command. Ln creates hardlinks and softlinks, the -s variable creates softlinks. These can be compared to shortcuts on windows, and are going to be used in this guide.

Example guide using two "one server + one user" installs with Sven Co-op:

Gameserver folder 1: /home/svencoop/serverfiles/svencoop_downloads/

Gameserver folder 2: /home/svencoop2/serverfiles/svencoop_downloads/

Shared folder /home/svencoop_content/svencoop_downloads/

The command to link these would be ln -s /shared_folder/ /gameserver_folder/

ln -s /home/svencoop_maps/svencoop_downloads/ /home/svencoop/serverfiles/

ln -s /home/svencoop_maps/svencoop_downloads/ /home/svencoop2/serverfiles/

Change the game server folder ownership to be under their respective users and you are done.

chown svencoop /home/svencoop/serverfiles/svencoop_downloads

chown svencoop2 /home/svencoop2/serverfiles/svencoop_downloads

The files in the symlinks do not need be owned by the gameserver users and will not be recognized by linuxGSM's ownership check. That being said, make sure they can be read by the gameserver users.

Symlink resources

Rocket.Chat

Rocket.chat is an open-source collaboration tool.

Create a Rocket.chat Webhook

  1. Follow the on how to create an incoming webhook.

  2. Copy the Webhook URL.

  3. Turn on Rocket.chat alerts and copy the URL into the . (~/lgsm/config-lgsm/<gameserver>/common.cfg)

LAN Discovery

Many admins who have tried, reported a local server does not appear on the LAN tab in the steam browser.

Workarounds

Console Command

Connect using the console command.

If the port is 27015, then you can just use : connect IP

Add server to favourites

Add the server to the server browser's favourites. If in-game, then go to the legacy browser if applicable to find it. The syntax to use is the same as for the console connection.

Make sure your server actually works and is reachable on LAN, otherwise what you need is rather first.

Fix

As shows, there might be a possible configuration that fixes the issue, but LinuxGSM devs were not able to reproduce it at the time of writing the doc, so this information is purely experimental and you are welcome to update it or post on the issue if you have useful information to share about it.

  1. Edit your using your files

  2. Change ip="0.0.0.0" to an actual interface IP, for example ip="192.168.1.10" ; this will allow LinuxGSM to and query your server properly.

  3. In the fn_parms section, add +sv_lan 1 and make sure you replace -ip ${ip} with -ip 0.0.0.0

  4. Make sure your server main port listens to one of these IP or IP ranges: 4242 ; 26900-26905 ; 27015-27020 ; 27215

change-password

This is a command for only.

change-password resets the TeamSpeak 3 server query password. The server will reboot and a new password will be generated.

The password is given on server installation. Passwords can also be found in the logs.

Supported Servers

  • TeamSpeak 3

Commands

Standard: ./gameserver change-password

Short: ./gameserver pw

7 Days to Die

Server Resources

Telnet

7 Days to Die uses telnet to admin the server. This is enabled by default with no password however will only listen on localhost.

Discord

is a VoIP app that allows other applications to send messages via a webhook. This functionality is used to allow users to recieve alerts about LinuxGSM.

Create a Discord Webhook

A webhook is required to post alerts to a Discord text channel

  1. Right-click on the text channel you want to use and select Edit channel.

  2. Select Webhooks > Create Webhook

  3. Name: LinuxGSM

  4. Icon:

  5. Copy the Webhook URL

  6. Turn on discord alert and enter the URL in to the . (~/lgsm/config-lgsm/<gameserver>/common.cfg)

You must have Discord User Settings > Text & Images > Link Preview: 'Show website preview...' enabled or you will just see blank messages from the alert bot.

Excellent description of differences between Symlinks and Hardlinks by OSTechNix
Official Ubuntu ln Documentation
TeamSpeak 3
Official Dedicated Server Guide
https://nodecraft.com/support/games/valheim/adding-admins-to-your-valheim-server

Branch

Allows the selection of specific builds of a game server in SteamCMD

Game developers sometimes make available several builds of the game server on Steam, often to allow beta testing of new releases. These builds are made available via branches (betas) and can be entered in the LinuxGSM Config.

Find Branches

A list of all available branches for a game server are listed on SteamDB under the appid depots.

https://steamdb.info/app/258550/depots/

Select a Branch

The default SteamCMD branch is public. However, it is possible to use other builds by entering a branch name in the branch setting in your LinuxGSM config.

# Steam App Branch Select
# Example: "latest_experimental"
branch="staging"

Beta Password

Some branches require a password. This can be done by entering a password in thebetapassword setting in your LinuxGSM config.

betapassword="branchpassword"

jq

jq allows LinuxGSM to filter json files to extract specific useful data.

Distro

Version

Ubuntu LTS 16.04

1.4

Ubuntu LTS 18.04

1.5

Debian 8

1.4

Debian 9

1.5

Debian 10

1.5

CentOS 7

1.6

CentOS 8

1.5

Make Webserver Case Insensitive

Make apache2 webserver case insensitive with apache2 mod_speling

Some games require FastDL to be case insensitive, apache2 is case sensitive by default. Enabling apache2 mod_speling ignores case sensitivity on a LAMP stack. This guide applies to debian and ubuntu. At the bottom of this page are external guides that include CentOS/Fedora. This workaround will not work on shared webhosting where editing apache2 files is not available.

Enable mod_speling:

a2enmod speling

Restart apache:

service apache2 restart

Apache needs to be told which directories mod_speling is applied to, open the webserver's .conf file located inside /etc/apache2/sites-available/ and set AllowOverride to All.

Example:

<Directory /var/www/html/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Require all granted
</Directory>

Set apache2 to use the .conf file you just edited:

a2ensite name_of_.conf_file

In /var/www/html/ or your webserver directory, create a .htaccess file with this:

<IfModule mod_speling.c>
CheckSpelling On
CheckCaseOnly On
</IfModule>

Test the configuration by creating a file, like test.txt, and see if it can be opened in browser by typing TEST.txt, test.TXT, etc. If it works, you are finished.

mod_speling Documentation

Guides from other sources:

Wikitechy mod_speling Guide

a2Hosting mod_speling Guide

Security

TO-DO

Avoid a security breach and allow you to run multiple servers

needs to be verified

(NOTE: This method is detailed further here. The web page also describes how to give certain users the default full access to listing all processes.)

By default, a user can see all started processes from other users, which is bad, but also their start parameters, which is pretty dangerous. Those start parameters can contain sensitive information, such as RCON password, Steam API keys and GSLT upon start, a Rust dedicated server is checking if the process name started by any user, and will prevent you from running it again if it finds it, displaying "Player is already running".

To avoid that, run:

mount -o remount,rw,hidepid=2 /proc

And to keep the changes upon machine reboot:

nano /etc/fstab
# Here are the modification to apply to the "proc" line
proc    /proc    proc    defaults,hidepid=2    0    0

You still need to make one user per server, change ports, and repeat the install process. (See this for more info)

Guides

Guides that are used on multiple servers

Install Sourcemod and Metamod:Source

Other

Dependencies

mumbleserver@game:~$ ./mumbleserver b
[ INFO ] Backup mumble-server: A total of 34M will be compressed into the following backup:
/home/mumbleserver/backups/mumble-server-2016-10-28-194346.tar.gz
Warning! mumble-server will be stopped during the backup.
[  OK  ] Stopping mumble-server: Mumble Port 64738
[  OK  ] Backup mumble-server: Backup created: mumble-server-2016-10-28-194346.tar.gz is 36M size
maxbackups="4"
maxbackupdays="30"
stoponbackup="on"
crontab -e
0 5 * * *  /home/username/gameserver backup > /dev/null 2>&1
├── home
├── csgoserver
    ├── ** backup **       
    ├── lgsm
    ├── log       
    ├── serverfiles
backupdir="${lgsmdir}/backup"
Backups
===============================================================================
No. of backups:    1
Latest backup:
    date:          Fri Jan 23 15:54:52 CET 2015
    file:          /home/csgoserver/backups/csgo-server-2015-01-23-155447.tar.gz
    size:          1.6G

Disk Usage
===============================================================================
Disk available:  5.4G
Serverfiles:     1.6G
Backups:         6.2G
LinuxGSM config
cronjobs
cronjobs
configuration file
rsync
rclone
# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT
iftttalert="off"
ifttttoken="e-Yg8blVGDA15ewWvtZjUe"
iftttevent=""
# IFTTT Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/IFTTT
iftttalert="off"
ifttttoken="e-Yg8blVGDA15ewWvtZjUe"
iftttevent="linuxgsm_alert"
Testing LinuxGSM Alert. No action to be taken.
Game Squad
Server name LinuxGSM Server 1
Hostname ubuntu.example.com
Server IP 1.2.3.4:27015
IFTTT
https://ifttt.com/maker_webhooks
LinuxGSM settings
connect IP:PORT
connect 192.168.1.10:27025
Troubleshooting
this github issue
Start Parameters
LinuxGSM Config
monitor
LAN Discovery
# Discord Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Discord
discordalert="on"
discordwebhook="https://discordapp.com/api/webhooks/3539332633367897009/5t_K4GkuBaR2-69TsKqXmHIya1ck1tirnu_Fst-DUC00dye98eaa_I6uTIcHEsi7a17K"
Discord
LinuxGSM settings
Community
Community
Rocket.chat guide
LinuxGSM settings
Official Dedicated Server Guide

Slack

Slack is a cloud-based set of proprietary team collaboration software tools and online services.

Create a Slack Webhook

A webhook is required to post alerts to a slack.

  1. Follow slack's guide to setting up an incoming webhook.

  2. Copy the Webhook URL

  3. Turn on slack alerts and enter the URL in to the LinuxGSM settings. (~/lgsm/config-lgsm/<gameserver>/common.cfg)

# Slack Alerts | https://docs.linuxgsm.com/alerts/slack
slackalert="on"
slackwebhook="your webhook url"

Pushover

Pushover allows the sending of push notifications to various devices such a PC, phone and tablet. This functionality is used to allow users to receive alerts about LinuxGSM.

Setup Pushover Alerts

A Pushover application and your user key is required to send messages to Pushover.

Visit here to create a new application.

  • name: LinuxGSM

  • Check the box agreeing to the Terms Of Service.

Once the application has been created get the API key and user key (which can be found in the pushover dashboard). Turn on Pushover alerts and paste in API key and user key in the LinuxGSM config.

# Pushover Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushover
pushoveralert="on"
pushoveruserkey="yourpushoverid"
pushovertoken="b5u24t1wua34gmh14kr1s3erkwi7tl"

tmux

LinuxGSM uses tmux to run servers in the background so the server instance is not terminated when you close a terminal session.

LinuxGSM requires tmux => 1.6

Tmux is a key component of LinuxGSM and replaced screen which was used on earlier versions. tmux has a few improvements over screen; mainly being better at handling standard Linux users, this was a major issue when developing with screen. tmux allows LinuxGSM to call up a game server running in the background so you can see what it is doing; this feature is available with console feature.

LinuxGSM using tmux in console

tmuxception

Some server admins have attempted to run LinuxGSM within a tmux or screen session. As LinuxGSM calls tmux it is not possible to run LinuxGSM within a tmux or screen session.

Known Issues

Tmux 1.8

tmux 1.8 has an issue that prevents console logging from working. This is because the pipe-pane feature is broken in tmux 1.8 causing it not to output the console to the console log files. The only solution is to use another version of tmux.

tmux 1.8 is installed on CentOS 7 by default see guide below to installed a newer version

create session failed: Operation not permitted

This issue normally occuires with CentOS and is caused by the standard user not having permissions to user /dev/ptmx.

create session failed: ./srcds_linux -game csgo: Operation not permitted

To fix this the user needs to be part of the tty group.

usermod -G tty csgoserver

To confirm the user has been added check /etc/group.

grep tty /etc/group
tty:x:5:csgoserver

Upgrade tmux CentOS 7 using Ghettoforge

If the default version of tmux (1.8) installed on CentOS 7 it will fail to log the console output. To fix this it is possible to upgrade to a newer version of tmux using the Ghettoforge repository.

Install Ghettoforge with the following command.

yum install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm

Install tmux using the Ghettoforge repo.

yum --enablerepo=gf-plus install tmux

Once installed restart the server to complete the upgrade.

restart

Steam Master Server

Some game servers are listed on the steam master server list

For a game server to be seen online it normally has to register itself on a master server list. Valve maintains a master server for many different games. The master server is used to populate the server browser.

Master Server Check

LinuxGSM can check that supported game servers are listed on the steam master server. This is useful for confirming that the server is actually registering and to help diagnose issues.

You can check that your server is listed on the master server by using ./gameserver details

Master server:    listed

Not all game servers support this option but if it does the setting is set to true by default.

steammaster="true"

Troubleshooting: Server Missing from Master Server List

There are instances when a game server might not appear in the server list due to several common reasons:

  • Server Loading Time: Please be patient while the server loads, as it may take some time before it becomes visible. Depending on the game server type, certain servers require additional time for tasks like map seeding or loading mods.

  • Blocked or Misconfigured Ports: Ensure that the ports are correctly set up and not blocked. To verify the connection, try connecting directly to the server.

  • Filtering in Server List: Check that you have not applied any filters in the server browser. Filters like specific maps, "Empty Server," or "Password Protected" should be unchecked to display all available servers.

  • Server Browser Limitations: It's possible that the server browser functionality of the game might not list all available game servers. In such cases, not all servers may be visible in the server list.

Pushbullet

Pushbullet allows the sending of push notifications to various devices such a PC, phone and tablet. This functionality is used to allow users to recieve alerts about LinuxGSM.

Enable Pushbullet alerts

To enable Pushbullet alerts an Access Token needs to be generated. Access Tokens are available from Pushbullet setting found here.

Once you have created a token insert it in to you LinuxGSM config.

# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet
pushbulletalert="on"
pushbullettoken="o.noWN6jpIeBUkLraw24saHKd7ksOkn7on"
channeltag=""

Enable Channels

Alerts can also be sent to Pushbullet channels. Channels are push notification feeds that can be subscribed to. Anything you push to a channel will instantly go to all of the channel's subscribers. Only the owner of a channel can push to it.

Visit here to generate a channel.

Once you have created the channel set the channeltag in the script without using hash #.

channeltag="myepicserver"

LinuxGSM Config

LinuxGSM Configs and are different. One is the config for LinuxGSM itself and the other is for the game server instance.

The configuration of LinuxGSM is handled through several config files, which are loaded in a specific order. Understanding this process is crucial to ensure that settings are appropriately placed within the correct config files.

Config Files Location

Relative to your installation directory, config files are located in:

Configuration Mechanism

The LinuxGSM configuration mechanism is intentionally designed to provide users with several advantages. These include the ability to access new features, retain default settings, effectively handle multiple instances, and allow LinuxGSM to update the configuration when necessary.

Configuration files

An understanding of how LinuxGSM handles instances helps.

_default.cfg

_default.cfg is the template config, this file is a base of all available default settings. It can not be edited and is updated by LinuxGSM when using ./gameserver update-lgsm. This config is loaded first.

Do not edit _default.cfg any changes to this file will be overwritten.

common.cfg

common.cfg is used for common settings that apply to all game server instances of the same installation. This saves having to apply the same settings multiple times.

instance.cfg

instance.cfg is the configuration file used for each individual game server instance. Settings here will only apply to this specific game server instance. This config file takes the same name as the game server instance name ./gameserver. For example, if ./csgoserver is used the instance.cfg will be called csgoserver.cfg. This config is last to be loaded.

Secret Configs

Secret configs are not encrypted, but a place to store sensitive info away from other configs.

Secret configs serve as a designated space for storing sensitive information, such as steam login details, separately from the main config files. This separation allows server administrators to back up their configurations while excluding sensitive data, enhancing security and privacy. It proves especially valuable for administrators who wish to create a version-controlled skeleton configuration using git that might eventually become publicly accessible.

It's essential to understand that the secret config is not encrypted or inherently more secure than other config files. However, it provides a convenient way to keep sensitive information isolated from the rest of the configurations.

To distinguish secret configs from others, their names are typically prefixed with the word "secrets." This naming convention aids in identifying and managing these specific files.

Config Load Priority

When the configuration files are loaded by LinuxGSM, they adhere to a specific order. Initially, settings are fetched from _default.cfg, followed by common.cfg, and finally instance.cfg. As a result, any setting specified in instance.cfg will take precedence over the same setting in common.cfg, which, in turn, overrides the setting in _default.cfg. This hierarchical loading ensures that settings become increasingly specific, with instance configurations having the highest priority.

LinuxGSM config load order

How to Use

Simple Configuration

This configuration fits most scenarios, where you have a simple installation with only one instance.

  1. Browse to the config-lgsm directory

  1. Use ls to list the directory contents and find the name of your instance.cfg.

  2. Use cat or nano to see the contents of _default.cfg .

  1. Copy the individual settings you want to change to instance.cfg

It is recommended you only copy the settings you want to change from _default.cfg into instance.cfg. If any settings in _default.cfg are updated with a new release of LinuxGSM they may not be picked up if all the settings have been copied.

Multiple Instances Configuration

This configuration is useful for .

  1. Browse to the config-lgsm directory

  1. Use ls to list the directory contents.

  2. Use cat or nano to see the contents of _default.cfg .

  3. Copy any settings you want to apply to all instances to common.cfg.

It is recommended you only copy the settings you want to change from _default.cfg into instance.cfg. If any settings in _default.cfg are updated with a new release of LinuxGSM they may not be picked up if all the settings have been copied.

  1. Copy any settings you want to apply to a specific instance to its instance.cfg.

Examples

Example 1

Load de_nuke as default map on csgoserver:

Example 2

Load cs_office as default map on csgoserver:

Example 3

Load de_dust2 as default map on csgoserver:

Example 4

Load de_nuke as default map on csgoserver instance and de_inferno on csgoserver-2 instance:

Example 5

Load de_nuke as default map on csgoserver instance and cs_office on csgoserver-2 instance:

Dont Starve Together

Authentication Token

Don't Starve Together server requires an Authentication Token.

  1. Go to the Klei website .

  2. After logging into your account to get your game server authentication token.

  3. Enter a friendly name for your server and copy the access token and paste it into the file cluster_token.txt.

You can quickly do this by running the following command, replacing [AUTHTOKEN] with your authentication token.

Clusters and Shards

A Don't Starve Together server consists of clusters and shards.

One cluster can contain multiple shards. A shard is simply a map/level. Multiple shards are connected by cave entrances/exits found on the map. These are functioning as portals to allow players to travel between actual game servers.

Each shard (level of the world) has to be run as an individual game server instance.

Single-Shard

By default, the cluster will be single-sharded. So you only need one server but you will also only have one map.

Default start parameter setting:

Multi-Shard

Take a look at to get a general idea of how to create multiple game servers.

There are two types of shards:

  1. master shard: the shard you enter when joining the server / the shard/server you have to join (one per cluster)

  2. slave shard: shard that will connect to the master (arbitrary number per cluster)

In this example, we will only use two shards, one overworld shard and one cave shard, on the same machine using the same installation. If you want to use more shards or run the shards on different machines, take a look at the guides mentioned at the bottom. First of all we need two scripts:

Server #1

dstserver-1 will be the master shard with an overworld as level.

~/.klei/DoNotStarveTogether/Cluster_1/Master/server.ini

Server #2

dstserver-2 (this will be the slave shard with a cave as level):

~/.klei/DoNotStarveTogether/Cluster_1/Caves/server.ini

If you want to Caves and Overworld to display on the same server, you also to change the cluster.ini, otherwise it will run two instances, one with the Overworld and another with the Caves:

~/.klei/DoNotStarveTogether/Cluster_1/cluster.ini

Set all installation variables BEFORE running the ./dstserver-[1,2] install commands. Feel free to change these settings but make sure that you set them to the same clusters. You also should not change them afterwards.

For clarity it is recommended recommend naming the master shard Master.

Lastly you have to start both servers. The order does not matter because the slave server will auto-retry connecting to the master server which is listening.

Guides / Documentations:

Unreal Tournament 2004

Server Files

LinuxGSM uses the most recent version of UT2K4 server available for Linux.

v3369.3

This includes the various map packs such as the UT2004 Mega Pack.

Complete list of maps available with the LinuxGSM installer

Killing Floor 2

Ports

  • Game Port Default: 7777 UDP Handled by: LinuxServer-KFEngine.ini

  • Query Port Default: 27015 UDP Handled automatically or handled by parameters. The formula for finding query port assigned automatically is 19238 + assigned game port.

  • Web Admin Default: 8080 TCP Handled by: KFWeb.ini

  • Steam Port Default: 20560 UDP Handled automatically. The formula for finding the steam port is 12783 + Game Port.

Resources

Server Config Information

LinuxGSM installations contain configSubDir=servername in the command line by default, which creates a folder for config files named after the server. The default directory is /home/user/serverfiles/KFGame/Config/kf2server . Use these files to change server settings.

Workshop

Players on the Epic Store will not be able to download files hosted with the Steam Workshop.

Workshop content is added in LinuxServer-KFEngine.ini in the OnlineSubsystemSteamworks.KFWorkshopSteamworks section

Ensure the game server is stopped before editing the file to prevent it being overwritten.

This will only work for Workshop items that the server downloads itself, that are listed in the [OnlineSubsystemSteamworks.KFWorkshopSteamworks] section as described above.

  1. Make sure that the server is not running. If it is running, the Workshop setup will be overridden the next time you restart the server.

  2. Find the section [IpDrv.TcpNetDriver] in the PCServerEngine.ini config file.

  3. Add the line "DownloadManagers=OnlineSubsystemSteamworks.SteamWorkshopDownload" to that section. If there are other "DownloadManagers=" lines, make sure this one is the first.

  4. Do not delete anything from this section, except (optionally) other DownloadManagers= lines.

Log Management

Logs are an important part of monitoring a server as it allows you to know what has been happening. LinuxGSM has a log directory that allows you to track the gameserver, console and LinuxGSM itself.

If your user is gameserver, then LinuxGSM logs are located in the following directory:

/home/gameserver/log

This "log" directory contains two other directories:

  • script, logs LinuxGSM script activity

  • console, logs gameserver [console](../commands/console.md) output

  • game, is a redirect to the game server log files if available.

    Settings

You can alter these settings to change LinuxGSM behavior:

Note: logdays="0" means logs will be removed if older than 24h.

Log clearing

LinuxGSM clears outdated logs according to logdays variable setting. This will affect script and console logs, as well as common game logs.

Gamelogs management

LinuxGSM also clears logs from common locations to prevent them from using gigabytes of disk space, including:

  • ${systemdir}/logs

  • ${systemdir}/*/logs

  • ${systemdir}/addons/sourcemod/logs

  • ${systemdir}/data/darkrp_logs

  • ${systemdir}/data/ulx_logs

Note: ${systemdir} designates the location of your game server installation

Source Engine

Default ports

Both Source engine and GoldSrc engine use the following ports by default.

  • Game Port: 27015

  • Query Port: 27015

  • RCON Port: 27015

  • Client Port: 27020

  • Source TV: 27005

Static Port Mapping (NAT/Docker)

The port that is configured in the start parameters must be the port that is exposed to the Internet. This is because the game server reports the port that it is configured in start parameters to use to the master server. If this does not match the game client will not be able to connect to the server.

firewalls

A firewall is a security device that blocks or allows network traffic on to a system or network to prevent unauthorised access and help protect from malicious attack. Firewalls can also assist in rate limiting traffic to prevent too much traffic being sent to a system. This is useful for game servers to help prevent a DDoS (Distributed Denial-of-Service) attack that can overwhelm a game server.

Firewalls can be physical hardware devices that sit on a network, or software that sits on a server or desktop device. This page will focus mainly on software firewalls.

DDoS protection

A (DDoS) attack occurs when multiple systems flood the bandwidth or resources of a targeted system, usually one or more web servers. Such an attack is often the result of multiple compromised systems (for example, a botnet) flooding the targeted system with traffic. A botnet is a network of zombie computers programmed to receive commands without the owners' knowledge. Server providers may offer DDoS protection, such as Arbor, that will mitigate such attacks before it reaches a server. However, this feature is often provided as a premium feature meaning often only available on more expensive servers. Some providers may also provide sub-standard protection that may incorrectly filter traffic. So be aware of what protection if a server provider has to protect your server.

iptables

is the most commonly used and supported Linux firewall utility, with many other tools interfacing with it To see iptables rules: iptables -L To flush (erase) iptables rules: iptables -F

Protecting a game server

One way to protect a game server is to rate-limit incoming connections to the game server. Iptables will do this by dropping packets from a connection if it is sending too much traffic. This is particularly important if using the LinuxGSM monitor feature, as monitor relies on the query port being available. Should the query port be flooded with traffic it may become unavailable and LinuxGSM will assume the game server has crashed and reboot. The below example will rate-limit traffic on port 27015 (the default for source engine games) to 10 requests every 60 seconds. Different game servers may require different rate limits, so it may be important to adjust the limits to ensure legitimate traffic does not get blocked.

Checking connectivity

Once you have created your port forwards and want to see if the internet can access the ports, there is a website called . Simply change the port to your game port (27015 for example) and it will tell you if it can access it on your computer. This will help you verify your port forward was created successfully.

Networks with multiple gateways

Some game servers (like Rust) register their external IP with steam when they startup. When you create port forwards to the game server, you need to make sure the port forward is on the address the outbound traffic is on. For example, say you have a router with two IPs from different ISPs;

If your traffic is going out WAN0 you need to put the port forwards on the 71.2.5.23 address. If your outbound traffic is going out WAN1 you would need to put your port forwards on 65.13.29.46.

glibc

Summary

Most servers require a specific version of glibc installed. Newer distros normally have the required version. However the older the distro the less likely the server will run. Check the requirements below. If you have an older distro the game server may still run with a .

Server Requirements

A complete list can be found .

Distro glibc Versions

List of distros and there glibc version.

is also a great source to find this information.

glibc version history available on .

External Links

monitor

monitor checks the game server to ensure the server functioning. First checking the game server process is running then querying the game server to check the game server is responding. monitor is designed to be an automated command that frequently checks the game server, rebooting and alerting if required.

Commands

Standard: ./gameserver monitor

Short: ./gameserver m

How does monitor work?

Monitor first checks that the server process or session is running. If it is, it will then attempt to query the server using or . Should this fail to query it will attempt to query every 15 seconds over 60 second period. Should this fail the server will be rebooted and an alert sent out.

During server start, map change, workshop downloads, the server is unable to answer queries.The monitor will wait for 60 seconds as it is common for servers to stop responding to queries during a map change. This wait prevents monitor from rebooting a server that does not require it.

Automated Monitoring

Monitor is designed to be and automated task, using to allow a game server to be frequently checked.

As a reminder, you can edit your cronjobs, typing :

Monitor Cronjob

Use these cron examples to setup automated monitoring.

Replace the username and gameserver according to your requirements.

  • A user based cronjob to monitor your server every 5 minutes .

  • A root user based cronjob to monitor your server every 5 minutes .

To learn more about automation, see .

Alert Notifications

To be notified when a server fails alert notifications can be setup , see .

Query Delay

Game Servers do not respond to queries while the server is booting. Query delay prevents monitor from giving a false positive should it query while the server is booting. A timed delay prevents monitor from using query at all during a set time (normally either 1 or 5 minutes) after start, giving the server time to boot and become ready to accept queries. Query delay timer can be adjusted using the querydelay setting.

Monitor Activation

Starting and stopping the game server activates and deactivates monitor. This prevents the server being manually stopped only to be started again by monitor.

Stop Mode

Stop mode allows a game server to gracefully shutdown by sending a stop signal to the server. The stop signal might be one of the various commands such as stop,quit,exit etc. In some cases, this is important to give the server time to save its state.

Alerts

LinuxGSM allows alerts to be received using various methods, should the game server require your attention.

Alert Settings

Alert settings can be changed in

More Info

More info allows you to get further info about an alert using hastebin.com. Many alerts only give basic info, unlike email. More info displays the same output as email in a link within a basic alert.

Display IP

The IP address you want to be displayed in alerts.

By default, the LinuxGSM alert will display the external internet facing IP. Failing this will fall back to the server IP. If the IP is incorrect it can be manually set using displayip="".

Sourcemod and Metamod:Source

Sourcemod Resources and Known Problems

Sourcemod is a plugin for source games that can add functionality like voting systems, minigames, and server utilities. Sourcemod requires Metamod to run.

LinuxGSM includes a that is able to install Sourcemod automatically.

Sourcemod Resources

Sourcemod Official Resources

Sourcemod Plugins

Plugins can be downloaded from Alliedmodders website:

General Sourcemod Tips

If players are kicked after joining, make sure Sourcemod does not have any errors and is up to date

Check folder hierarchy in archives before unpacking, each plugin creator organizes their archives differently.

The server may need to be set to sv_pure 0 in some cases.

CS:GO Sourcemod Tips

If the server changes to dust or mirage instead of the chosen map, disable the nextmap plugin.

IP Address Configuration

How LinuxGSM handles IP addresses

Make sure you understand basic .

By default, LinuxGSM will use the meta-address. This behavior will allow the game server to bind to all interfaces and allow LinuxGSM to all available IP addresses. If there are multiple IP addresses available, will display 0.0.0.0.

Internet IP: LinuxGSM will try to gather the server's internet IP address to be shown in .

Specific IP: If a specific IP address needs to be set it can be done using the ip setting in the or config files. Depending upon the game server this will allow it to bind to a specific IP address.

Display IP: If you want to change the IP address displayed in alerts you can use the .

logdays="7" # How long logs are kept
consolelogging="on" # Turning this to off will disable console logging
# Stop Mode | https://docs.linuxgsm.com/features/stop-mode
# 1: tmux kill
# 2: CTRL+c
# 3: quit
# 4: quit 120s
# 5: stop
# 6: q
# 7: exit
# 8: 7 Days to Die
# 9: GoldSrc
# 10: Avorion
# 11: end
# 12: shutdown
# 13: Soulmask
stopmode="7"
lgsm/config-lgsm/gameserver
_default.cfg -> common.cfg -> instance.cfg
cd lgsm/config-lgsm/
cat _default.cfg
cd lgsm/config-lgsm/
csgoserver.cfg
csgoserver-2.cfg
_default.cfg: defaultmap="de_dust2"
common.cfg: NOT SET
csgoserver.cfg: defaultmap="de_nuke"
_default.cfg: defaultmap="de_dust2"
common.cfg: defaultmap="cs_office"
csgoserver.cfg: NOT SET
_default.cfg: defaultmap="de_dust2"
common.cfg: NOT SET
csgoserver.cfg: NOT SET
_default.cfg: defaultmap="de_dust2"
common.cfg: defaultmap="de_inferno"
csgoserver.cfg: defaultmap="de_nuke"
csgoserver-2.cfg: NOT SET
_default.cfg: defaultmap="de_dust2"
common.cfg: NOT SET
csgoserver.cfg: defaultmap="de_nuke"
csgoserver-2.cfg: defaultmap="cs_office"
Game Server Configs
multiple game server
multiple instances
echo '[AUTHTOKEN]' > ~/.klei/DoNotStarveTogether/[CLUSTER]/cluster_token.txt
sharding="false"
./dstserver-1
./dstserver-2
## Predefined Parameters
sharding="true"
master="true"
shard="Master" 
cluster="Cluster_1"
cave="false"
[NETWORK]
server_port = 11000

[STEAM]
authentication_port = 8768
master_server_port = 27018
## Predefined Parameters
sharding="true"
master="false"
shard="Caves" 
cluster="Cluster_1"
cave="true"
[NETWORK]
server_port = 11001

[STEAM]
authentication_port = 8769
master_server_port = 27019
[SHARD]
shard_enabled = true
https://accounts.klei.com
visit this page
Multiple-Servers
Quick Setup
Server Settings
Command Line Options
Understanding Shards and Migration Portals
iptables -A INPUT -p udp -m udp --dport 27015 -m state --state NEW -m recent --set --name DEFAULT --rsource
iptables -A INPUT -p udp -m udp --dport 27015 -m state --state NEW -m recent --update --seconds 60 --hitcount 10 --name DEFAULT --rsource -j DROP
[eth0] 192.168.1.1 (LAN)
     |  |
-----------------
|                | --[WAN0] 71.2.5.23 (ISP A)  
|                | --[WAN1] 65.13.29.46 (ISP B)  
------------------
distributed denial-of-service
iptables
canyouseeme.org

Distro

glibc

CentOS 7

2.17

CentOS 8

2.28

Debian 9

2.24

Debian 10

2.28

Debian 11

2.31

Ubuntu 16.04 LTS

2.23

Ubuntu 18.04 LTS

2.27

Ubuntu 20.04 LTS

2.31

glibc fix
here
distrowatch.com
Wikipedia
distrowatch.com
glibc Homepage
crontab -e
*/5 * * * *  /home/username/gameserver monitor > /dev/null 2>&1
*/5 * * * *  su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1
## Monitor | https://docs.linuxgsm.com/commands/monitor
# Query delay time
querydelay="1"
tmux
gamedig
query_gsquery.py
cronjobs
Cronjobs
alerts
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""
LinuxGSM config
command
LinuxGSM Mod Command
Official Sourcemod Install Guide
Sourcemod Download Link
Metamod Download Link
Plugins Forum
High Traffic Plugins Forum
Take note that some servers require a manually generated and placed .vdf file(link).
IP addressing
0.0.0.0
quer
y
details
details
LinuxGSM
game server
displayip
Changing port using Docker or firewall
Changing port using the start parameters

permissions

In Linux, files and directories are owned by a user and a group (see File Ownership). On top of that, this user, group, and other ones (groups and users), have different permissions on these files. That's what we call file permissions. You might need to change them. If this can be boring to new users, remember that this is a huge part of what makes Linux as secured as it is, and you are required to know this if you wish to do anything serious with Linux.

Check current permissions

Check permissions from a file or all files of any directory

ls -al /path/to/file/or/dir

Sample output:

ultimatebyte@game:~$ ls -al twserver
-rwxr-x--- 1 ultimatebyte ultimatebyte 5691 Jan 30 01:14 twserver

Explaination:

  • First character is a a - for files, or a d for directories

  • Three next ones are owner permissions: rwx

  • Three next ones are group permissions: rwx

  • Three next ones are "others permissions: rwx for groups and users that are now owning the file

  • First user listed is the owner

  • Next entry is the group owning the file

"r" stands for "read", "w" stands for "write", "x" stands for execute. If any letter from rwx is showed as a -, it means that the permission is not granted.

Change permissions

Change permissions from files or directories

Command

chmod

Recursive syntax (include sub files and directories)

Append -R to your chmod

chmod -R

Syntax 1)

Set all permissions at once

chmod 777 == chmod -a+rwx chmod 000 == chmod -a-rwx

First number is for user, second is for group, third for others

Values

0 no permissions
1 x
2 w
3 wx
4 r
5 rx
6 rw
7 rwx

Example

Default permissions are 755. If you wish to prevent other users from interacting with your files, then 750 can be great.

chmod -R 750 /home/userdir

Syntax 2)

We used rwx for these, but of course, you should pick the permissions you wish to add or remove.

Permissions add

chmod +rwx filename Will add read, write, and execute permissions to this file anyone on the machine. r stands for "read", w for "write", and x for "execute"

Example : chmod +x filename Will make the file executable by anyone on the machine.

Permissions remove

chmod -rwx filename Will remove read, write, and execute permissions to this file anyone on the machine. Note : root user is the only exception.

Permissions for user/group/others/all

chmod -u+rwx chmod -g+rwx chmod -o+rwx chmod -a+rwx

Multiple permissions at once

chmod -u+r,g-w,o-rwx

Of course, you can replace +rwx by anything previously mentioned

Set GUID and GID

Advanced permissions management, you will likely not need this for game servers.

Set GUID

No GUID

chmod -R a-s /path/to/dir chmod -R 0xxx /path/to/dir

Example : chmod -R 0640 /home/user/website

Set UID

Files will run as the user

chmod -R u+s /path/to/dir/ chmod -R 2xxx /path/to/dir

Set GID

Any subdir and subfile will have the same group

chmod -R g+s /path/to/dir/ chmod -R 4xxx /path/to/dir

Set GUID

Set both UID and GID

chmod -R a+s /path/to/dir/ chmod -R 6xxx /path/to/dir

details

The details command allows access to various useful information about the game server. Details are gathered from configs, parameters and server queries.

Commands

details

Standard: ./gameserver details

Short: ./gameserver dt

postdetails

postdetails (using hastebin) is used to share server details, to help with support, while hiding sensitive information:

Standard: ./gameserver postdetails

Short: ./gameserver pd

Details Provided

Various relevant details are provided including:

  • Distro Details

  • Performance

  • Disk usage

  • Server Name

  • Server IP

  • Server Ports

  • Passwords

  • Config File

  • Backups

  • Server parameters

Example output

Distro Details
===============================================================================================================================================================
Distro:    Debian 7.7
Arch:      x86_64
Kernel:    2.6.32-042stab102.9
Hostname:  vps86887.ovh.net
tmux:      tmux 1.6
GLIBC:     2.13

Performance
===============================================================================================================================================================
Uptime:    0d, 17h, 36m
Avg Load:  0.00, 0.02, 0.00

Mem:       total   used   free
Physical:  1.0G    1.0G   17M
Swap:      128M    25M    102M

Disk Usage
===============================================================================================================================================================
Disk available:  5.4G
Serverfiles:     1.6G
Backups:         4.8M

Fistful of Frags Server Details
===============================================================================================================================================================
Server name:  Fistful of Frags Server
Server IP:    192.168.1.1:27015
RCON password:  rconpassword
Status:       OFFLINE

Service name:  fof-server
User:          fofserver
Location:      /home/fofserver
Config file:   /home/fofserver/serverfiles/fof/cfg/fof-server.cfg

Backups
===============================================================================================================================================================
No. of backups:    1
Latest backup:
    date:          Fri Jan 23 15:54:52 CET 2015
    file:          /home/fofserver/backups/fof-server-2015-01-23-155447.tar.gz
    size:          4.8M

Command-line Parameters
===============================================================================================================================================================
./srcds_run -game fof -strictportbind -ip 192.168.1.1 -port 27015 +clientport 27005 +tv_port 27020 +map fof_depot +servercfgfile fof-server.cfg -maxplayers 16

Ports
===============================================================================================================================================================
Change ports by editing the command-line
parameters in ./fofserver.

Useful port diagnostic command:
netstat -atunp | grep srcds_linux

DESCRIPTION  DIRECTION  PORT   PROTOCOL
> Game/RCON  INBOUND    27015  tcp/udp

ftp-scp

SFTP (Secure File Transfer Protocol) is the transfer protocol to view and transfer files over SSH. SFTP works the same as FTP but is encrypted.

SFTP Advantages

  • Encrypted

  • Nothing extra to install (such as FTP server)

  • Works like any other FTP server

  • Compatible with the popular clients such as Filezilla and WinSCP

  • You can login to any SSH accessable Linux user.

How to use SFTP

  • Connect like any FTP except it uses the port (default 22)

  • Use your linux username / password

  • You might need to set protocol to SFTP in your FTP client.

Bad practice to avoid

By all means, you should never

  1. Connect to a server as root.

  2. Use FTP if SFTP is available.

Root login to an FTP

Here is why you shouldn't

  • By logging in as root, you might accidentally remove essential system files or put useless files into the wrong place and mess up with your system.

  • But even more annoying, any file you'll write will belong to root, and the user won't be able to either read, change, or execute writtent files as root.

  • FTP is an unencrypted protocol, therefore it is very unsecure to edit sensitive files using it.

How to operate without root FTP login ?

  • If you need to edit system config files, then do like everyone else : use an SSH text editor like "nano" or "vi".

  • Set your FTP so that you can login as users with a valid shell from the machine. Eventually, disable root FTP login.

  • Oh, one more thing... Did we talk about SFTP ?

AS-BP2-Acatana.ut2           CTF-Avaris.ut2               CTF-Smote.ut2                DM-CBP1-Elegance.ut2         DM-DE-Ironic.ut2             DM-UCMP-PleasantValley.ut2   DOM-ScorchedEarth.ut2
AS-BP2-Jumpship.ut2          CTF-BP2-Concentrate.ut2      CTF-TwinTombs.ut2            DM-CBP1-Emperor.ut2          DM-DE-Osiris2.ut2            DM-UCMP-RancidMetal.ut2      DOM-SepukkuGorge.ut2
AS-BP2-Outback.ut2           CTF-BP2-Pistola.ut2          CTF-UCMP-Aithanarid.ut2      DM-CBP1-Finale.ut2           DM-Deck17.ut2                DM-UCMP-ThePits.ut2          DOM-Suntemple.ut2
AS-BP2-SubRosa.ut2           CTF-BridgeOfFate.ut2         CTF-UCMP-Aquatica.ut2        DM-CBP1-GoldenDawn.ut2       DM-DesertIsle.ut2            DM-UCMP-Xanadu.ut2           DOM-UCMP-Cerebral.ut2
AS-BP2-Thrust.ut2            CTF-CBP1-Betrayal.ut2        CTF-UCMP-DecaneCaldera.ut2   DM-CBP1-Neandertalus.ut2     DM-Flux2.ut2                 DM-UCMP2-Adamantium.ut2      DOM-UCMP2-1on1-Smelter.ut2
AS-CBP2-Thrust.ut2           CTF-CBP1-Concentrate.ut2     CTF-UCMP2-Campgrounds.ut2    DM-CBP1-Ougaldwin.ut2        DM-Forbidden.ut2             DM-UCMP2-Churn.ut2           DOM-UCMP2-Meskhenet.ut2
AS-Confexia.ut2              CTF-CBP1-Ferris.ut2          CTF-UCMP2-Enlightenment.ut2  DM-CBP1-Shifter.ut2          DM-Gael.ut2                  DM-UCMP2-Dynarak.ut2         Entry.ut2
AS-Convoy.ut2                CTF-CBP1-TechDream.ut2       CTF-UCMP2-Orcus.ut2          DM-CBP2-Achilles.ut2         DM-Gestalt.ut2               DM-UCMP2-Hieron.ut2          ONS-Adara.ut2
AS-FallenCity.ut2            CTF-CBP2-Bahera.ut2          CTF-UCMP2-RottenCity.ut2     DM-CBP2-Archipelago.ut2      DM-Goliath.ut2               DM-UCMP2-Saiko.ut2           ONS-ArcticStronghold.ut2
AS-Glacier.ut2               CTF-CBP2-Botanic.ut2         CTF-UCMP2-Sublimity.ut2      DM-CBP2-Azures.ut2           DM-HyperBlast2.ut2           DM-UCMP2-Taron.ut2           ONS-Aridoom.ut2
AS-Junkyard.ut2              CTF-CBP2-Decadence.ut2       CTF-UCMP2-Vadamerca.ut2      DM-CBP2-Buliwyf.ut2          DM-Icetomb.ut2               DM-UCMP2-Thebes.ut2          ONS-Ascendancy.ut2
AS-MotherShip.ut2            CTF-CBP2-Deep.ut2            CTF-UCMP3-Tidal.ut2          DM-CBP2-Drakonis.ut2         DM-Inferno.ut2               DM-UCMP3-Altitude.ut2        ONS-CBP2-Argento.ut2
AS-RobotFactory.ut2          CTF-CBP2-Gazpacho.ut2        CTF-UCMP4-Talya.ut2          DM-CBP2-Griffin.ut2          DM-Injector.ut2              DM-UCMP3-Gantham.ut2         ONS-CBP2-Brassed.ut2
AS-UCMP2-Cruciatus.ut2       CTF-CBP2-Pistola.ut2         CTF-UCMP4-Virility.ut2       DM-CBP2-Kadath.ut2           DM-Insidious.ut2             DM-UCMP3-Glorian.ut2         ONS-CBP2-Mirage.ut2
AS-UCMP3-IslandStrike.ut2    CTF-CBP2-Skorbut.ut2         DM-1on1-Albatross.ut2        DM-CBP2-Kerosene.ut2         DM-IronDeity.ut2             DM-UCMP3-Sympathy.ut2        ONS-CBP2-Pasargadae.ut2
BR-Anubis.ut2                CTF-Chrome.ut2               DM-1on1-Crash.ut2            DM-CBP2-Khrono.ut2           DM-Junkyard.ut2              DM-UCMP4-Elucidation.ut2     ONS-CBP2-Tropica.ut2
BR-Bifrost.ut2               CTF-Citadel.ut2              DM-1on1-Desolation.ut2       DM-CBP2-KillbillyBarn.ut2    DM-Leviathan.ut2             DM-UCMP4-Mania.ut2           ONS-CBP2-Valarna.ut2
BR-BridgeOfFate.ut2          CTF-Colossus.ut2             DM-1on1-Idoma.ut2            DM-CBP2-Koma.ut2             DM-Metallurgy.ut2            DM-UCMP4-Propaganda.ut2      ONS-CBP2-Yorda.ut2
BR-CBP1-BreakLimit2004.ut2   CTF-DE-ElecFields.ut2        DM-1on1-Irondust.ut2         DM-CBP2-KroujKran.ut2        DM-Morpheus3.ut2             DM-UCMP4-Speos.ut2           ONS-Crossfire.ut2
BR-CBP2-Aquarius.ut2         CTF-DE-LavaGiant2.ut2        DM-1on1-Mixer.ut2            DM-CBP2-Masurao.ut2          DM-Oceanic.ut2               DOM-Access.ut2               ONS-Dawn.ut2
BR-CBP2-Bahera.ut2           CTF-December.ut2             DM-1on1-Roughinery.ut2       DM-CBP2-Meitak.ut2           DM-Phobos2.ut2               DOM-Aswan.ut2                ONS-Dria.ut2
BR-Canyon.ut2                CTF-DoubleDammage.ut2        DM-1on1-Serpentine.ut2       DM-CBP2-Niflheim.ut2         DM-Plunge.ut2                DOM-Atlantis.ut2             ONS-FrostBite.ut2
BR-Colossus.ut2              CTF-Face3.ut2                DM-1on1-Spirit.ut2           DM-CBP2-Reconstruct.ut2      DM-Rankin.ut2                DOM-CBP1-Aphrodite.ut2       ONS-Icarus.ut2
BR-DE-ElecFields.ut2         CTF-FaceClassic.ut2          DM-1on1-Squader.ut2          DM-CBP2-Summit.ut2           DM-Rrajigar.ut2              DOM-CBP1-Hathor.ut2          ONS-IslandHop.ut2
BR-Disclosure.ut2            CTF-Geothermal.ut2           DM-1on1-Trite.ut2            DM-CBP2-TelMecoMEX.ut2       DM-Rustatorium.ut2           DOM-CBP1-Verde.ut2           ONS-Primeval.ut2
BR-IceFields.ut2             CTF-Grassyknoll.ut2          DM-Antalus.ut2               DM-CBP2-Tempest.ut2          DM-Sulphur.ut2               DOM-CBP2-Gerroid.ut2         ONS-RedPlanet.ut2
BR-Serenity.ut2              CTF-Grendelkeep.ut2          DM-Asbestos.ut2              DM-CBP2-TensileSteel.ut2     DM-TheDeck2004.ut2           DOM-CBP2-Summit.ut2          ONS-Severance.ut2
BR-Skyline.ut2               CTF-January.ut2              DM-BP2-Calandras.ut2         DM-CBP2-Torkenstein.ut2      DM-TokaraForest.ut2          DOM-Conduit.ut2              ONS-Torlan.ut2
BR-Slaughterhouse.ut2        CTF-Lostfaith.ut2            DM-BP2-GoopGod.ut2           DM-CBP2-Tydal.ut2            DM-TrainingDay.ut2           DOM-Core.ut2                 ONS-Tricky.ut2
BR-TwinTombs.ut2             CTF-Magma.ut2                DM-CBP1-Arkanos.ut2          DM-Compressed.ut2            DM-UCMP-1on1-Derelict.ut2    DOM-Junkyard.ut2             ONS-UCMP-ABC-ECE.ut2
BR-UCMP2-Sublimity.ut2       CTF-Maul.ut2                 DM-CBP1-AugustNoon.ut2       DM-Corrugation.ut2           DM-UCMP-BloodRun.ut2         DOM-OutRigger.ut2            ONS-UCMP-ABC.ut2
CTF-1on1-Joust.ut2           CTF-MoonDragon.ut2           DM-CBP1-BlackJackal.ut2      DM-Curse4.ut2                DM-UCMP-Contrast.ut2         DOM-Renascent.ut2            ONS-Urban.ut2
CTF-AbsoluteZero.ut2         CTF-Orbital2.ut2             DM-CBP1-Downgrave.ut2        DM-DE-Grendelkeep.ut2        DM-UCMP-ImMortalis.ut2       DOM-Ruination.ut2            VCTF-UCMP2-RiverCanyon2.ut2
KFGame/Config/kf2server/LinuxGSM-KFEngine.ini
[OnlineSubsystemSteamworks.KFWorkshopSteamworks]
ServerSubscribedWorkshopItems=605633924
ServerSubscribedWorkshopItems=605551918
ServerSubscribedWorkshopItems=605549089
ServerSubscribedWorkshopItems=605532351
Killing Floor 2 Official Server Wiki
Killing floor 2 Official Forums
Official Guide Here

Arma 3

Server Resources

  • Official Dedicated Server Guide

Headless Client

Headless Client Overview

https://community.bistudio.com/wiki/Arma_3_Headless_Client

  • A headless Client is used to offload AI calculations from the server.

  • Headless Client is integrated into the game client and dedicated server executable (Windows and Linux, use -client parameter).

  • The server does not allow arbitrary connections from headless clients if you do not define the headless clients' IPs in the server.cfg.

Headless Client Setup and Usage

Starting up a headless client and having it connect to your server is easy, Creating a mission that uses the Headless Client is not.

This guide only handles the setup and connecting a headless client.

Create a new server instance using LinuxGSM ./linuxgsm.sh arma3server. This will become the headless client instance and rename the new instance to arma3server-hc.

Edit the config file lgsm/config-lgsm/arma3server-hc.cfg.

Change the port= increasing the number by a factor of 12 e.g 2303 becomes 2314.

Update startparameters= changing it to the following.

startparameters="-client -connect=${ip}:${port} -password=CHANGEME"

Edit the game server config of arma3server (not the headless client) arma3server.server.cfg and add the headless client IP address to headlessClients[]=. If the headless client is on the same physical server as the ARMA 3 server then also add the IP to localClient[]=.

Do not use 127.0.0.1 as the IP address.

headlessClients[]={"1.2.3.4"}; 
localClient[]={"1.2.3.4"};

Navigate to your profile directory.

~cd ~/.local/share/Arma\ 3\ -\ Other\ Profiles

edit Player.Arma3Profile and add the line battleyeLicense=1;.

Start your server with ./arma3server start

Start your headless client with ./arma3server-hc start.

Only an admin can see the headless clients in the player menu on the server. The headless client will connect and automatically assume the first available headless client slot.

Mod Support

Arma 3 mods are managed using the Steam Workshop or manual downloads.

Adding Mods

Firstly, you need to select the mods you want to use from the steam workshop.

Mods can cause your server to become unstable or may not be compatible with each other. It is a good idea to read the mods docs and/or speak with other experienced Arma3 admins.

Here is a popular mod to get started:

  • CBA: Community Based Addons for Arma 3

Download the Mod using https://steamworkshopdownloader.io/ the workshop id is 450814997

Create a directory called @cba_a3 in serverfiles/mods

serverfiles/mods/@cba_a3

Copy the contents of the mod archive to the @cba_a3 directory.

Remember to check you have the correct user permissions once uploaded

Copy the contents of the @cba_a3/keys directory to the server keys directory.

cp serverfiles/mods/@cba_a3/keys/* serverfiles/keys

Add @cba_a3 to the mods="" setting in the LinuxGSM config.

mods="mods/@cba_a3"

If you are adding multiple mods make sure you put a semicolon with the escape character in between each mod.

mods="mods/@mod1\;mods/@mod2"

Lower Case File Names

Arma 3 server requires that mods have lowercase names. Some mods do not do this and will need to have their file names converted to lowercase.

This can be done by using the following script.

Run the script from the serverfiles/mods directory.

#!/bin/bash
depth=0
for x in $(find . -type d | sed "s/[^/]//g")
do
if [ ${depth} -lt ${#x} ]
then
   let depth=${#x}
fi
done
echo "the depth is ${depth}"
for ((i=1;i<=${depth};i++))
do
  for x in $(find . -maxdepth $i | grep [A-Z])
  do
    mv $x $(echo $x | tr 'A-Z' 'a-z')
  done
done

Start the server and check that your mods all have valid hashes. You should see the "Community Base Addons" mod appear in your console logfile.

15:27:37 ============================================================================================= List of mods ===============================================================================================
15:27:37 modsReadOnly = true
15:27:37 safeModsActivated = false
15:27:37 customMods = true
15:27:37 hash = 'B44C8332DD951EC30619282DAC7A59519AA0BCB6'
15:27:37 hashShort = '185e1b29'
15:27:37                                               name |               modDir |    default |   official |               origin |                                     hash | hashShort | fullPath
15:27:37 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
15:27:37                      Community Base Addons v3.15.3 |              @cba_a3 |      false |      false |             GAME DIR | fa100065ad10a6ab7a5e16d53efc2b26f3df3b58 |  7f1d8e45 | /home/lgsm/arma3server/serverfiles/@cba_a3
15:27:37                                  Arma 3 Art of War |                  aow |       true |       true |             GAME DIR | 93cf5270ce855921dcfd261c583983d4e0bb6899 |  2930da71 | /home/lgsm/arma3server/serverfiles/aow
15:27:37                          Arma 3 Contact (Platform) |                enoch |       true |       true |             GAME DIR | 61e8060b8dce2727f235695e59de01089546d9ad |  2dd9b92b | /home/lgsm/arma3server/serverfiles/enoch
15:27:37                                       Arma 3 Tanks |                 tank |       true |       true |             GAME DIR | 37296b3dd900117d055e6c13e1ce21e54cd8067b |  dfc0778f | /home/lgsm/arma3server/serverfiles/tank
15:27:37                                     Arma 3 Tac-Ops |               tacops |       true |       true |             GAME DIR | dec763aedfdc28eab838361370a48f2411535e5a |  70a109b7 | /home/lgsm/arma3server/serverfiles/tacops
15:27:37                                 Arma 3 Laws of War |               orange |       true |       true |             GAME DIR | a786e1c2e7b3aec524cc1ce932039dc18da0351d |  128b066b | /home/lgsm/arma3server/serverfiles/orange
15:27:37                                      Arma 3 Malden |                 argo |       true |       true |             GAME DIR | b9edefa0cd211d0961282ce9b69eabeb59bda780 |  1954e272 | /home/lgsm/arma3server/serverfiles/argo
15:27:37                                        Arma 3 Jets |                 jets |       true |       true |             GAME DIR | cd6561bc9148fec23b136de7fa02bfbd71e12221 |  1f2e3b6f | /home/lgsm/arma3server/serverfiles/jets
15:27:37                                        Arma 3 Apex |            expansion |       true |       true |             GAME DIR | 2d573cab31befb9729503ed00c211628c73622cc |  e5ad6f6c | /home/lgsm/arma3server/serverfiles/expansion
15:27:37                                    Arma 3 Marksmen |                 mark |       true |       true |             GAME DIR | f0784723164eb212a22fa2d49e589bead97a9735 |  2d4eada7 | /home/lgsm/arma3server/serverfiles/mark
15:27:37                                 Arma 3 Helicopters |                 heli |       true |       true |             GAME DIR | 1af5847f6b557b98763dfdad7be3c32491cee65e |  873ada67 | /home/lgsm/arma3server/serverfiles/heli
15:27:37                                       Arma 3 Karts |                 kart |       true |       true |             GAME DIR | 5ebe4af2ae6777d560a14cf9e39d4ee3f852a75c |  3a3f5ff9 | /home/lgsm/arma3server/serverfiles/kart
15:27:37                                        Arma 3 Zeus |              curator |       true |       true |             GAME DIR | 351bd6e8b13a4e8f514a173bf78dd949c899e107 |   b6d4451 | /home/lgsm/arma3server/serverfiles/curator
15:27:37                                             Arma 3 |                   A3 |       true |       true |            NOT FOUND |                                          |           |
15:27:37 ==========================================================================================================================================================================================================

Unreal Tournament 99

Server Files

Unreal Tournament 99 Requires a few alterations from the official server download. Because of this, the LinuxGSM version of the server files includes the following.

  • OldUnreal-UTPatch469a-Linux.tar.bz2 (OldUnreal Patch)

  • ut-server-436.tar (Latest Official Version)

  • UTBonusPack.zip

  • UTBonusPack2.zip (maps only)

  • UTInoxxPack.zip

  • UTBonusPack4.zip

Server Resources

UT99.org is a community website for UT99

OldUnreal is another community website

Config File Settings

With a default LinuxGSM Install, server settings can be configured in this file:

/home/user/serverfiles/System/ut99server.ini

You can change most of these settings in a browser by enabling the webserver and putting in settings there.

[Engine.GameReplicationInfo]
ServerName= 
ShortName=
AdminName=
AdminEmail=
Region=0
MOTDLine1=
MOTDLine2=
MOTDLine3=
MOTDLine4= 

[Botpack.ChallengeBotInfo]
Difficulty=4

[Botpack.DeathMatchPlus]
bNoviceMode=True
bHardCoreMode=True
bUseTranslocator=False
bCoopWeaponMode=False
MinPlayers=10
AirControl=0.350000
FragLimit=30
TimeLimit=0
bChangeLevels=True
bMegaSpeed=False
bAltScoring=False
bMultiWeaponStay=True
bForceRespawn=False
bTournament=False
NetWait=10
RestartWait=15
MaxCommanders=0
InitialBots=9
bNoMonsters=True
bHumansOnly=False
bClassicDeathMessages=False
MinFOV=80.000000
MaxFOV=130.000000
MaxNameChanges=0

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

[UTServerAdmin.UTServerAdmin]
AdminUsername=
AdminPassword=

Garry's Mod

Game Resources

Garry's Mod Wiki

Auto Refresh

Autorefresh can lag the server when certain Lua files are edited. This happens when the refreshing cascades. This can be unwanted behavior when editing the scripts of a large project on a live server.

To disable autorefresh, add -disableluarefresh to parms.

 -disableluarefresh

Loading Screen

Loading screens are added by defining a website with sv_loadingurl, which is in gmodserver.cfg by default. This file overrides other files.

Links should not have http:// or an ending/ .

sv_loadingurl "www.website.com/loading/screen"

Gamemode

Gamemode is changed by editing start parameters in the LinuxGSM config file.

TTT     gamemode="terrortown"
Sandbox gamemode="sandbox"

Other game modes like Zombie Survival can be found on the steam workshop.

Workshop

Garry's Mod does not require an API/Auth Key anymore.

For Garry's Mod, add the collection ID in LinuxGSM config using wscollectionid setting. This will download the collection when the server starts.

wscollectionid="157384458"

Mounting Game Content

Some Garry's Mod addons like TTT use content from other games. To do this the content will need to be "mounted".

All source engine games should be mountable.

This guide is for installing another game server with LinuxGSM and using that content, copying that game's files, and mounting the game to Garry's Mod. This guide is for CS:S but should work for any other game.

There are multiple ways to potentially mount content. The below example is just one example

First install a Counter-Strike: Source server, if you already have a server installed this step can be skipped. If the server will be deleted after copying files.

Install CS:S Server with LinuxGSM

Copy the cstrike the directory from the Counter-Strike: Source to the Gmod folder.

cp -R /home/cssserver/serverfiles/cstrike /home/gmodserver/serverfiles/cstrike

Ensure that the copied files are owned by the gmodserver user.

chown -R gmodserver /home/gmodserver

Open mount.cfg file.

nano /home/gmodserver/serverfiles/garrysmod/cfg/mount.cfg

Add game to mount.cfg

"mountcfg"
{
         "cstrike"      "/home/gmoduser/serverfiles/cstrike"
}

Restart the server. Check if the mount was successful by changing the level to a mounted map with console or rcon.

changelevel cs_italy

Workshop

Many Steam games support the Steam Workshop. It is an easy way to share community game modes, maps, skins, and other community-made content.

For game servers, the Workshop allows community content (mainly maps and game modes) to be made available to play on game servers. The Workshop content is automatically downloaded by the game client of the player connecting to the server. This removed the need to set up a FastDL server.

LinuxGSM adds workshop pre-configuration to game server scripts when available.

Supported Games Servers

This is a list of game servers that are known to support Workshop

  • Ark: Survival Evolved

  • ARMA 3

  • Day of Infamy

  • Counter-Strike 2

  • Garrys Mod

  • Hurtworld

  • Insurgency: Sandstorm

  • Killing Floor 2

  • Natural Selection 2

  • Starbound

Steam Web API Key/Auth Key

Some game servers require a Steam API key to access Workshop content. To get this key visit the Steam API key page and follow the instructions.

Do not share your private API key.

Items and Collections

The Steam Workshop is made up of individual items such as maps, game modes, skins, etc, and also collections of these items. Game servers can download these items and collections by getting their unique ID number and adding it to the game server config or parameter. For collections, it is possible to find and use an existing one or create your own.

Get an Item or Collection ID

To get and item or collection ID browse to the item you want to add and look at the URL; it will contain the required ID number. In the example below the ID is 3075706807.

https://steamcommunity.com/sharedfiles/filedetails/?id=3075706807

Create a Collection

Creating a collection is a great way to manage and group all the content that you want on your game server.

To create your collection go to the collections section of your games Workshop, and select Create Collection.

Fill out the form.

Add any maps to the collection, then publish the completed collection. Then get the collection ID which can be found on the page URL. The collection ID in the url below is 157384458.

https://steamcommunity.com/sharedfiles/filedetails/?id=157384458

Server Configurations

Game Server Config

LinuxGSM Configs and Game Server Configs are different. One is the config for LinuxGSM itself and the other is for the game server instance.

Game server config files are the configuration files used by the game server to store various game server settings, such as the server name, maximum players, map cycle, etc. These settings can be edited to customise a game server. Different game server configs can use different syntax and work slightly differently, but all do the same basic job of editing a game server settings.

Config file's location

The details command will provide you with some config file information. However, some servers do use multiple config files.

Command

./gameserver details

Sample output example

./gmodserver details

gmodserver Script Details
==================================================================================
Service name:        gmod-server
gmodserver version:  170110
User:                ultimatebyte
GLIBC required:      2.15
Email alert:         off
Pushbullet alert:    off
Update on start:     off
Location:            /home/gmodserver
Config file:         /home/gmodserver/serverfiles/garrysmod/cfg/gmod-server.cfg

LinuxGSM Custom Config's

Whenever possible, LinuxGSM provides basic easy-to-use game server configuration files. A dedicated repository has been made so all server admins can benefit, even Windows admins.

This configuration file is automatically downloaded upon server installation.

Config file naming

Whenever possible, LinuxGSM uses a custom name for configuration files that contains the ${servicename} variable in it in order to allow the running of multiple game servers with different config files. If the game does not allow for that, then the usual name will be used.

Example

For source servers, the default server.cfg is not used with LinuxGSM. Instead if you're running ./csgoserver, then the config file will be called csgoserver.cfg.

Missing configuration file handling

LinuxGSM will always check a config file is present when starting a server. If a config file is missing, it will re-download the default one or give a warning.

Where are the settings I'm looking for?

Game servers have many different ways of managing settings. Some are set within start parameters, while some are set within a configuration file.

One of the goals of LinuxGSM is to make managing these as easy as possible, by providing all important settings out of the box, wherever they are. There is no general rule about where config files are set. It is a good idea to look for the official documentation of the game server that you're trying to run in order to find relevant information about settings.

I found missing settings or an error with config files?

If you found settings that are absent from the default configuration file provided by LinuxGSM that would be a useful addition, then you can open an issue or a pull request.

Insurgency: SandStorm

Custom Mods and Maps

Custom Mods and Maps are supported in Insurgency: Sandstorm via mods.io. Please use this basic guide to get started using custom mods more in-depth information can be found at mod.io Server Admin Guide

This guide will show you how to install the custom map TORO as an example

Get an Auth Token

To get started you will need a mod.io account, once you have signed in, click your username as the top right, and click API Access from the left navigation.

Under OAuth 2 Management > Generate Access Token, enter a name to give your token and give it read access and click Create Token.

Once the token is generated you will need to copy it to your game servers Engine.ini. Paste the following into Engine.ini and replace TOKEN HERE with your access token.

[/Script/ModKit.ModIOClient]
bHasUserAcceptedTerms=True
AccessToken=TOKEN HERE

Add a Mod/Map

Add the -Mods parameter to your game server start parameters.

Next you will need to specify which mods you want to add to your game server.

Create the Mods.txt file located Insurgency/Config/Server/Mods.txt

mkdir -p Insurgency/Config/Server
touch Insurgency/Config/Server/Mods.txt

You can also specify your ownMods.txt file using ModList=MyCustomModList.txt or adding the mod id's to your start parameters using -CmdModList="mod1,mod2,mod3"

In the txt file you will need to specify each mod ID line by line. The mod ID can be found on the mods details page at mod.io. Once restarted the mod will be available to use.

mod ID: 94277

To use this custom map you will need to add it to your mapcycle and if required, your default map

Create MapCyle.txtand add the custom map to your mapcycle.

touch Insurgency/Config/Server/MapCyle.txt
   
(Scenario="Scenario_TORO_Checkpoint_Security",Lighting="Day",Mode="Checkpoint")
(Scenario="Scenario_TORO_Checkpoint_Insurgents",Lighting="Day",Mode="Checkpoint")

If you want the custom map to be the default edit your start parameters

defaultmap="TORO"
defaultscenario="Scenario_TORO_Checkpoint_Security"

Once the server is restarted the custom map should be available on your game server.

Resources

Official Server Admin Guide

Running Multiple Game Servers

Hosting multiple game servers on the same host

Depending upon the game server you are running it is possible to run multiple game servers on the same server host.

There are two recommended ways to run multiple game servers on one physical server. Depending upon the circumstances you may choose a particular method or mixture of both.

It is best to make a proper plan for running multiple game servers at the earliest stage of your deployment. Make sure that you examine this page carefully and understand all of its content before starting.

Prerequisites

Vocabulary

You need some definitions to make this guide clear.

  • Installation: An installation refers to the base directory of a game server. This is where the files required to run a game server is stored.

  • Instance: Each individual game server is referred to as an instance. There might be multiple instances running per installation. An instance is started by running the ./gameserver script

  • User: Each game server installation should run using its own Linux user. Although it is possible to have multiple installations per user.

LinuxGSM Configuration

You should be familiar with how work.

Understand ports

You need to understand how ports work in order to avoid port overlapping, otherwise, your new instances won't start. Useful resource: .

Single Instance per Installation

Single instance per installation is the most simple method and will fit most use cases. It keeps the server files and configs completely separate from each other.

This consists of creating a new user for each game server, repeating the install process, and edit your config files ensuring default ports are changed.

Use cases

  • Running different game servers requires installation in a different directory

  • Running multiple servers of the same game, but they have different content, addons or mods.

  • You want your game servers to be totally separate for simplicity and reduce the chance of multiple instances breaking all at once.

Pros

  • Easy to setup

  • Separate installations partition the game servers from each other

  • Each instance can have different maps, addons and mods rather than sharing, preventing conflicts.

  • More secure, by keeping instances separate with there own user.

  • Reduced risk of breaking multiple instances.

Cons

  • Requires more disk space as server files can not be shared

  • Each instance has to be individually setup.

Examples

The installs are separated and isolated from each other in each users home directory.

How to Install

  1. Create a new user with a home directory.

  2. Repeat the standard installation process using this new user.

  3. Change the instance config adjusting ports numbers from the default

Single Installation with Multiple Instances

Single installation with multiple instances is the method used when base installation content, maps, addons and mods are the same. Allowing either a clone of an existing instance or using different slightly different config such as different game modes and map rotations.

This consists of creating a new LinuxGSM executable file ./gameserver-2 in the same installation as an existing instance.

Most but not all game servers work with this method

Use cases

  • Running cloning an existing game server by creating a new instance.

  • Running the same game server with different game modes, maps etc.

  • Running multiple instances even with limited disk space available.

Pros

  • Uses less disk space as base installation is the same

  • Less configuration required

  • It is possible to use different game modes and map rotations by editing configs.

Cons

  • Each instance shares the same files which may limit options to customise an instance

  • Potential mod conflicts

  • Should one instance break all instances might also experience the same issue

How it works

You have one game server installation, but you have multiple instances start in the same installation using different config files.

Every time a new instance is created, new default config files are created. This allows each instance to have different hostname, ports etc. The config files are by default the same name as the instance script. For example, if the script is ./gameserver-2 the config is gameserver-2.cfg. You can see the location of config files in ./gameserver-2 details (replace "instance" with your actual instance name).

Each instance is managed using its own script which gives the config file names. These can be renamed how you like, however, the default will simply have an incremental number. Some admins may choose to name them after the server port, the map or the gamemode instead.

Examples

In these examples, you can see the scripts are located in the same installation but have different names. Each instance has had its port altered in the server config to prevent port clashes.

How to install

linuxgsm.sh allows you to generate as many instances as you want by running .

It will generate a new LinuxGSM script using an incremental number.

On the first run of ./gameserver-2 a new default LinuxGSM and game config gameserver-2.cfgwill be created . These new configs will need to be altered with new ports, hostname and any other settings that are required.

Common Mistakes

Forgetting to change ports and/or IP

If you run multiple game servers you will need to alter ports. Ensure you are aware of how to manage .

Installing game servers with the same script name under the same user

Installing multiple installations using the same user does work. However you must use unique script names i.e. ./gameserver. This is because tmux requires unique session name to start a session. Tmux will fail to start if another server is using the same session name. LinuxGSM uses the script name as the tmux session name.

Xonotic

Server Resources

Ports

  • Game Port Default: 26000 UDP

Default Config Location

Client Specific

As written in the FAQ, the default Configuration files are located in:

System
Location

Serverhosting Locations

You can start Xonotic with the startparameter '-userdir'. With this parameter, Xonotic expects in that folder a subfolder data with the server.cfg. For example for choosing ./xonotic-linux64-dedicated -userdir /home/xonotic/server1 your server.cfg location should be /home/xonotic/server1/data/server.cfg

Game Modes

A list is currently located in . with the following server parameters

Gametype
Servervalue
Description

Custom Maps

Server side

Xonotic has Custom Maps support in fileformat pk3. Maps should be located in the data folder like server.cfg on your dedicated Server.

Make it useable for Clients

Xonotic doesn't provide a Filedownloader inside the gameserver, have need to host your custommaps on HTTP Webspace and set the correct values in server.cfg.

Example

  • Userdir: -userdir /home/xonotic/server1: add foo.pk3in /home/xonotic/server1/data/

  • server.cfg: Add sv_curl_defaulturl="http://xonotic.foo.bar"

  • Put foo.pk3 in the HTTP Root Folder to make it accessable via http://xonotic.foo.bar/foo.pk3

Look at for more infos about Custom Map Hosting

Start parameters

Every Server cvar can be overwritten in an starting argument, but it's recommended to setup as much as possible in server.cfg

SteamCMD

SteamCMD is a command-line based Steam client developed by Valve that is used to remotely download game files. This is very useful for game servers, as it is significantly easier to keep them up-to-date. Any game that supports dedicated servers will have its server files available on SteamCMD. All you need is the AppID which can be found on Valve's or .

You can only download server files for the operating system that you are using SteamCMD on.

SteamCMD Login

SteamCMD requires a login to download some game servers.

It is recommended that you just for the server.

Anonymous Login

The majority of game servers using SteamCMD only require an anonymous login. LinuxGSM will not require any configuration if this is the case.

Steam User Login

Some game servers require you to login to SteamCMD using a steam login to allow download of the server. Some also require you to own a copy of the game on the steam account.

If this is the case LinuxGSM will prompt you on installation to set a steam username and password. This can be set by editing the following settings within the .

If you get the error ERROR! Failed to install app '2430930' (No subscription) then you do not own a copy of the game in your account and will need to login on the standard steam client and buy the game. If the game is free you will need to "add to account".

Do not use your own steam login. Create a new Steam login just for the game server. As the steam login password is stored in .

Check for a list of game servers that require a login.

Plain Text Passwords

SteamCMD prints out passwords in plain text meaning that the Steam login password is visible to anyone on the server. LinuxGSM saves logs and the Steam login password will be view-able in the logs.

Steam Guard

Steam Guard is an additional layer of security that can be applied to a Steam account. The first layer is the account login credentials: the Steam account username and password. With Steam Guard, a second layer of security is applied to the account, making it harder for a Steam account to fall into the wrong hands.

If Steam Guard is enabled on an account when a login to from an unrecognized device happens an access code will be required as verification. Depending on the account Steam Guard settings, either an email with a code or a code from the Steam Mobile app on a smartphone is required.

For more info visit .

Authentication Methods for SteamCMD

  1. Username and password - No Steam Guard

  2. Username and password - Steam Guard via Email

  3. Username and password - Steam Guard via Smartphone (not compatible with LinuxGSM)

Username and Password - No Steam Guard

Simply requires your Steam username and password.

Username and Password - Steam Guard via Email

Requires your Steam username and password and you will also receive an email on the first login to SteamCMD and be required to enter a code. Once the code is entered your server is authorised to use the steam account you entered.

Username and Password - Steam Guard via Smartphone (not compatible with LinuxGSM)

Requires your Steam Username & Password but also requires you have the Steam app on your phone to use 2-factor Authentication.

Using Steam Guard with LinuxGSM

Both options 1 & 2 work with LinuxGSM.

Steam Guard via Smartphone is not compatible because it requires a code every time you login to SteamCMD. This is problematic if you want your game servers to auto-update.

If you have Steam Guard via email enabled the first time you start SteamCMD you will be prompted to enter a steam Guard code and you will receive an email with the code. Copy and paste the code into the prompt and press enter. You will not need to enter a code again.

gamedig

is a tool that queries game servers and returns outputs data from a query into json format. It can not only check if the game server is online but also return various data such as current maps and players. This allows ./gameserver details to display live information.

GameDig super-seeds gsquery as the tool to monitor game servers. GameDig is currently optional but recommended and gsquery is kept to ensure compatibility as gamedig requires Node.js to be installed.

Install Node.js

GameDig requires a JavaScript runtime environment installed to work. Use the following instructions to install Node.js.

Remove existing NodeJS

If you already have an older version of nodejs installed or be having issues with node dependencies. It may be worth reinstalling Node.js.

Ubuntu/Debian

CentOS

Work in progress

Install NodeJS

Installing nodejs can be problematic, however, using the below should work well.

Ubuntu/Debian

Enterprise Linux Based Distributions

Install GameDig npm

Once nodejs is installed use npm to install gamedig with the following command.

Update GameDig

Updates to GameDig are regularly made. It is possible to update by running the npm update command.

You can also see which version of gamedig is installed by running the following.

Sample output

Details

Extra info becomes available for game server details.

Raw output

file-ownership

Introduction

Linux files and directories always belong to a user and group. That is what we call ownership. If this can be boring to new users, remember that this is a huge part of what makes Linux as secure as it is.

Check current ownership

Check ownership in the current directory:

ls -l

Example output:

Syntax of the output is:

  • d for directory or - for file

  • user, then group, then others permissions

  • number specifies the number of links or directories inside of a directory

  • The user that owns the file, or directory

  • The group that file or directory belongs to

  • The size in bytes

  • The date of last modification

  • The name of the file

Check ownership from all files and hidden files of any directory

ls -al /path/to/file/or/dir

Sample output:

All these commands require elevated privileges!

Change owner

Change owner from files or directories

Command

chown

As usual, chown --help will provide you with all available arguments

Single file syntax

chown newowner /path/to/file/or/directory

Recursive syntax (include sub files and directories)

chown -R newowner /path/to/directory

Example

chown -R myuser /home/myuser

Group ownership

Change group ownership on files or directories

Command

chgrp

As usual, chgrp --help will provide you with all available arguments

Single file syntax

chgrp newgroup /path/to/dir/or/file

Recursive syntax (include sub files and directories)

chgrp -R newgroup /path/to/dir/

User and group ownership

Change user and/or ownership for files and directories at the same time

Command

chown

As usual, chown --help will provide you with all available arguments

Single file command

chown user:group /path/to/dir/or/file

Recursive

chown -R user:group /path/to/dir

Example:

chown -R myuser:myuser /home/myuser

Workshop
ultimatebyte@game:~$ ls -l
total 32
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:26 lgsm
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:23 log
drwxr-xr-x 4 ultimatebyte ultimatebyte 4096 Jan 29 22:26 serverfiles
drwxr-xr-x 8 ultimatebyte ultimatebyte 4096 Jan 29 22:26 Steam
drwxr-xr-x 5 ultimatebyte ultimatebyte 4096 Jan 29 22:24 steamcmd
-rwxr-x--- 1 ultimatebyte ultimatebyte 5691 Jan 30 01:14 twserver
ultimatebyte@game:~$ ls -al /home/ultimatebyte
total 132
drwxr-xr-x 11 ultimatebyte ultimatebyte  4096 Feb  2 07:36 . # Ownership from the current given dir
drwxr-xr-x 22 root         root          4096 Feb  2 07:36 .. # Ownership from the parent dir
-rw-------  1 ultimatebyte ultimatebyte 49744 Feb 12 03:04 .bash_history
-rw-r--r--  1 ultimatebyte ultimatebyte   220 Apr 15  2016 .bash_logout
-rw-r--r--  1 ultimatebyte ultimatebyte  3515 Apr 15  2016 .bashrc
drwxr-xr-x  4 ultimatebyte ultimatebyte  4096 Jan 15 23:26 .config
drwxr-xr-x  5 ultimatebyte ultimatebyte  4096 Jan 29 22:26 lgsm
drwxr-xr-x  3 ultimatebyte ultimatebyte  4096 Jan 14 18:10 .local
drwxr-xr-x  5 ultimatebyte ultimatebyte  4096 Jan 29 22:23 log
-rw-------  1 ultimatebyte ultimatebyte  1005 Jan 30 01:14 .nano_history
-rw-r--r--  1 ultimatebyte ultimatebyte   675 Apr 15  2016 .profile
-rw-r--r--  1 ultimatebyte ultimatebyte    66 Sep  1 17:43 .selected_editor
drwxr-xr-x  4 ultimatebyte ultimatebyte  4096 Jan 29 22:26 serverfiles
drwxr-xr-x  3 ultimatebyte ultimatebyte  4096 Jan 15 01:40 .steam
drwxr-xr-x  8 ultimatebyte ultimatebyte  4096 Jan 29 22:26 Steam
drwxr-xr-x  5 ultimatebyte ultimatebyte  4096 Jan 29 22:24 steamcmd
-rwxr-x---  1 ultimatebyte ultimatebyte  5691 Jan 30 01:14 twserver
-rw-r--r--  1 ultimatebyte ultimatebyte    29 Jan 30 02:17 .tw-server.lock
/home/gameserver/serverfiles
/home/gameserver/gameserver
/home/gameserver/gameserver-2

Game Server

User

LinuxGSM Script location

Garry’s Mod

gmodserver

/home/gmodserver/gmodserver

Garry’s Mod

gmodserver-slender

/home/gmodserver-slender/gmodserver

Counter-Strike: Global Offensive

csgoserver

/home/csgoserver/csgoserver

Counter-Strike: Global Offensive

csgoserver-zombies

/home/csgoserver-zombies/csgoserver

Game

User

LinuxGSM Script location

notes

Garry’s Mod

gmodserver

/home/gmodserver/gmodserver

1.2.3.4:27015

Garry’s Mod

gmodserver

/home/gmodserver/gmodserver-1

1.2.3.4:27018

Garry’s Mod

gmodserver

/home/gmodserver/gmodserver-2

1.2.3.4:27021

Counter-Strike: Global Offensive

csgoserver

/home/csgoserver/csgoserver-zombies-27024

1.2.3.4:27024 Zombie Mod

Counter-Strike: Global Offensive

csgoserver

/home/csgoserver/csgoserver-zombies-27027

1.2.3.4:27027 Zombie Mod

./linuxgsm.sh install
OR
./linuxgsm.sh gameserver
./gameserver-2
LinuxGSM Configs
Ports
ports

Ports

Ports are communication endpoints for an application. A port will either listen to or transmit network traffic on specific ports.

There are port standards set by IANA for common protocols such as HTTP (port 80), SSH (port 22), SMTP (port 25), etc. Game servers tend to use standard ports depending on the game engine. For example source engine games by default use port 27015 as the port it listens on.

Vocabulary

  • Port listening is what a service like a game server does in order to receive packets from incoming connections: by listening to a port, the program waits for incoming packets on a given port.

  • Port opening happens on a firewall, it consists of allowing traffic to a port.

  • Port redirection is part of NAT and happens on a router or firewall. It consists of forwarding incoming traffic on a given port to a specific local IP.

  • Network Address Translation (NAT) is a method of remapping an IP address into another by modifying network address information.

Game Server Ports

Game Servers typically have ports for the following functions.

Game port: The port that players connect to. Query port: Used by software to gather information from the server such as server name, map, and number of players. Rcon port: Some game servers have remote console port allowing remote administration of a game server. Web port: used for game servers that have web interface.

Depending upon which game server is being used, you can set game server ports within your start parameters or game server config file.

LinuxGSM allows you to see the ports your game server is using with the ./gameserver details command.

Useful port diagnostic command:
ss -tuplwn | grep RustDedicated

DESCRIPTION  PORT   PROTOCOL  LISTEN
Game         28015  udp       1
Query        28017  udp       1
RCON         28016  tcp       1
App          28082  tcp       1

Changing Default Ports

Default ports are set in either the start parameters or game config.

You can use ./gameserver details to find out where to edit port settings

# Ports
# =====================================
# Change ports by editing the parameters in:
# /home/lgsm/qlserver/serverfiles/baseq3/ql-server.cfg

To alter them you will need to edit the file using nano.

Example: for source games, you need to alter the following:

# Start Variables
port="27015"
sourcetvport="27020"
clientport="27005"
ip="0.0.0.0"

Which ports can be used?

You can use any port as long as it is not already in use and it is up to you to set up port allocation. It is recommended that ports are close together and sequential i.e. 27015, 27016, 27017 to save confusion. Some server's ports by default are not sequential, however, there is nothing stopping you from changing this. For example for source engine game servers; you could set port 27015, source TV port 27016, client port 27018. The next game server instance could simply follow on from this.

If you're running multiple game servers, make sure you're using different ports on all of your game servers to avoid a port conflict.

Multiple IP addresses

Should a server have multiple dedicated IP addresses allocated, it is possible for game servers to have the same ports but bound to different IP addresses. Admins will need to set the specific IP address in the LinuxGSM config or game config.

Port Allocation Scheme

Each type of server has a default set of ports. This is fine to use if only one server is being set up. However, if multiple servers are being used a port scheme needs to be considered. There is no requirement to stick to specific ports but it is recommended they are in a logical order.

Source Default Ports

port="27015"
sourcetvport="27020"
clientport="27005"

Incremental (recommended)

You can allocate ports incrementally, one after the other. With each server following on from the last.

port="27015"
sourcetvport="27016"
clientport="27017"

This scheme is the simplest option to avoid confusion when managing ports. Plus this is the most efficient scheme for reducing unused ports.

Standard Port Increment

This method increments each type of port keeping the scheme closer to the default. It is not as efficient but keeps ports more "standard".

port="27016"
sourcetvport="27021"
clientport="27006"

Then increment those ports by 1 for every new server. 25 servers are using 75 ports. After making 25 servers, if you need more it is a good idea to add +100 to this 27000 range.

port="27125"
sourcetvport="27150"
clientport="27100"

Separate IP Addresses

You can get new IP addresses for your dedicated server, and assign each server a new IP. This scheme is quite inefficient.

Track your ports

If you are running several game servers it is a good idea to create a spreadsheet of the ports you have used. Allowing you to keep track of what you have already used.

Diagnosing server accessibility

Check ports are bound

Ensure the game server ports are bound and listening before anything else. You can check if your server is actually listening by using ./gameserver details if a port is bound and listening then the LISTEN column will not be zero.

Depending on the game server not all ports will listen. However, a good rule is that the game and query ports will typically listen.

Useful port diagnostic command:
ss -tuplwn | grep RustDedicated

DESCRIPTION  PORT   PROTOCOL  LISTEN
Game         28015  udp       0
Query        28017  udp       0
RCON         28016  tcp       0
App          28082  tcp       0

Running the ss command will bring up any ports that are listening. If not, the game server has not started or not correctly binding to its allocated ports.

  • Check that ports are not already in use by another application.

  • Check that you are trying to listen to an actual interface IP.

  • Check that the server does not crash upon start by checking console logs or try starting the server with ./gameserver debug

Check the Firewall

Firewalls are a regular source of connectivity issues. When diagnosing connection issues temporarily disabling a firewall will help identify if it is the source of the problem.

Check Port Forwarding (Local Networks)

Ensure that the router correctly redirects incoming traffic to the correct ports and local IP displayed with ./gameserver details with the correct protocol (TCP and/or UDP).

cronjobs

To automate LinuxGSM you can set scheduled tasks using cronjobs, to run any command at any given time.

Commonly used scheduled tasks are:

  • Automatically check for updates (update command)

  • Automatically check for server crash and restart if needed (monitor command)

  • Automatically keep LinuxGSM up to date (update-lgsm command)

  • Automatically restart the server at a given time (restart command)

  • Automatically update and restart the server (force-update command)

Crontab

To access and edit your cronjobs use crontab.

crontab -e

Cronjob as a user or root

It is possible to set up cronjobs as any user including root. The recommended way is to set up cronjobs using the game servers user account. However, If you run several game server installations on your server you may want to centrally manage cronjobs then using root.

User cronjob

* * * * * [/path/to/script] [command] > /dev/null 2>&1

Root cronjob

* * * * * su - username -c '[/path/to/script] [command]' > /dev/null 2>&1

Cronjob Timing Examples

Every single minute

* * * * *

Every 30 minutes

*/30 * * * *

Every hour

0 * * * *

Every two hours

0 */2 * * *

Every two hours at 30 minutes past the hour

30 */2 * * *

Every day at 5:10 PM

10 17 * * *

Every Wednesday at 1 AM

0 1 * * * 3

Every Five Days at 1 AM

0 1 */5 * *

Cronjob Generator

If you are not used to setting up cronjobs you can use crontab.guru as a great reference to get started.

LinuxGSM Cronjobs examples

Replace username and gameserver with your own details.

Daily cronjob

Here is an example of a user based cronjob for a daily restart at 5 am.

0 5 * * *  /home/username/gameserver restart > /dev/null 2>&1

Here is an example of a root based cronjob for a daily restart at 5 am.

0 5 * * *  su - username -c '/home/username/gameserver restart' > /dev/null 2>&1

Every X Time cronjobs

Here is an example of a user based cronjob to monitor your server every 5 minutes.

*/5 * * * *  /home/username/gameserver monitor > /dev/null 2>&1

Here is an example of a root based cronjob to monitor your server every 5 minutes.

*/5 * * * *  su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1

Complete Example

Below is a recommended basic example and will do the following:

  • Monitor your server every 5 minutes.

  • Check for an update every 30 minutes, update and restart only if an update is detected.

  • Restart and check for an update every day at 4:30 AM

  • Update check and update LinuxGSM every Sunday at midnight.

*/5 * * * * /home/username/gameserver monitor > /dev/null 2>&1
*/30 * * * * /home/username/gameserver update > /dev/null 2>&1
30 4 * * *  /home/username/gameserver force-update > /dev/null 2>&1
0 0 * * 0 /home/username/gameserver update-lgsm > /dev/null 2>&1

LinuxGSM Stats

LinuxGSM Stats is an opt in voluntary feature that allows you to provide selected information about your game server to be displayed on linuxgsm.com by enabling the stats setting.

How is the information used?

All data collected is used to provide insight into which game servers, distros, and servers are popular with game server admins. This will assist in prioritising LinuxGSM development and give me (Daniel Gibbs) a never before insight into the number of people using LinuxGSM. This is a massive personal motivator as it has previously been difficult to know how many people actually use LinuxGSM.

The collected data is publicly available to view in a dashboard on LinuxGSM.com

What information is collected?

Below is a list of types of data collected

Basic Info

  • Game Server - Knowing the game server you are running gives insights into which servers are popular and can help shape development priorities.

  • Distro - It is useful to know which distros LinuxGSM is being used on to help focus development.

  • LinuxGSM Version - The currently installed version of LinuxGSM.

  • Alert Types - The alert types that have been turned on.

Game Server Usage

Gathering game server usage helps set the minimum required hardware for each game server. This is particularly useful for resource-intensive servers.

  • CPU Used - The CPU usage in MHz (rounded to the nearest 100MHz) of the game server.

  • RAM Used - The memory usage in MB (rounded to the nearest 100MB) of the game server.

  • Disk Used - The storage taken by the game server (serverfiles directory) of the game server.

Server Hardware

Gathering information on the server hardware being used to host a Game Server. This provides useful stats on the sorts of hardware game server admins are deciding to use.

  • CPU - Gathers the CPU Manufacturer and Model.

  • RAM - Total server RAM.

  • Disk Space - Total server disk space.

Country of origin

The country of origin is shown identifying where in the world LinuxGSM is being used.

The country of origin is no longer working with GA-4 but might be available again in the future

How is Information collected?

LinuxGSM Stats uses Google Analytics (GA-4) event-driven API to collect information to allow Daniel Gibbs to get an idea of which game servers and distros are popular identify system requirements for game servers and know the sort of servers game server admins are using.

Is my data anonymous?

Short answer - Yes

Long answer - All information gathered is anonymous, the server IP address, hostname, etc., or other identifying information is not collected. When LinuxGSM Stats is first run it creates a UUID (Unique identifier) which is a randomly generated ID to allow Google Analytics to identify your unique information anonymously. Since this ID is random there is no way to know where the info is from, only that it is from the same sender.

The UUID is located inlgsm/data/uuid.txt,if this file is deleted a new UUID will be generated.

Since LinuxGSM is open-source you can also see how the data is gathered by looking at the info_stats.sh file.

How frequently is the data sent?

Data is sent every time the monitor runs as this is the only way to regularly send data.

How can I enable this feature?

To enable LinuxGSM Stats simply add the stats="on" setting to the common.cfg file. This can also be enabled on install.

Linux

$HOME/.xonotic/data/

Windows

%USERPROFILE%\Saved Games\xonotic\

MacOS

$HOME/Library/Application Support/xonotic/

Deathmatch

dm

Classic Free for All Gamemode where the player with the most frags wins

Team Deathmatch

tdm

Teambased Gamemode where the team with the most frags win

Capture the Flag

ctf

Teambased Gamemode where the enemy flag has to be captured and brought back to their own base

Clan Arena

ca

Team and Round-based Mode where the surviving team gets a point. Pickup Items are absent

Freeze Tag

ft

Like Teamdeathmatch, where killed players are frozen and can be revived by team members. Ammo Pickups are absent

Key Hunt

kh

Multiteam- and Roundbased Mode Mode where one player of each team gets a key and the team goal is to get all keys

Assault

as

Team- and Round-based Mode where one Team is attacking and the other defending. Attackers try to destroy objects as fast as possible

Domination

dom

Multiteambased Gamemode where the teams capture and control points on the map

Last Man Standing

lms

Free for All Gamemode where you only respawn a certain amount of time

Keepaway

ka

Free for All Gamemode where you take a ball and with that equipped frag people

Invasion

inv

Roundbased PvE Gamemode where players fight against monsters

Onslaught

ons

Team and Roundbased Mode where the Team tries to destroy the enemy generator

Race

rc

Free for all Gamemode where players try to run over a track as fast as possible

Complete the Stage

cts

Like Race Gamemode with additional Checkpoints to pass

Nextball

nb

Team and Round-based Mode where teams try to shoot a ball to the enemy goal

FAQ
Xonotic Gitlab
Xonotic Wiki
Xonotic Logo
## SteamCMD Login
steamuser="username"
steampass="password"
wiki
SteamDB
create a new Steam username
LinuxGSM config
plain text
here
steam support
SteamCMD Terminal
Steam Guard
sudo apt remove --purge nodejs npm
sudo apt clean
sudo apt autoclean
sudo apt install -f
sudo apt autoremove
npm install gamedig -g
npm update -g
 npm list -g gamedig
Players:          0/8
Current Map:      Outpost
gamedig --type "protocol-valve" --host "1.2.3.4" --port "27015"
{
  "name": "LinuxGSM Server",
  "map": "StationKappa",
  "password": false,
  "raw": {
    "protocol": 17,
    "folder": "StickyBots",
    "game": "StickyBots",
    "steamappid": 0,
    "numplayers": 0,
    "numbots": 0,
    "listentype": "d",
    "environment": "l",
    "secure": 0,
    "version": "0.0.6.22",
    "port": 7777,
    "steamid": "90122418420694019",
    "tags": "BUILDID:622,OWNINGID:90122418420694019,OWNINGNAME:LinuxGSM Server,P2PADDR:90122418420694019,P2PPORT:7777,SESSIONFLAGS:171",
    "gameid": "889400",
    "rules": {
      "BUILDID_i": "622",
      "NP_i": "0",
      "OWNINGID": "90122418420694019",
      "OWNINGNAME": "LinuxGSM Server",
      "P2PADDR": "90122418420694019",
      "P2PPORT": "7777",
      "SESSIONFLAGS": "171",
      "SN_s": "LinuxGSM Server"
    }
  },
  "maxplayers": 8,
  "players": [],
  "bots": [],
  "query": {
    "host": "1.2.3.4",
    "address": "1.2.3.4",
    "port": 27015,
    "port_query": 27015,
    "type": "protocol-valve",
    "duration": 90,
    "attempts": 1
  }
}
GameDig
Node.js

TeamSpeak 3

Enable Server Query

To enable server query certain permissions have to be enabled or the guest server group.

  • Virtual Server

  • b_virtualserver_info_view

  • b_virtualserver_channel_list

  • b_virtualserver_client_list

  • Group

  • b_virtualserver_servergroup_list

  • b_virtualserver_channelgroup_list

To enable these permissions first navigate to TeamSpeak3 Options and enable Advanced permissions system.

Tools > Options > Application

Navigate to server groups server permissions and select guest.

Permissions > Server Groups

Select the values shown below and close the menu.

  • Virtual Server

    • Information

      • b_virtualserver_info_view

      • b_virtualserver_channel_list

      • b_virtualserver_client_list

  • Group

    • Information

      • b_virtualserver_servergroup_list

      • b_virtualserver_channelgroup_list

Enable Query on LinuxGSM

Because a user has to manually enable server query with TeamSpeak 3, LinuxGSM has gamedig query disabled by default. Enabling will allow more information to be displayed in details and enable monitor to use gamedig.

Copy the query mode settings from _default.cfg to common.cfg and change querymodefrom 5 to 3.

## Query mode
# 1: session only
# 2: gamedig (gsquery fallback)
# 3: gamedig
# 4: gsquery
# 5: tcp
querymode="3"
querytype="teamspeak3"

Connect to TeamSpeak 3 Server

You can connect to a TeamSpeak 3 server to input commands without the need for a TeamSpeak 3 client. This can be done by connecting to the query port using telnet.

Using PuTTY or equivalent select a telnet connection and enter the server IP and TeamSpeak 3 query port (default:10011).

Useful Commands

Login

login serveradmin <password>

Generating a new Privilege key

use sid=<server-id>
tokenadd tokentype=0 tokenid1=6 tokenid2=0

Note: Your server ID is usually 1

Reset your query password

See change password.

TeamSpeak 3 Databases

The TeamSpeak 3 database contains all user information, groups, and statistics for your server.

SQLite Database

By default, TeamSpeak 3 uses an SQLite database file, which allows good performance for most users, and easy server transfers from one server to another. This method is recommended for most admins as it is the simplest database method to use.

MariaDB

TeamSpeak 3 also allows admins to use MariaDB (MySQL alternative) manage the database. MariaDB is entirely optional and is not required so it is recommended that admins only use if they are comfortable.

Information about installing TeamSpeak 3 with MariaDB can be found here.

TSDNS

TSDNS is a system allowing admins to redirect a domain name to a given TeamSpeak 3 port.

If TeamSpeak 3 port is using the default port, you do not need to provide the port when you are giving your server address, you can use the IP or domain name directly.

TSDNS is useful to admins that are hosting multiple TeamSpeak 3 servers on a single dedicated server.

Further documentation can be found using the following command.

cat ~user/serverfiles/tsdns/tsdns_settings.ini.sample

Additional information can be found here.

Then you can copy the sample, edit it accordingly and restart your TeamSpeak 3 server to apply the changes.

cd serverfiles/tsdns/
cp tsdns_settings.ini.sample tsdns_settings.ini
nano tsdns_settings.ini
cd ~
./ts3server restart

Known issues

IPv6

Some users with IPv6 enabled might encounter a server failing to start properly. To fix this edit serverfiles/ts3-server.ini to add a standard IPv4 (voice_ip; filetransfer_ip; query_ip) and remove the , :: from IPv6. Then as the server failed to start at the installation, the privilege key hasn't been generated. So you will need to use server query (ID/Password have been generated for them) to generate a new Server Admin privilege key.

Accounting failed to register

ERROR |Accounting | |failed to register local accounting service: File exists

If you find the above in the TeamSpeak 3 log you may need to remove the following file.

/dev/shm/7gbhujb54g8z9hu43jre8

Server Crashed after a while (outdated and no licence)

If the following message appears in the log of the Teamspeak 3 Linux Server Error creating ephemeral license: EXPIRED You need to upgrade the version of the TeamSpeak 3 Server to a more up-to-date version.

Telegram

Telegram is an instant messaging app that provides a powerful API that enables applications to send messages through bots. LinuxGSM leverages the Telegram Bot API to dispatch alerts to users, enhancing monitoring and management of gaming servers.

Creating a Telegram Bot

  1. Initiate Bot Creation: Chat with @BotFather on Telegram to start creating your bot. Begin the conversation by clicking "Start".

  2. Register Your Bot: Send /newbot to @BotFather and follow the provided instructions to set up your bot. Upon completion, you will receive an API token.

    BotFather Chat
    New Bot
  3. Configure LinuxGSM: Fill in the API token into your LinuxGSM config as follows:

    # Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
    telegramapi="api.telegram.org"
    telegramalert="on"  # Enable alerts by changing "off" to "on"
    telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" # Replace with your bot token
    telegramchatid=""
    telegramthreadid=""
    telegramsilentnotification="false" # Set to "true" to disable notification sounds and send alerts silently
    curlcustomstring=""  # Optional: For proxies, etc.

Configuring Alerts for a Group

New Group Creation

  1. Select New Group within Telegram.

  2. Name your group.

  3. Add your bot by searching its @Username.

Adding to an Existing Group

  1. Open group info.

  2. Choose to add members.

  3. Search and select your bot by its @Username.

Retrieving Your Telegram Chat ID

  1. Activate Your Bot: Interact with your bot in Telegram.

  2. Form the getUpdates URL: Replace the placeholder with your bot's token in https://api.telegram.org/botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/getUpdates.

  3. Visit the URL: Use a web browser to access the URL.

  4. Locate the Chat ID: In the JSON response, find the id field under the chat object.

    "chat": {
        "id": 123456789,
        "first_name": "Your Name",
        "username": "YourUsername",
        "type": "private"
    }

    Note: The Chat ID for private chats is a positive number and for a group, it's a negative number.

  5. Update LinuxGSM Config: Place your Chat ID in the LinuxGSM config file.

    # Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
    telegramapi="api.telegram.org"
    telegramalert="on"
    telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    telegramchatid="123456789" # Fill in your chat ID
    telegramthreadid=""
    telegramsilentnotification="false"
    curlcustomstring=""

Enabling Telegram Topics (Threads)

  1. Verify that Topics are enabled for your group by checking the group's settings.

  2. If you don't already have a topic created. Create a new Topic by clicking the three dots in the top right corner of the group chat and selecting New Topic.

  3. Send a message in the Topic you want to use.

  4. Repeat Retrieving Your Telegram Chat ID to retrieve the thread ID by looking for the message_thread_id field in the message object.

    {
        "update_id": 123456,
        "message": {
            "message_id": 123,
            "from": {
                "id": 12345,
                "is_bot": false,
                "first_name": "Sender",
                "username": "SenderUsername",
                "language_code": "en"
            },
            "chat": {
                "id": -123456789,
                "first_name": "Your Name",
                "username": "YourUsername",
                "type": "supergroup"
            },
            "date": 1709691014,
            "message_thread_id": 11, // Use this number as your telegramthreadid
            "forum_topic_created": {
                "name": "LinuxGSM",
                "icon_color": 12345
            },
            "is_topic_message": true
        }
    }
  5. Update the telegramthreadid field in the LinuxGSM config with the thread ID.

    # Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
    telegramapi="api.telegram.org"
    telegramalert="on"
    telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    telegramchatid="123456789"
    telegramthreadid="5" # Fill	in your thread ID
    telegramsilentnotification="false"
    curlcustomstring=""

Testing the Configuration

Execute a test alert with ./gameserver test-alert to verify the setup.

If you receive an alert on Telegram in the right place (group or private chat), the configuration is correct.

Advanced Configuration: Custom cURL String

For specific needs such as bypassing network restrictions, you can specify custom cURL arguments in the configuration.

    # Telegram Alerts | https://docs.linuxgsm.com/alerts/telegram
    # You can add a custom cURL string eg proxy (useful in Russia) in "curlcustomstring".
    # For example "--socks5 ipaddr:port" for socks5 proxy see more in "curl --help all".
    telegramapi="api.telegram.org"
    telegramalert="on"
    telegramtoken="XXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    telegramchatid="123456789"
    telegramthreadid="5"
    telegramsilentnotification="false"
    curlcustomstring="--socks5 ipaddr:port" # Fill in your custom cURL string
    ```

Java

Some game servers require using Java Runtime Environment (JRE) such as Minecraft and Project Zomboid.

Installation of Java Runtime Environment

If you are unsure which version to choose simply pick the default JRE.

Debian/Ubuntu

JRE

To install the most up to date JRE for the distro run:

OpenJRE

For openjdk, run the following changing the version number:

CentOS

Run the following command, changing the version number:

JRE Availability Table

JRE Availability Table Different Distros have different versions of Java. This page will outline the different versions that are available.

also contains details of JRE versions.

Further Reading

Game Server Login Token

Game Server Login Token is a new system by Valve for managing game servers.

Games using GSLT

  • Ballistic Overkill

  • Brainbread 2

  • Black Mesa: Deathmatch

  • Blade Symphony (required)

  • Counter-Strike: Global Offensive (required)

  • Counter-Strike: Source (required)

  • Counter-Strike 2 (required)

  • Day of Defeat: Source

  • Empires Mod

  • Garry’s Mod (required)

  • Insurgency

  • Insurgency: Sandstorm

  • No more Room in Hell (required)

  • Nuclear Dawn

  • Team Fortress 2

  • Tower Unite

  • Unturned

  • Zombie Panic! Source

What is GSLT?

GSLT creates a persistent token for a game server. This allows any users who added your server to favourites to join, even if you change your ip address. This is very useful if you change your server/hosting provider.

To fully understand the reasoning behind GSLT, we need to back up a bit to July 2015. , meaning it could not connect to the master servers and people wouldn’t be able to connect to the server.

This created a lot of problems for game server providers, large communities, and anyone providing configurable servers to third parties, as bans were handed out by IP, meaning that an entire machine could be banned because of one malicious or uninformed user.

To address this, Valve is moving the ban to the account level instead of the IP address level, which means that the end-user is always responsible for what they run on their server. Of course, game server providers and the like still have a responsibility to educate their users on these policies, as some might mistakenly upload blacklisted plugins.

An added benefit is that people who add your server to favourite will still be able to find and connect to your server, even if you change hosting provider and/or the IP / port of your server. This is something that previously was impossible.

Generate a Token

To generate a token follow this .

GSLT requires the app ID of the base game (e.g. 440 for TF2, 730 for CS:GO, 4000 for Garry's Mod) when generating a token, not the server appid

Every single server must use a unique GSLT.

GSLT Server Parameter

GSLT can be registered on your server(s) by using the sv_setsteamaccount command either in or from a .

start parameter

LinuxGSM may provide the variable gslt= that gets added to the start parameter.

+sv_setsteamaccount [token]

game server config

sv_setsteamaccount [token]

Tower Unite

Tower Unite has a command within its

SteamLoginToken=

FAQ

If one of my tokens is banned/blacklisted, will all tokens be banned?

Yes, all the tokens on your account will be blacklisted if one of your servers are found to be running a blacklisted plugin. Make sure you read up on Valve’s plugin policies before running a game server so nothing unfortunate happens to your tokens.

If my GSLT gets banned for running a blacklisted plugin, will my steam account be community and/or VAC banned?

Depending on the game Valve will punish the account that generated the token, On CS:GO you get a global cooldown of 7 days (you cannot join any community/valve server) Most likely, it won’t be VAC banned, but Valve’s requirement that anyone creating GSLTs is not community banned, you may be community banned for running blacklisted plugins.

Can I use the same GSLT for multiple servers?

No. You must create a unique GSLT for each simultaneously running server.

Can I re-use GSLTs?

Yes, you can add your GSLT to a new server, you just can’t run two servers with the same GSLT, at the same time.

Do I still need a Steam WebAPI key to host workshop maps?

Unfortunately, despite registering a GSLT to your server, CS:GO servers will still need a Steam WebAPI key to host maps from the Workshop.

As of yet, no official confirmation has been made that TF2 servers will also require GSLTs, but they do support them, so it’s not a wild guess that this is to come.

My server loses connection to the registered Steam account

Don’t use the same GSLT for multiple servers. When a server starts with a specific GSLT, it will disconnect any other servers already running that same GSLT. You need to create a unique GSLT for each server.

Is there a limit on how many GSLTs my account can have?

Yes, you can have a maximum of 1000 GSLTs on your account.

What are the requirements for my account to be able to create a GSLT?

Your Steam account must not be currently community-banned or locked. Your Steam account must not be limited. Your Steam account must have a qualifying registered phone. Your Steam account must own the game for which you are creating a GSLT. Your Steam account may not have more than 1000 tokens.

For further information, see this useful blog post:

apt install default-jre
apt install openjdk-8-jre
apt install openjdk-11-jre
apt install openjdk-16-jre
apt install openjdk-17-jre
yum install java-1.8.0-openjdk
yum install java-11-openjdk

Distro

JRE 6

JRE 7

JRE 8

JRE 11

JRE 13

JRE 16

JRE 17

CentOS 7

YES

YES

YES

YES

NO

NO

NO

CentOS 8

NO

NO

YES

YES

NO

NO

NO

Debian 9 "Stretch"

NO

NO

YES

YES (backport)

NO

NO

NO

Debian 10 "Buster"

NO

NO

NO

YES

NO

NO

NO

Debian 11 "Bullseye"

NO

NO

NO

YES

NO

NO

YES

Ubuntu 16.04 LTS

NO

NO

YES

NO

NO

NO

NO

Ubuntu 18.04 LTS

NO

NO

YES

YES

NO

NO

NO

Ubuntu 20.04 LTS

NO

NO

YES

YES

YES

YES

YES

Distrowatch
https://help.ubuntu.com/community/Java
Valve announced that running certain plugins would get your server blacklisted
link
game server config
start parameter
config file
http://dathost.net/blog/important-information-regarding-our-csgo-servers/
duplicity: Main
GitHub - zertrin/duplicity-backup.sh: Bash wrapper script for automated backups with duplicity supporting Amazon's S3 online storage as well as other storage destinations (ftp, rsync, sftp, local storage...).GitHub
Rclone

Commands

Replace ./gameserver with the actual script name. Every command has a short version, also listed here.

Global commands list

Command Name

Command

Short

./gameserver install

./gameserver i

./gameserver auto-install

./gameserver ai

./gameserver start

./gameserver st

./gameserver stop

./gameserver sp

./gameserver restart

./gameserver r

./gameserver details

./gameserver dt

./gameserver postdetails

./gameserver pd

./gameserver skeleton

./gameserver sk

./gameserver backup

./gameserver b

./gameserver update-lgsm

./gameserver ul

./gameserver monitor

./gameserver m

./gameserver test-alert

./gameserver ta

./gameserver update

./gameserver u

./gameserver check-update

./gameserver cu

./gameserver force-update

./gameserver fu

./gameserver validate

./gameserver v

./gameserver console

./gameserver c

./gameserver debug

./gameserver d

Specific commands

Teamspeak 3

Command Name

Command

Short

./ts3server change-password

./gameserver pw

Unreal & Unreal 2 Engine Games

Command Name

Command

Short

./gameserver map-compressor

./gameserver mc

Rust

Command Name
Command
Short

./rustserver full-wipe

./rustserver fw

./rustserver map-wipe

./rustserver mw

Developer & Debug commands

Command Name

Command

Short

./gameserver developer

./gameserver dev

Detect Dependencies

./gameserver detect-deps

./gameserver dd

Detect Glibc

./gameserver detect-glibc

./gameserver dg

Detect ldd

./gameserver detect-ldd

./gameserver dl

Query Raw

./gameserver query-raw

./gameserver qr

Clear Modules

./gameserver clear-moeuldes

./gameserver cm

Factorio

Server Resources

Server Configuration

Configuration for Factorio is split between both the and .

LinuxGSM Server Config

port, rcon and branch configuration is set using stat parameters

Specific verison

To use a specific version of Factorio, you can change the branch to the version you want to use :

One the branch changed, do not forget to update the server :

Game Server Config

All other settings are located in the Factorio .

Useful settings include:

Server Credentials

If you want your server to be publicly listed on the server browser you will need to enter your profile credentials from the . You can use either a token or password.

World Generation Settings

Overview

Specifying world generation settings is a fairly simple task when creating a new world.

The steps to do so are as follows:

  1. Delete any existing world data

  2. Modify map-gen-settings.json

  3. Use the Factorio executable to generate a world with that json

  4. Run Factorio as normal

Follow the Guide below for detailed instructions on doing the above.

Adjusting World Generation Settings

Firstly, delete any existing worlds that are found in the serverfiles directory.

Remember to backup your server

In the data directory, copy the example files, then and customise them to your requirements.

In map-gen-settings.json, the can be:

Once complete you will need to generate your World. Go back to the serverfiles directory and run the Factorio binary.

Adjusting World Generation Settings (Mods)

I prefer the added customisation of the to the built-in generation.

The easiest way that I've found to generate a world with the RSO mod (and add mods in general) is as follows:

  1. Startup Factorio on a client and install the RSO mod

  2. Start generation of a new world and configure mod generation settings

  3. Grab the mod files and mod-settings.dat

  4. Transfer them to the server

  5. Delete or rename any previous worlds

To configure the generation, go to Play > New World > Mod Settings > Map, then adjust options accordingly. Doing so will generate a file called mod-settings.dat which stores these settings.

You can locate the mod files on your system in the path :

Transfer all of the mods and mod-settings.dat file to your server with a tool like or the rsync command on Mac/Linux, or even a USB drive.

Note: DO NOT TRANSFER FILES OVER FTP

If you have SSH open on the server, you will want to use SFTP. If you're using Filezilla, setting the port to 22 will tell it to use SFTP. If you're using rsync, the command would look something like this:

You will want to drop those files in the serverfiles/mods directory. You will also need to delete the existing save so that it generates a new one with the new generation rules. (This is a great time to make backups if you have any progress you would like to save).

Navigate to the root folder of your Factorio installation, then delete the save:

Once you've done that, you're good to start the server.

IP Address

Depending upon the configuration of your server you may need to be more aware of its IP address configuration and how it relates to your game server.

This guide is not designed to be an in-depth guide to networking, instead focusing on parts relevant to game servers.

Network Locations

Your game server can be hosted online using a server provider such as Linode or on a at home for either local-only LAN parties or allowing online players in through your router.

Internet (Public)

If your server is hosted on the internet using a server provider you should have been allocated a public internet IP address that will be accessible by everyone on the internet.

Local Networks (Private)

Using a home server or virtual machine on your desktop is a great way to get started with LinuxGSM. However, a local network (LAN) may require a better understanding of networking equipment, how local IP addressing works, and technologies such as and .

When a server is hosted on a local network it will be given a private IP address that is only accessible to other devices on your local network. This is fine if you want to get friends around host a game server for a good old-fashioned LAN party. But if you want to allow online players access to your local game server you will need to configure your home router's firewall and setup port forwarding using NAT.

Network Interfaces

All computers will have some sort of physical or virtual (ethernet, fiber optic, wi-fi) to connect to a network. On Linux, you can see your server's interfaces by using the following command.

Typically you may see (depending on distro) a localhost loopback interface and an eth0 interface. The eth0 (Ethernet) is used for your standard copper network cable and is what you will likely see. If you have multiple interfaces you may also see eth1, eth2, etc. More advanced setups can choose to bond together interfaces to work as one to increase bandwidth and resilience.

IP Address

An IP (Internet Protocol) address is a numerical label assigned to each device connected to a computer network that uses the Internet Protocol for communication. It serves two primary functions: host or network interface identification and location addressing. IP addresses enable devices to send and receive data within a network, facilitating communication and data transfer across the Internet.

  1. LAN IP Address:

    • Example: 192.168.1.10

    • Explanation: In a typical home or office network, devices are often assigned private IP addresses within the range defined by the Internet Engineering Task Force (IETF) for private networks. The "192.168.1.10" address is an example of a private IP address commonly used within a LAN. Each device on the local network would have a unique private IP address for internal communication.

  2. Internet IP Address:

    • Example: 203.0.113.45

    • Explanation: Internet IP addresses, also known as public IP addresses, are assigned by Internet Service Providers (ISPs) and are globally unique. The "203.0.113.45" address is an example of a public IP address. Websites, servers, and other devices connected to the Internet have public IP addresses that are used for communication between different networks on a global scale. These addresses are essential for routing data across the Internet.

Virtual Private Networks

Some servers may be connected to a VPN (Virtual Private Network) using software such as Wireguard or OpenVPN. This normally creates its own interface that gets allocated an IP address. It is possible to use a VPN to create a private connection to a LAN server

Tunneling

A relatively new technology is starting be become popular that allows applications hosted (think self-hosted web applications) on a private network to be accessed on the internet via a network "tunnel". This typically involves running a tunnel client in the private network that points to a specific internal IP and port. This bypasses the need to port forward on a router. Currently, there is a service called that is specifically designed for game servers. However other solutions may work.

IP Address Allocation

Each network interface can be allocated an IP address either manually on the server or via DHCP. If you are using a provider an internet IP address is normally automatically allocated to your server. For a local network, your router DHCP server will allocate a local IP address. A local IP address can be reserved using DHCP or you can manually set an IP on the server.

Game Servers will typically bind (attach a network socket) to all available IP addresses making the game server available on all networks. However, sometimes a particular IP address may need to be specified if you only want a particular network to access it or the game server requires it.

Single Server IP Address

The simplest and most common server configuration will have one network interface and thus one IP address. When your game server starts it will simply listen and bind to this IP address.

Multiple Server IP Addresses

Some servers will have multiple network interfaces available, allowing for multiple IP addresses to be assigned to your server. In this configuration, a server might listen and bind itself to all IP addresses or just one (depending on the game server).

Multihome

If you have multiple interfaces you may choose to multihome your server. This simply means each interface is on a different network. For example, eth0 is on the 192.168.0.0 network and eth1 is on the 192.168.1.0 network and wg0 (WireGuard VPN) is attached to 10.0.0.0. While it is unlikely there is a specific use case for game servers to use multiple networks you need to be aware of what IP addresses your server is bound to.

0.0.0.0

The 0.0.0.0 IP is a meta-address means non-specific or all addresses. When you set up a game server you may notice the IP address 0.0.0.0 in command line parameters and settings. It is the default IP for game servers just signifies that the game server can bind to all available server IP addresses.

Unless a specific IP address is required the game server IP can be set to 0.0.0.0.

Install
Auto Install
Start
Stop
Restart
Details
Post Details
Skeleton
Backup
Update LinuxGSM
Monitor
Test Alert
Update
Check Update
Force Update
Validate
Console
Debug
Change Password
Map Compressor
Full Wipe
Map Wipe
Developer
ip -o link show
local network
DHCP
NAT
network interface
playit.gg
## Server Start Settings | https://docs.linuxgsm.com/configuration/start-parameters
ip="0.0.0.0"
port="34197"
rconport="34198"
rconpassword="Change_Me"
# (stable|experimental)
branch="stable"
## Server Start Settings | https://docs.linuxgsm.com/configuration/start-parameters
branch="1.1.87"
./fctserver update
serverfiles/data/fctrserver.json
"name": "Name of the game as it will appear in the game listing",
"description": "Description of the game that will appear in the listing",
"tags": ["game", "tags"],

"_comment_max_players": "Maximum number of players allowed, admins can join even a full server. 0 means unlimited.",
"max_players": 0,

"game_password": "",

"_comment_autosave_interval": "Autosave interval in minutes",
"autosave_interval": 10,

"_comment_autosave_slots": "server autosave slots, it is cycled through when the server autosaves.",
"autosave_slots": 5,
"_comment_credentials": "Your factorio.com login credentials. Required for games with visibility public",
"username": "",
"password": "",

"_comment_token": "Authentication token. May be used instead of 'password' above.",
"token": "",
cd serverfiles
rm save1.zip # this will delete your world.
rm -r saves # this directory will only exist if you have ran the server.
cd data
cp map-gen-settings.example.json map-gen-settings.json
cp map-settings.example.json map-settings.json
"none" - equivalent to 0
"very-low", "very-small", "very-poor" - equivalent to 1/2
"low", "small", "poor" - equivalent to 1/sqrt(2)
"normal", "medium", "regular" - equivalent to 1
"high", "big", "good" - equivalent to sqrt(2)
"very-high", "very-big", "very-good" - equivalent to 2
cd ../
./bin/x64/factorio --create ./save1.zip --map-gen-settings data/map-gen-settings.json --map-settings data/map-settings.json
Windows (Zip file): <install directory>\mods
Windows (Installer): C:\Users\<username>\AppData\factorio\mods
Windows (Steam): C:\Users\<username>\AppData\Roaming\factorio\mods
OSX: ~/Library/"Application Support"/factorio/mods
Linux: ~/.factorio/mods
rsync -a <source files> <user>@<ip>:<remote destination>
cd serverfiles/
rm -rf save1.zip # this will PERMANENTLY delete your world
rm -rf saves/* # this folder will only exist if you have ran the server
World generation
Factorio server Wiki
Factorio console commands
game server config
start parameters
game server config
Factorio website
ore generation values
Resource Overhaul Mod
your Factorio installation saves to
Filezilla
Factorio Profile
Introduction to rsyncLinode Guides & Tutorials
GitHub - nodesource/distributions: NodeSource Node.js Binary DistributionsGitHub
GitHub - nodesource/distributions: NodeSource Node.js Binary DistributionsGitHub
GitHub - GameServerManagers/Game-Server-Configs: A repo of game server configuration files used by LinuxGSMGitHub
GitHub - GameServerManagers/Game-Server-Configs: A repo of game server configuration files used by LinuxGSMGitHub

Troubleshooting

This guide should cover a wide range of issues, but some might be more complicated than that. If you need further assistance, please make sure you read the to know the right place to reach us and what information to provide in order for us to be able to help you.

Installation issues

Your game server might not install for many reasons, mainly user based ones, and some distro based. Make sure you answer "yes" to any of these questions.

User and permissions

  • Did you create a dedicated user for your server?

  • Are you running the script as the right user? Check command: whoami

  • Does the user running the script owns its current directory? Check command: ls -al ., see

  • Does the user have the right permissions on its directories? See

Dependencies

  • Did you install required packages (dependencies) as game page on requests?

  • If sudo isn't installed, did you remove "sudo" from packages install commands?

  • If lib32gcc1 libstdc++6 libstdc++6:i386 packages won't install, did you run apt update after dpkg --add-architecture i386?

  • If some dependencies are not available, did you check your /etc/apt/sources.list? (Debian based and apt only)

Game server downloads

  • Do you have enough disk space on the desired partition? Check command: df -h

  • If the server requests a Steam login, did you enter it properly by editing your (example) "gameserver" script? It's a good idea to have a dedicated Steam account for that purpose.

  • If the Steam download didn't work as intended, did you retry it, or try the command? Maybe your connection to Steam servers is faulty.

  • Did you make sure that a firewall doesn't prevent the download from working? Check command: iptables -L ; See

Start issues

LinuxGSM servers are designed to work out of the box. However, if your server is unable to start, this can have multiple reasons. Some are user based, some are distro based. Here are some ways of diagnosing it.

Note: (example) ./gameserver details will provide you with relevant information and save you some time. See

First start issues

  • Is the server properly installed? See the "Game server downloads" part

  • Are all packages installed properly? See "Dependencies" part

  • Is your Linux installation compatible? 32/64bit, distribution... Check command: uname -a

  • Are ports already used by another service? See and

  • Is this a known tmux issue? See

  • Did you try to start with the debug command? See

  • What does the logs say? See [

  • Do you have enough RAM? If not, do you have enough swap? Check command: free -mh

  • Did you set an ip in your (example) gameserver script or config file?

Modded servers start issues

  • What does the logs say? See [

  • Did you try to start with the debug command? See

  • Did you wrongly append start parameters? See

  • Did you try temporarily removing mods, and adding them one by one?

  • Does the user have the right permissions on its directories? If this is the case, a corresponding error should be displayed. See

Server start issues after updates

  • What does the logs say? See [

  • Did you try to start with the debug command? See

  • Did you try to validate your game files? (SteamCMD servers only) See

  • Is a mod no longer compatible? Try temporarily removing mods, and adding them one by one.

  • Is it an editor's error, breaking the server? Does it now require newer package versions? Check forums, alert us if needed by opening a Github issue (and check for existing ones).

Connectivity issues

Unable to connect or not showing up in server list

This is a three part diagnosis: 1) First off, you need to make sure that the server is started properly, take attention to any error messages in console or log output. 2) Check that the server is listening, to the right IP. 3) Check for firewalls or ports redirections that could prevent useful network packets from passing through.

Is the server actually started?

  • Start it with (example ./gameserver start , then check server logs (see [) to see if everything seems OK. You can also try the command and command to see if it's online and if it's able to answer simple queries. If not, then follow the "Start issues" section.

Is the server actually listening?

./gameserver details will provide you with the corresponding command to check if the server process is properly listening. Example sample output:

Compare the output from this to expected ports displayed in the details command.

If the output differs or your think something is wrong, here are the things to check on:

  • Did you set an ip in your gameserver script or config file or are you listening to 0.0.0.0?

  • Are the ports you're using free? See

  • Are you listening to an actual interface IP? See Also, double check for typo mistakes.

Isn't there a firewall or a missing NAT rule?

  • Are you behind ? See

  • If it's a local server, are ports redirection done properly? See and

Other keys to solving this:

  • As usual, first thing you have to ask yourself: What do the logs say? See [

  • Did you wait long enough? Sometimes it's just a matter of time until the server is fully started and listed into the master server list.

If none of these work

GitHub is only for bug reports regarding LinuxGSM, not resolving specific user issues.

These kind of install, start or accessibility issues are generally specific to your server or install or comprehension of Linux, so please, note that posting these on GitHub will only result in your issue being closed without an answer and developers' waste of time. Instead, you should use the support methods offered to the community: Discord or Steam Forum as explained in the page. There are lot of nice and helpful users and devs follow them as well whenever they have free time.

If you ever confirm a global bug after this, LinuxGSM's developers will be happy to resolve it if you raise an issue on GitHub with as much elements as possible to help understanding, reproducing and resolving the bug quickly.

To learn where and how to get support, see:

Useful port diagnostic command:
netstat -atunp | grep srcds_linux
Support
File Ownership
Permissions
https://linuxgsm.com
validate
Firewalls
details
Ports
Multiple-Game-Servers
Tmux
debug
Logging
Logging
debug
Start-Parameters
Permissions
Logging
debug
validate
Logging
details
monitor
Ports
Ports
Firewalls
Firewalls
Ports
details
Logging
Support
Support

Counter-Strike 2

This page is still a work in progress. If you have updated info please edit this document or let us know.

Server Resources

Official Server Resources

  • CS 2 Dedicated server Wiki

  • CS 2 Game Modes

Game Modes

CS2 features various game modes, which can be played on your server. To make setting up your server a bit easier, the following table sums up the configuration required in your server's LinuxGSM config for the various game modes. If you want more detailed and up-to-date information, take a look at Valve's wiki: CS2 Game Modes.

[Game Modes]
gametype
gamemode
gamemodeflags
skirmishid
mapgroup (you can mix these across all Game Modes except Danger Zone, but use only one)

Arms Race

1

0

0

0

mg_armsrace

Boom! Headshot!

1

2

0

6

mg_skirmish_headshots

Classic Casual

0

0

0

0

mg_casualsigma, mg_casualdelta

Classic Competitive (Default)

0

1

0

0

mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...

Classic Competitive (Short Match)

0

1

32

0

mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...

Danger Zone

6

0

0

0

mg_dz_blacksite (map: dz_blacksite), mg_dz_sirocco (map: dz_sirocco)

Deathmatch (Default)

1

2

0

0

mg_deathmatch

Deathmatch (Free For All)

1

2

32

0

mg_deathmatch

Deathmatch (Team vs Team)

1

2

4

0

mg_deathmatch

Demolition

1

1

0

0

mg_demolition

Flying Scoutsman

0

0

0

3

mg_skirmish_flyingscoutsman

Hunter-Gatherers

1

2

0

7

mg_skirmish_huntergatherers

Retakes

0

0

0

12

mg_skirmish_retakes

Stab Stab Zap

0

0

0

1

mg_skirmish_stabstabzap

Trigger Discipline

0

0

0

4

mg_skirmish_triggerdiscipline

Wingman

0

2

0

0

mg_de_prime, mg_de_blagai, mg_de_vertigo, mg_de_inferno, mg_de_overpass, mg_de_cbble, mg_de_train, mg_de_shortnuke, mg_de_shortdust, mg_de_lake

When adjusting the mapgroup, don't forget to also set defaultmap to a map contained in the same mapgroup.

If players are respawning in random locations on custom maps, set mp_randomspawn to 0.

If players are being banned for dying too much, such as on minigames maps, as a workaround set mp_autokick to 0. Warning, this disables AFK and Teamkilling kicks as well.

Workshop

it is possible to add a single or collection of workshop maps to a Counter-Strike 2 server.

Workshop ID

First, gather the map or collection ID. To do this find the workshop map or collection you want to use on the CS2 steam workshop and look at the URL; it will contain the required ID number. In the example below the ID is 3075706807.

https://steamcommunity.com/sharedfiles/filedetails/?id=3075706807

Create a Collection

Auth Key

If you are using a collection you will need to get an auth key from here.

GitHub - nodesource/distributions: NodeSource Node.js Binary DistributionsGitHub
Logo
Logo

Unreal Tournament 3

Unreal Tournament 3 requires using master server to get it running. Please ensure you have created a login to allow this server to work.

Server files

LinuxGSM uses the most recent version of UT3 server available for Linux.

v2.1 (3808) [Compiled: Apr 22 2009 04:27:51].

Unreal Tournament 3 Requires a few alterations from the official server download. Because of this, the LinuxGSM version of the server files includes the following.

  • Patch 5 (v2.1)

  • Titan Expansion Pack

  • Openspy Server Patch

  • WebAdmin 1.17

Ports

  • Game Port 7777 UDP handled by Parms

  • Query port 6500 UDP handled by parms

  • Web Admin 8080 TCP handled by UTWeb.ini

Server OpenSpy Login

All servers require a unique login to allow a server to show on the master server list and open the query port. This login has to be created via the game client "Create Profile". You can create multiple profiles under the same email address but you must use the same password for each if you do so.

How to fix the Unreal Tournament 3 Game Client

Download the OpenSpy Patch to get the server browser working.

Game Types

This is a list of the valid gametypes:

Mutators

If you want to run more than one mutator separate them with commas.

This is a list of the valid mutators shipped with the retail version:

Common Variables

Most of these can be set in the server's UTGame.ini, so there's no need to clutter up the command line.

Server Names

Server names can be specified in the server's UTGame.ini

The ServerDescription field isn't in plain ascii or text as you and I know it. Instead its in UCS2 (UTF-16) which is then serialised as numeric strings.

Enable Mapvote

Edit the UTGame.ini. Under the [UTGame.UTGame] section, be sure to have this:

Admin Commands

You meant to be able to admin the game using rcon but when we tried it although adminlogin worked none of the subsequent commands did.

First off login with: AdminLogin <password>

The you can use the following command:

  • AdminLogin <password> - Logs you in as an admin

  • AdminLogout - Logs you out of admin mode

  • AdminRestartMap - Restarts the current map

  • AdminChangeMap <MapName> - Loads a different map (gametype will change too, depending on map)

  • Admin addbots <#> - Adds number of bots

  • Admin killbots - Removes all bots

  • AdminPlayerList - Shows PlayerID of players

  • Adminkick <playername> - Kicks player from current game

  • Adminkickban <playername> - Kicks player from current game and bans player from reconnecting (bans are stored in .ini file for later editing)

  • AdminForceVoiceMute <playername> - Blocks a player from sending voip to others

  • AdminForceVoiceUnMute <playername> - Allows a player to resume sending voip to others

  • AdminForceTextMute <playername> - Blocks a player from sending text to others

  • AdminForceTextUnMute <playername> - Allows a player to resume sending text to others

  • AdminPublishMapList - Overrides the server's map list for the current game type with the one on the client that used the command

When your done you can logout with: AdminLogout

Name

GameType

Deathmatch

UTGame.UTDeathmatch

Capture the Flag

UTGameContent.UTCTFGame_Content

Warfare

UTGameContent.UTOnslaughtGame_Content

Vehicle Capture the Flag

UTGameContent.UTVehicleCTFGame_Content

Team Deathmatch

UTGame.UTTeamGame

Duel

UTGame.UTDuelGame

 ?mutator=UTGame.UTMutator_Instagib,UTGame.UTMutator_LowGrav

Name

MutatorIdentifier

Instagib

UTGame.UTMutator_Instagib

BigHead

UTGame.UTMutator_BigHead

Low Gravity

UTGame.UTMutator_LowGrav

Super Berserk

UTGame.UTMutator_SuperBerserk

Friendly Fire

UTGame.UTMutator_FriendlyFire

No Translocator

UTGame.UTMutator_NoTranslocator

Speed Freak

UTGame.UTMutator_SpeedFreak

Handicap

UTGame.UTMutator_Handicap

No Powerups

UTGame.UTMutator_NoPowerups

Slomo

UTGame.UTMutator_Slomo

Weapon Replacement

UTGame.UTMutator_WeaponReplacement

Weapon Respawn

UTGame.UTMutator_WeaponsRespawn

MaxPlayers=<number>

Maximum number of players on the server (overrides ini setting)

MinNetPlayers=<number>

Minimum number of players before a match starts (real players not bots)

bShouldAdvertise=[True|False]

Show the server in the server browser (default: true)

bIsLanMatch=[True|False]

Is this a LAN only game? (default: false)

bIsDedicated=[True|False]

Changes dedicated server flag (default: false, even if started as dedicated)

GamePassword=<password>

Sets a game password

AdminPassword=<password>

Sets an admin password

Port=<port>

Sets the server game port (default: 7777; can also be changed via the INI file)

QueryPort=<port>

Sets the server query port (default: 6500)

GoalScore=<number>

Sets the max frags / max caps before the server will change maps.

bUsesStats=[True|False]

Report stats or not?

TimeLimit=<number>

Sets the timelimit in minutes for each map.

bAllowMapVoting=True
VoteDuration=45
GameSpecificMapCycles=(GameClassName="UTDeathmatch",Maps=("DM-Arsenal","DM-Biohazard","DM-CarbonFire","DM-Deck","DM-Defiance","DM-Deimos","DM-Diesel","DM-Fearless","DM-Gateway","DM-HeatRay","DM-RisingSun","DM-Sanctuary","DM-Sentinel","DM-ShangriLa"))
GameSpecificMapCycles=(GameClassName="UTTeamGame",Maps=("DM-Arsenal","DM-Biohazard","DM-CarbonFire","DM-Deck","DM-Defiance","DM-Deimos","DM-Diesel","DM-Fearless","DM-Gateway","DM-HeatRay","DM-RisingSun","DM-Sanctuary","DM-Sentinel","DM-ShangriLa"))
GameSpecificMapCycles=(GameClassName="UTCTFGame_Content",Maps=("CTF-Coret","CTF-Hydrosis","CTF-Reflection","CTF-Vertebrae","CTF-OmicronDawn","CTF-Strident"))
GameSpecificMapCycles=(GameClassName="UTVehicleCTFGame_Content",Maps=("VCTF-Containment","VCTF-Corruption","VCTF-Kargo","VCTF-Necropolis","VCTF-Sandstorm","VCTF-Suspense"))
GameSpecificMapCycles=(GameClassName="UTOnslaughtGame_Content",Maps=("WAR-Avalanche","WAR-Downtown","WAR-Dusk","WAR-FloodGate","WAR-Islander","WAR-Islander_Necris","WAR-MarketDistrict","WAR-OnyxCoast","WAR-Powersurge","WAR-Serenity","WAR-Serenity_Necris","WAR-SinkHole","WAR-TankCrossing","WAR-Torlan","WAR-Torlan_Leviathan","WAR-Torlan_Necris"))
GameSpecificMapCycles=(GameClassName="UTDuelGame",Maps=("DM-Arsenal","DM-Biohazard","DM-CarbonFire","DM-Deck","DM-Defiance","DM-Deimos","DM-Diesel","DM-Fearless","DM-Gateway","DM-HeatRay","DM-RisingSun","DM-Sanctuary","DM-Sentinel","DM-ShangriLa"))
OpenSpy
OpenSpy
https://ut3-ultimate.com/playing-ut3/
Logo
Logo
Logo
Logo

FAQ

Below is a list of common questions that people ask about the Linux Game Server Managers.

FAQ section is to try to help with common problems with LinuxGSM.

I'm having an issue can you help?

There are various ways to get help and support with LinuxGSM.

  • http://linuxgsm.com/support

Remember to consider the best place to post your issue and search the internet for a solution before posting.

Documentation

The website and GitHub wiki is a useful resource for various LinuxGSM related topics.

  • https://linuxgsm.com

  • https://docs.linuxgsm.com

General Support

LinuxGSM has a discord server where you can get general support for LinuxGSM related stuff.

  • https://linuxgsm.com/discord

Bugs/Feature Requests

LinuxGSM has a GitHub issues page where you can submit any bugs and feature suggestions.

  • https://linuxgsm.com/issues

tmux: command not found

I received the following error

[ FAIL ] Tmux not installed
    * Tmux is required to run this server.
        * Please see the the following link.
        * http://linuxgsm.com/tmux

Tmux has not been installed. See the dependencies section of the installation instructions.

apt-get install tmux

or

yum install tmux

Can I run a server as root?

[ FAIL ] Script will not run as root!

The script will not run as root and will error if you try. This is done for the following good reasons:

  • So you or someone else don't accidentally damage your system. (rm -rf * anyone?).

  • So you don't mess up your game servers' user permissions.

  • To help prevent someone from potentially using your game server and gain root access.

  • Keep the game server compartmentalised in its own directory away from your other stuff.

  • It's really bad practice to run scripts as root.

  • Would you really trust yourself as root after a 9-hour energy-drink-fuelled CS:GO session?

  • Did I mention it so you don't break everything!?

I can't download linuxgsm.sh (TLS/SSL Errors)

If your error looks like Unable to establish SSL connection you need to make sure you installed the ca-certificates package first as well as other dependencies showed on the website's documentation.

If you are using an "old" distribution, it is possible that your version of wget doesn't support redirects along with SSL/TLS. As a workaround, you can download the script using --no-check-certificate. Please note that you should only tolerate this practice if your trust your server network connection and the download source at 100%.

wget -N --no-check-certificate https://linuxgsm.sh

How can I install [insert name] mod?

LinuxGSM installs a vanilla server by default. There is now a mods-install feature with a limited selection of popular mods. All other mods will have to be install manually. It is recommend you visit the official add-on/mod installation guides for more info.

Here are a few useful resources for this.

  • Metamod: Source

  • Metamod

  • Sourcemod

  • AMX Mod X

  • Alliedmodders

Will LinuxGSM run on Raspberry PI?

Short answer: No

Raspberry PI uses ARM architecture whereas all the game servers will only run on x86 compatible architectures such as 32-bit and 64-bit versions of distros. Raspberry PI is not compatible with x86.

Can I bind game servers to a given CPU core?

Short answer: You should not.

Experience proves Linux's embedded CPU scheduler works the best: Each server will freely use available CPU time, spread across multiple cores/threads in order to prevent adjacent processes from slowing down each other. This allows for equitable resource distribution for all processes; in the case of CPU saturation, all processes will be slowed down by just a bit. On the other hand, binding processes to CPU cores usually provides zero to low-performance gains, while causing various issues including performance loss, most of the time for the following reason: A process that is not bound to specific CPU cores uses the core you bound your game server to, which slows it down more than if CPU usage was spread across the whole CPU.

Will LinuxGSM run on Linux for Windows?

Short answer: Yes.

A new feature in Windows 10 called WSL2 was released allowing the installation of some Linux Distros into Windows. WSL initially did not work as it did not support i386 binary's however with WSL2 it works. So you can now run LInuxGSM on your Windows 10 PC.

For more info see this useful video on the subject.

[ WARN ] Multiple active network interfaces.

You will get the following message if your server has multiple IP addresses. The game server can only bind to one IP address, because of this you need to tell the server which IP address you want to use.

[ WARN ] Multiple active network interfaces

Manually specify the IP you want to use within the csgoserver script.
Set ip="0.0.0.0" to one of the following:
127.0.0.2
162.252.9.37
162.252.9.39
162.252.9.41

Edit the LinuxGSM config located in lgsm/config-lgsm/[servername]/

Find and edit the following line and change it to the IP address you want to use.

ip="0.0.0.0"

version `GLIBC_2.15′ not found

version `GLIBC_2.15′ not found

The correct version of Glibc is not installed. See the dependencies section of the installation instructions.

write error: No space left on device

write error: No space left on device

The script cannot write to the server because there is no disk space available on your server. Free up some space to resolve.

Can you create a server script for a [insert name] game server?

You can request a script be created for a particular server by submitting a feature request on the [GitHub issues] page. This does not guarantee it will be created but we will review it and decide if it's possible and how much demand there is for it. Servers will be created when time permits.

Please also check that the server can run on Linux before submitting. Servers that require WINE will not be considered. You can use SteamDB.info to find the server and check Linux comparability.

If you have an interest in developing with BASH then you are also welcome to contribute and develop a game server into LinuxGSM.

Can you remote on to my server and help me set up my game server?

In general, we do not remote onto users' servers, unless it is to assist in development.

I found a bug how do I report it?

If you find a bug or have a suggestion please submit a bug report on GitHub issues page.

How can I install a non-steam version?

Non-steam versions of the games ARE pirated and this would be the only reason to use non-steam versions. Simply purchase the game via steam. Steam has two massive sales a year with 75% of most of their titles there is really no excuse for pirating these games. http://steampowered.com

What server do I need?

LinuxGSM itself has extremely low server requirements as it is written in BASH. However, the game servers themselves do have hardware requirements. You need to be aware of these requirements in order to choose a server that fits your needs. There are no hard and fast rules when it comes to server requirements and depends upon many factors.

  • Hard Disk: You will need to ensure you have enough disk space to install the game server. The space required varies drastically depending on the game. Generally the older the game the smaller the size. If the server is on SteamCMD you can use SteamDB to find out the disk requirements. For example https://steamdb.info/app/403240/depots/. Also take into consideration any mods, addons, backups, etc you might need.

  • CPU: Most game servers are mono-threaded. This means it will only use one CPU core per instance, because of this it is worth looking at the performance of an individual core. Every game server has different resource requirements with certain factors increasing CPU demand. For example, In Rust, the map size greatly affects CPU usage. For Counter-Strike the tick rate and bots will make a difference. Whereas for Garry's Mod the number of connected players, add-ons, and props that are used and spawned increase server requirements.

  • RAM: Again the specific game server will impact upon the RAM requirements. In general factors such as map size number of players, bots, and add-ons can have an impact on the RAM required. For example, a No More Room in Hell server has a much lower RAM requirement than ARK or Rust. The game engine also plays a massive role in RAM requirements, with Rust using around 12GB and ARK using around 6GB, Unity3D engine games can also have higher requirements.

  • Network: Game servers are not usually very demanding in terms of bandwidth. However, the connection must be reliable and consistent to ensure players get a good experience. Reducing ping and packet loss is very important, otherwise, players will experience latency and lag. Your server's location has a big effect on ping, so try to get your server relatively close to where your players are going to be. If your players are in France then a server in Europe is going to be much better than one in the US for example. Servers can sometimes come under attack so DDoS protection is also important.

To find out specific requirements of game servers check out official game documentation or forums.

I'm getting 404 errors when running modules

You're lacking the required module, because you didn't run this command before the last huge LinuxGSM update. The module structure changed, that's why you're getting a 404 error. You just need the newer LinuxGSM version.

./gameserver update-lgsm

[ FAIL ] Starting game-server: Ownership issues found

The user that you are running LinuxGSM with does not own all of its files.

For more information, see Ownership

Getting rid of bad practice

Case 1) You've been uploading files as root or any other user than your game server user. If you're logging into your FTP as root, you must know that this is wrong on so many levels and must consider using a better method urgently. Here is an example of a simple user-based FTP set in 2 minutes with proftpd which would already be better. Otherwise, one way better practice is to use SFTP that comes with SSH. No need to install an FTP server as long as you've got an SSH server. Just setup your FTP client to use SFTP, and connect with the same port as your SSH server and with your username/password.

Case 2) You've been downloading/extracting/copying files as root instead of the appropriate user. Just don't, do it as the user, OR, if you're obstinate, then at least chown files afterward.

Fixing wrong ownership

You can simply fix those ownership issues by using a chown command as root.

chown -R username:username /home/username

[ FAIL ] Starting game-server: Permission issues found

It usually means some scripts or executable files are not actually executable.

Useful command:

chmod +x <filename>

To learn more about this, see Permissions

My server is not showing up over LAN or Internet

This can have numerous reasons. Here are some ways to diagnose this issue:

  • Check your game logs to see if it contains any clue

  • Is your server listening? Input ./gameserver details to get the corresponding command to know it

  • Are you behind Firewalls? Double-check your rules, and try to disable it for testing

  • Do you have multiple interfaces? Set the right IP within your "gameserver" script or the game config file

  • Is it a home server? If you're behind a router, make sure you're listening to your local IP, then redirect appropriate ports to this local IP within your router settings.

  • Are the ports you're using free? See Ports

  • Did you wait long enough? Sometimes it's just a matter of time until your server shows up on the list

How do I solve a segmentation fault?

My source server is displaying an error like ./srcds_run: line 318: 31093 Segmentation fault

This kind of error can happen at any time or be due to numerous reasons. However, the most common ones are:

If it happens upon start:

  • Interpreter issue (glibc libstdc gcc libraries and so on) - check your versions, libraries, and game binary files.

  • Outdated or bugged addon - Update or remove the addon

  • Missing or revoked GSLT - Update your GSLT

  • Corrupted game server files - run ./gameserver validate

  • File version incompatibility - run ./gameserver validate

If it happens after a while:

  • A bug from the game server or an addon - Check your console logs, see if you can reproduce, and diagnose your addons

  • Unstable hardware - very unlikely, check your system stability

  • Ulimit issue: Your system cannot open as many files as it should - See ulimit info from this page

How do I change the LinuxGSM branch?

To change the LinuxGSM branch from the default master edit the LinuxGSM executable file.

either linuxgsm.sh or gameserver e.g csgoserver

edit the following lines as required.

## GitHub Branch Select
# Allows for the use of different function files
# from a different repo and/or branch.
githubuser="GameServerManagers"
githubrepo="LinuxGSM"
githubbranch="master"

Once the details are changed update LinuxGSM.

./gameserver update-lgsm

distro

Picking a distro to run a game server is a personal choice and different admins have different preferences. There is no correct answer to which distro an individual chooses. However, there are some recommended choices when using LinuxGSM.

LinuxGSM developers primarily use Ubuntu for development and attempt to support the ones listed below. While LinuxGSM developers will attempt to support other distros there is no guarantee everything will work as expected, but should an issue occur, submitting GitHub issues is welcome.

Debian Based Distributions

Ubuntu

Reasons to use Ubuntu with LinuxGSM:

  1. Stability and Reliability: Ubuntu is a free and open-source Linux distribution based on Debian. It is renowned for its stability and reliability, making it an excellent choice for hosting game servers. Ubuntu's LTS (Long-Term Support) releases, which are published every two years, offer an extended support lifespan, ensuring that your server remains secure and up-to-date for an extended period.

  2. Game Developer Preference: Ubuntu has gained popularity among game developers and companies like Valve. This preference is due to Ubuntu's consistent and timely software updates, allowing game developers to work with newer libraries and tools, which is essential for developing and running modern game servers.

  3. Large and Supportive Community: With a vast user base, Ubuntu boasts an active and helpful community. This large community ensures that you can easily find solutions to issues, access guides, and receive support when setting up or troubleshooting your game server.

  4. User-Friendly Experience: Ubuntu is known for its user-friendly interface, making it an attractive choice for both experienced Linux users and newcomers. The distribution provides an intuitive environment, simplifying the server setup process for those who might be new to managing game servers.

  5. Preferred Distro for LinuxGSM Development: Ubuntu is the main choice for the development of LinuxGSM itself. Using Ubuntu ensures that you have the best compatibility and the smoothest experience when running LinuxGSM for managing your game servers.

Recommendations for Ubuntu Usage with LinuxGSM:

  1. Choose LTS Releases: It is highly recommended to use Ubuntu LTS releases for hosting game servers. LTS releases offer a longer support lifespan (typically 5 years) compared to standard releases (which have a support period of 6 months). This longer support period means fewer disruptions and security risks for your game server.

  2. Latest LTS Version: Whenever you install a game server, opt for the latest LTS release available at that time. This ensures that you have access to the latest software and updates, maximizing compatibility and security.

  3. Optional Upgrades: If your game server is currently running on an older LTS release and is functioning correctly, upgrading to a newer LTS release is optional. However, consider upgrading at an appropriate time to stay current with the latest features and security patches.

Ubuntu 22.04 LTS is recommended

Debian

Reasons to use Debian with LinuxGSM:

  1. Rock-Solid Stability: Debian is renowned for its unmatched stability and reliability. As the upstream distribution for Ubuntu, it serves as the foundation for many popular Linux distributions, including Ubuntu itself. For game servers that require a stable and consistent environment, Debian is an excellent choice.

  2. Long Release Cycle: Debian follows a predictable release cycle, with major stable releases approximately every two years. This extended cycle ensures a robust and mature platform for hosting game servers, minimizing the need for frequent system updates and reconfigurations.

  3. Backports Support: One of Debian's significant advantages is the availability of "backports." These are newer versions of software packages that can be installed on stable Debian releases. This feature allows you to access the latest software and libraries that might be required for running specific game servers and LinuxGSM.

  4. Wide Package Selection: Debian boasts a vast repository of software packages, covering a broad range of applications and tools. This extensive selection ensures that you can easily find and install the necessary dependencies and server components to run your game servers smoothly.

  5. Security Focus: Security is a top priority for Debian's development team. The distribution is known for its prompt security updates and active maintenance, making it a secure choice for hosting game servers and protecting them from potential threats.

Recommendations for Debian Usage with LinuxGSM:

  1. Stable Releases: For most game server deployments, it is recommended to use Debian's stable releases. These versions have undergone extensive testing and are well-suited for production environments.

  2. Backports for Newer Software: If your game server or LinuxGSM requires newer software versions, consider using the backports repository. This way, you can leverage the latest software while still benefiting from Debian's overall stability.

  3. Security Updates: Regularly apply security updates to keep your Debian server secure and protected from potential vulnerabilities. Debian's robust security team ensures that security patches are promptly released and widely available.

  4. Consider System Requirements: Before choosing Debian, ensure that your game server's software and any specific tools you intend to use are compatible with the version of Debian you plan to install. Verify system requirements to ensure optimal performance.

Debian 12 "Bookworm" is recommended

Enterprise Linux Distros

LinuxGSM also works with Enterprise Linux distributions. Known for their stability and long support cycle Enterprise Linux distros are a great choice for Game Servers

CentOS

CentOS is no longer recommended for use with LinuxGSM for hosting game servers.

Rocky Linux or AlmaLinux are now the recommended alternative Enterprise Linux Distro

in the future of CentOS have occurred.

Reasons for the Change:

  1. Shift to CentOS Stream: CentOS Stream has become the rolling-release development version of RHEL, rather than a downstream clone of RHEL. This change means CentOS Stream might receive more frequent updates, which can introduce unpredictability and potential compatibility issues when managing game servers with LinuxGSM.

  2. Impact on Stability: CentOS Stream's shift towards being an upstream development platform might lead to reduced stability compared to previous CentOS versions. For hosting game servers, a stable environment is crucial to ensure consistent performance and avoid unnecessary disruptions.

Rocky Linux

Reasons to use Rocky Linux with LinuxGSM:

  1. RHEL Compatibility: Rocky Linux's binary compatibility with RHEL ensures that LinuxGSM, designed to manage game servers on Linux, will run seamlessly on Rocky Linux. This compatibility guarantees a stable environment for hosting game servers and a familiar experience for users transitioning from CentOS.

  2. Stability and Long-Term Support: Game servers require a stable and reliable operating system to ensure continuous gameplay for players. Rocky Linux's focus on stability and long-term support makes it an ideal choice for hosting game servers with LinuxGSM.

  3. Community-Driven Development: LinuxGSM benefits from being community-driven, just like Rocky Linux. This alignment in community-focused development fosters a collaborative environment, where users of both projects can actively contribute and seek support from fellow enthusiasts.

  4. Transparent Security Updates: Regular security updates and patches in Rocky Linux ensure that your game servers remain secure against potential threats. With LinuxGSM's support for automatic updates, maintaining server security becomes a smoother process.

Ideal Use Cases:

  • Game Server Hosting: Rocky Linux's RHEL compatibility and stability make it an excellent choice for deploying and managing game servers with LinuxGSM.

  • Continuity from CentOS: For users previously running game servers on CentOS with LinuxGSM, transitioning to Rocky Linux ensures a familiar and stable environment.

AlmaLinux

Reasons to use AlmaLinux with LinuxGSM:

  1. RHEL Compatibility: AlmaLinux is direct binary compatibility with RHEL ensures that LinuxGSM will run seamlessly on AlmaLinux, providing a stable platform for hosting game servers.

  2. Community-Driven Development: LinuxGSM benefits from being community-driven, just like Rocky Linux. This alignment in community-focused development fosters a collaborative environment, where users of both projects can actively contribute and seek support from fellow enthusiasts.

  3. Long-Term Support and Stability: Game servers require consistent performance and long-term support to avoid disruptions. AlmaLinux's commitment to stability and long-term support aligns with the requirements of managing game servers using LinuxGSM.

  4. Security Emphasis: AlmaLinux prioritizes security, providing timely updates and patches. When combined with LinuxGSM's capabilities for automated updates, you can maintain a secure gaming environment effortlessly.

Ideal Use Cases:

  • CentOS Replacement: For users transitioning from CentOS to AlmaLinux for hosting game servers with LinuxGSM, the distribution's RHEL compatibility ensures continuity and stability.

  • Enterprise Game Server Deployments: AlmaLinux's enterprise-grade stability and long-term support make it well-suited for hosting game servers in professional gaming environments.

EPEL

LinuxGSM uses packages that are not available by default in CentOS because of this the EPEL (Extra Packages for Enterprise Linux) repository is required to install all dependencies. EPEL is a repository managed by the Fedora project to add extra packages to RHEL/CentOS.

EPEL is required to run LinuxGSM

Logo

Counter-Strike: Global Offensive

Server Resources

Official Server Resources

  • CS:GO Dedicated server Wiki

  • CS:GO Server Workshop setup Wiki

  • CS:GO Server Known Issues Wiki

  • CS:GO Game Modes

Game Modes

CS:GO features various game modes, which can be played on your server. To make setting up your server a bit easier, the following table sums up the configuration required in your server's LinuxGSM config for the various game modes. If you want more detailed and up-to-date information, take a look at Valve's wiki: CS:GO Game Modes. Up-to-date information about mapgroups can be found in the file serverfiles/csgo/gamemodes.txt.

[Game Modes]
gametype
gamemode
gamemodeflags
skirmishid
mapgroup (you can mix these across all Game Modes except Danger Zone, but use only one)

Arms Race

1

0

0

0

mg_armsrace

Boom! Headshot!

1

2

0

6

mg_skirmish_headshots

Classic Casual

0

0

0

0

mg_casualsigma, mg_casualdelta

Classic Competitive (Default)

0

1

0

0

mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...

Classic Competitive (Short Match)

0

1

32

0

mg_active, mg_reserves, mg_hostage, mg_de_dust2, ...

Danger Zone

6

0

0

0

mg_dz_blacksite (map: dz_blacksite), mg_dz_sirocco (map: dz_sirocco)

Deathmatch (Default)

1

2

0

0

mg_deathmatch

Deathmatch (Free For All)

1

2

32

0

mg_deathmatch

Deathmatch (Team vs Team)

1

2

4

0

mg_deathmatch

Demolition

1

1

0

0

mg_demolition

Flying Scoutsman

0

0

0

3

mg_skirmish_flyingscoutsman

Hunter-Gatherers

1

2

0

7

mg_skirmish_huntergatherers

Retakes

0

0

0

12

mg_skirmish_retakes

Stab Stab Zap

0

0

0

1

mg_skirmish_stabstabzap

Trigger Discipline

0

0

0

4

mg_skirmish_triggerdiscipline

Wingman

0

2

0

0

mg_de_prime, mg_de_blagai, mg_de_vertigo, mg_de_inferno, mg_de_overpass, mg_de_cbble, mg_de_train, mg_de_shortnuke, mg_de_shortdust, mg_de_lake

When adjusting the mapgroup, don't forget to also set defaultmap to a map contained in the same mapgroup.

If players are respawning in random locations on custom maps, set mp_randomspawn to 0.

If players are being banned for dying too much, such as on minigames maps, as a workaround set mp_autokick to 0. Warning, this disables AFK and Teamkilling kicks as well.

Server Guides

Install Sourcemod on CS:GO Server

Setting for a 128 Tick Server

Add to the following to the config lgsm/config-lgsm/csgoserver/csgoserver.cfg :

tickrate="128"

AS well it is needed to add a few options to the game config (default in: serverfiles/csgo/cfg/csgoserver.cfg )

sv_mincmdrate 128
sv_minupdaterate 128

This will as well force the client to use the 128 tickrate

Workshop

For CSGO, edit these lines in your LinuxGSM config

wsapikey="YOUR_STEAM_API_KEY"
wscollectionid="YOUR_COLLECTION_ID"
wsstartmap="

Version

Code name

Release date

Supported until

20.04 LTS

Focal Fossa

2020-04-23

2025-04

22.04 LTS

Jammy Jellyfish

2022-04-21

2027-04

Version

Status

Code name

Release date

Security support until

LTS until

10

oldoldstable

Buster

6 July 2019

2022

2024

11

oldstable

Bullseye

14 August 2021

12

stable

Bookworm

10 June 2023

CentOS version

Release date

Full updates

Maintenance updates

7

2014-07-07

2020-08-06

30 June 2024

8

2019-09-24

2021-12-31

Stream 8

2019-09-24

2024-05-31

Stream 9

2021-12-03

2027-05-31

https://en.wikipedia.org/wiki/Ubuntu#Releases
https://en.wikipedia.org/wiki/Debian_version_history
https://en.wikipedia.org/wiki/Debian_version_history#Release_table
Significant changes

Error Codes

Common

SteamCMD

SteamCMD can sometimes output errors when something goes wrong. Sadly, Valve has never released an official list of what the error messages mean. Because of this, a lot of guesswork has been needed to figure it out. This page will highlight what we already know and info on researching what the error might mean in the hope that you can contribute to understanding SteamCMD errors.

SteamCMD uses hexadecimal numbers to give its current "state". Every time SteamCMD does something, it changes its state. When SteamCMD fails, it will output its hexadecimal state, for example 0x202.

Codes

Error 0x10E

Seems to affect HLDS based servers. Running again often fixes the issue.

Error! App '90' state is 0x10E after update job.

Reason

Error! App '90' state is 0x10E after update job.

Hex

0x10E

Decimal/StateFlags

270

6KB
content_log_0x10E.txt

Error 0x202

Not enough disk space.

Error! App '<appid_number>' state is 0x202 after update job.

Reason

Not enough disk quota

Hex

0x202

Decimal/StateFlags

514

2KB
content_log_0x202.txt

Error 0x206

Unknown error, if you have any details please let us know

Error! App '<appid_number>' state is 0x206 after update job.

Reason

Hex

0x206

Decimal/StateFlags

518

Missing content_log.txt if you have experienced this error and have a log please let us know.

Error 0x212

Not enough disk space.

Error! App '<appid_number>' state is 0x212 after update job.

​Title

​Title

Reason

​Not enough disk space

Hex

0x212

Decimal/StateFlags

530

4KB
content_log_0x212.txt

Error 0x402

Connection issue with steam, you will need to wait for the steam servers to recover.

Error! State is 0x402 after update job.

Reason

Connection issue

Hex

0x402

Decimal/StateFlags

1026

Missing content_log.txt if you have experienced this error and have a log please let us know.

Error 0x602

Unknown error, if you have any details please let us know

Error! State is 0x602 after update job.

Reason

Hex

0x602

Decimal/StateFlags

1538

3KB
content_log_0x602.txt

Error 0x606

SteamCMD is unable to write to the disk. Normally caused by permissions issues. This issue was discovered when a directory that was linked using symlink did not have the correct permissions to allow SteamCMD to write to it.

Error! App '<appid_number>' state is 0x606 after update job.

Reason

Disk write failure

Hex

0x606

Decimal/StateFlags

1542

2KB
content_log_0x606.txt

Error 0x626

Missing update files

Error! App '232250' state is 0x626 after update job.

Reason

Missing update files

Hex

0x626

Decimal/StateFlags

6KB
content_log_0x626.txt

Error 0x6A6

Corrupt update files.

Error! App '317670' state is 0x6A6 after update job.

Reason

Corrupt update files

Hex

0x6a6

Decimal/StateFlags

12KB
content_log_0x6a6.txt

Error 0x2

Error! App '<appid_number>' state is is 0x2 after update job.

Reason

Hex

0x2

Decimal/StateFlags

2

Missing content_log.txt if you have it please let us know.

Error 0x6

No connection to content servers.

Error! App '<appid_number>' state is 0x6 after update job.

Reason

No connection to content servers

Reason 2

Received 401 (Unauthorized) HTTP response for depot 11

Hex

0x6

Decimal/StateFlags

6

2KB
content_log_0x6.txt
52KB
content_log_0x6-2.txt

0x3

Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)

0x5

Update state (0x5) validating, progress: 13.48 (1554089956 / 11530459441)

0x11

Update state (0x11) preallocating, progress: 8.53 (983870089 / 11530459441)

0x61

Update state (0x61) downloading, progress: 1.11 (127644881 / 11530459441)

0x101

 Update state (0x101) committing, progress: 3.43 (395043827 / 11530459441)

SteamCMD Logs

To get more info and output see the SteamCMD logs in ~/.local/share/Steam/logsor ~/.steam/logs. The most useful log is content_log.txt that will provide more information on errors.

If you have experienced an error we don't have logs for please provide them to us to assist in diagnosing the issue.

SteamCMD Hex Codes

SteamCMD uses hex error codes such as 0x202 which can be converted into decimal 514. You can use a hex-to-decimal converter to do this. Using the table below you can work out the status messages. By doing a calculation. Find the highest number below the state 512 which is the first error. Then take the number away from the total 514-512=2 which gives you the last error. This can be done for any error

514-512-2=0

512 StateUpdateRunning , 2 StateUpdateRequired

StateInvalid

0

StateUninstalled

1

StateUpdateRequired

2

StateFullyInstalled

4

StateEncrypted

8

StateLocked

16

StateFilesMissing

32

StateAppRunning

64

StateFilesCorrupt

128

StateUpdateRunning

256

StateUpdateRunning

512

StateUpdateStarted

1024

StateUninstalling

2048

StateBackupRunning

4096

StateReconfiguring

65536

StateValidating

131072

StateAddingFiles

262144

StatePreallocating

524288

StateDownloading

1048576

StateStaging

2097152

StateCommitting

4194304

StateUpdateStopping

8388608

This table is from 2015 and is probably outdated now but it's the best we currently have.

ulimit SteamCMD startup error

./steamcmd.sh: line 17: ulimit: open files: cannot modify limit: Operation not permitted

Some users may get a ulimit error (no permission/cannot open file) while SteamCMD is starting up. This error caused by a low setting of the -n parameter (number of file descriptors) of ulimit. Some servers forbid increasing ulimit values after startup (or beyond a limit set by root). This can be fixed by changing the file descriptor number ulimit:

ulimit -n 2048

ERROR! Failed to install app '<appid_number>' (No subscription)

The Steam account being used does not have a license for the required game.

ERROR! Password check for AppId <appid_number> returned error Failure.

The password for the branch is incorrect.

[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.

Ignore the error, do not do anything to attempt to fix it. It is a known error that has appeared ever since SteamPipe was introduced. It does not cause any issues and can be ignored.

Loading Steam API...Failed to init SDL priority manager: SDL not found

Ignore the error, do not do anything to attempt to fix it. It does not cause any issues and can be ignored.

CWorkThreadPool::~CWorkThreadPool: work processing queue not empty: 2 items discarded.

Ignore the error, do not do anything to attempt to fix it. It does not cause any issues and can be ignored.

Failed to set thread priority: per-thread setup failed

Ignore the error, do not do anything to attempt to fix it. It does not cause any issues and can be ignored.

ARK: Survival Evolved

Server Resources

  • Official Dedicated Server Guide

  • Official Dedicated Server Configuration

  • Steam Workshop

  • Official ARK: Survival Evolved Server Administration forum

System Requirements

Different Maps require different system requirements.

  • TheIsland: 7GB RAM

  • Genesis 2: 12GB RAM

Config Files

An example of GameUserSettings.ini can be found here.

serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
serverfiles/ShooterGame/Saved/Config/LinuxServer/Game.ini

Server Settings

Command line parameters take precedence over configuration files.

Common Command-Line Parameters

Below is a list of common Command-Line parameters. For a complete list see the Ark Wiki.

Parameter
Description

SessionName

-MultiHome

Enables multihoming.

-Port

-QueryPort

-AutoManagedMods

Steam only, automatic MOD download/installation/updating. Mod IDs are listed in Game.ini under [ModInstaller] section.

-CrossPlay

Enables crossplay (i.e.: EPIC and Steam) on dedicated server. Note: PublicIPForEpic must also be set.

-PublicIPForEpic=<IPAddress>

This is the public IP that EGS clients will attempt to connect to, if this option is missing and -MULTIHOME is specified, then EGS clients will attempt to connect to the multihome IP; note that if you're using multihome and specify a non-public IP address, then players will not be able to connect to your server using EGS. Make sure to set a public IP address (e.g.: WAN or external).

-NoBattlEye

Run server without BattleEye.

-ActiveEvent=

Enables a specified event or enables the event's colour palette on wild creatures. Only one can be specified and active at a time.

?AltSaveDirectoryName=<savedir_name>

Allows to specify a custom directory name for server world-save. Usually used to manage clusters, read more about it in the section.

-insecure

Disable Valve Anti-Cheat (VAC) system.

-MapModID=

Dedicated servers can now optionally load custom maps via ModID directly, rather than having to specify the map name, using this syntax (where the MapModID is the Steam Workshop ID of your custom map, and the GameModIds are the Id’s of the stacked mods you wish to use, in order). ActiveMods must also be set in .

?GameModIds=[,[...]]

Steam only. Specifies the order and which mods are loaded, ModIDs need to be separated with commas (,). Mod priority is in descending order left to right (the left-most ID is the top priority mod). It is suggested to use instead the ActiveMods under [ServerSettings] of GameUserSettings.ini.

Common Configuration File Settings

Below is a list of common Configuration settings. For a complete list see the Ark Wiki.

The following options must come under the [ServerSettings] section of GameUserSettings.ini:

Variable
Description

ActiveMods=ModID1,ModID2,ModID3

Value type: list of mod IDs, comma-separated with no spaces, in a single line (for example: ModID1,ModID2,ModID3)

BanListURL="http://arkdedicated.com/banlist.txt"

Value type: string with a URL Sets the global ban list. Must be enclosed in double-quotes.

RCONEnabled=True

f True, enables RCON, needs RCONPort=<TCP_PORT> and ServerAdminPassword=<admin_password> to work

RCONPort=27020

Specifies the optional TCP RCON Port.

ServerAdminPassword=

If specified, players must provide this password (via the in-game console) to gain access to administrator commands on the server.

ServerPassword=

If specified, players must provide this password to join the server.

serverPVE=

If True, disables and enables

The following options must come under the [SessionSettings] section of GameUserSettings.ini.

Variable
Description

SessionName

Specifies the Server name advertised in the Game Server Browser as well in Steam Server browser. If no name is provide, the default name will be ARK # followed by a random 6 digit number

The following options must come under the [/Script/Engine.GameSession] section of GameUserSettings.ini.

Variable
Description

MaxPlayers=70

Specifies the maximum number of players that can play on the server simultaneously.

The section [ModInstaller] handles each extra Steam Workshop Mods/Maps/TC IDs in the Game.ini.

Variable
Description

ModIDS=<integer>

Specifies a single Steam Workshop Mods/Maps/TC ID to download/install/update on the server. To handle multiple IDs, multiple lines must be added with the same syntax, each one with the specific workshop ID. Requires -automanagedmods in the command line.

Alt Saved Directory Name

altsavedirectoryname=

The altsavedirectoryname is the location where the game save will be stored. By default, this is the current map name. However, this setting can be customised if desired.

Be careful not to accidentally overwrite a save file if changing maps or using a custom save location.

If altsaveddirectoryname is TheIsland the save is located will be:

ShooterGame/Saved/TheIsland

Official Map Names

  • TheIsland

  • TheCenter

  • ScorchedEarth_P

  • Ragnarok

  • Aberration_P

  • Extinction

  • Valguero_P

  • Genesis

  • CrystalIsles

  • Gen2

  • LostIsland

  • Fjordur

  • PGARK

Mod Support

ARK server mods are managed using the Steam Workshop, this allows the auto-install and update of mods.

Adding Mods

Firstly, you need to select the mods you want to use from the Steam Workshop.

Mods can cause your server to become unstable or may not be compatible with each other. It is a good idea to read the mods docs and/or speak with other experienced ARK admins.

Here is a simple mod to get started:

  • Editable Server UI (WBUI) Open Source - 924619115

-AutoManagedMods is the required parameter to add workshop support and is added to the start parameters by default.

Edit GameUserSettings.ini, adding the following line under [ServerSettings]. To add multiple mods use a comma delimiter e.g ActiveMods=924619115,924619652.

[ServerSettings]
ActiveMods=924619115

Next, edit or create Game.ini and add the following section, this will enable the auto-download of mods. To add multiple mods add another ModIDS= line underneath the first.

[ModInstaller]
ModIDS=924619115

For the example mod add the following to GameUserSettings.ini other mods may require their own configuration as per their documentation.

[WBUI]
Icon=1
OpenBtn=0
HideBuff=true
HideAfter=60
TribeTab=true
OpenOnStart=true
OnlyNewPlayers=true
UseJson=false
JsonURL="https://dl.dropboxusercontent.com/s/6rhwbq95wwm5gkd/UI.json"
UpdateInterval=24

For more config options for WBUI see this link.

Start the server and the mods will be automatically downloaded by the server. To check that this has worked open the console ./arkserver console. In the console, you will see a message similar to the following.

Large mods may take several minutes to download to the server.

Using binned.
4.5.1-0+UE4 7038 3077 404 10
[S_API FAIL] SteamAPI_Init() failed; SteamAPI_IsSteamRunning() failed.
Setting breakpad minidump AppID = 346110
Redirecting stderr to '/home/lgsm/.steam/logs/stderr.txt'
[  0%] Checking for available updates...
[----] Verifying installation...
Steam Console Client (c) Valve Corporation
-- type 'quit' to exit --
Loading Steam API...Failed to init SDL priority manager: SDL not found
Failed to set thread priority: per-thread setup failed
Failed to set thread priority: per-thread setup failed
OK.

Connecting anonymously to Steam Public...Loaded client id: 13529975768029855698
Listening for IPv4 broadcast on: 27036
Logged in OK
Waiting for user info...OK
Downloading item 679529026 ...
Success. Downloaded item 679529026 to "/home/lgsm/.steam/SteamApps/workshop/content/346110/679529026" (1365998905 bytes)

If you join before the server or your client has fully downloaded the mod you might get a Mod Version Mismatch error. Simply, give the server more time to load the mods.

Once you have connected to the server you will be able to see that the mod has loaded by seeing the Mod Name in the game menu Esc.

The example mod can be activated by pressing F1.

Mod Collections

The Steam Workshop has a feature that allows mods to be grouped in collections. Currently, Steam workshop collection IDs won't work directly with ARK. Instead, you need to have all the individual IDs of the mods you want to use.

To get individual item IDs from collections you can use the Steam Collection ID Grabber.

IP Addressing

Multihome

The -MultiHome parameter is used to bind the server to a specific interface. By default, LinxuGSM sets this to the ${ip} variable.

PublicIPForEpic

If you want players who use the Epic Store to connect to the server the -PublicIPForEpic parameter. By default, LinuxGSM will set this to the ${publicip} variable.

Multi-Instance

ARK can work with LinuxGSM multi instances in the same install. However, each instance will use the same GameUserSettings.ini. To customise each server use command-line parameters as they take precedence over the configs.

CrossARK (Clusters)

A CrossARK cluster allows players to transfer a survivor, items, and tames ("objects") from one ARK to another ARK. A server admin can group all their ARK servers together in a cluster. Typically a server admin will cluster servers with different maps. There are a few different ways to configure CrossARK depending upon your configuration.

Cluster ID

The cluster ID is the global name of the cluster. Each instance that will be attached to the cluster must have the same cluster ID. Use -ClusterId=<CLUSTER NAME>to specify the cluster ID.

Cluster Directory

Each server instance must be able to access the cluster directory. The cluster directory is a shared location that allows survivor and other data to be shared between server instances.

By default the cluster directory is ShooterGame/Saved/clusters/<CLUSTER NAME>. Depending upon your configuration it may be required that instances need to be pointed to a specific shared directory. To do this use add the-ClusterDirOverride=<PATH> parameter with the directory location.

The shared directory can be any preferred location however each instance must be able to read and write to that directory.

Game Server Instance locations

It is possible to set up clusters between game server instances in the same installation directory, separate installation directory, or even separate physical servers as long as all instances can access the cluster directory.

Using multiple physical servers will require the use and configuration of a file-sharing or syncing software such as SAMBA, Syncthing, or rsync.

Adding Servers to Clusters

Firstly, set up multiple ARK game server instances.

In the below example, 2 servers will be clustered together in the same instance. For CrossARK to work each instance must have the same cluster id and share the same cluster directory.

If you have multiple separate installations of ARK use -ClusterDirOverride to point each installation to the same cluster directory.

Change the command-line parameters for your server instances by editing the instance configs.

Server 1 (arkserver.cfg)

port="7777"
queryport="27015"
rconport="27020"
defaultmap="TheIsland"
${defaultmap}?SessionName=LinuxGSM-Server-1?AltSaveDirectoryName=${altsavedirectoryname}?RCONPort=${rconport} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -AutoManagedMods -Crossplay -PublicIPForEpic=${publicip} -ClusterId=hsqCd8MR65VFRFdPcDjw

Server 2 (arkserver-2.cfg)

port="7778"
queryport="27016"
rconport="27021"
defaultmap="Ragnarok"
${defaultmap}?SessionName=LinuxGSM-Server-2?AltSaveDirectoryName=${altsavedirectoryname}?RCONPort=${rconport} -MultiHome=${ip} -Port=${port} -QueryPort=${queryport} -AutoManagedMods -Crossplay -PublicIPForEpic=${publicip} -ClusterId=hsqCd8MR65VFRFdPcDjw

Once both server instances have been started check that the cluster directory has been created in ShooterGame/Saved/clusters/hsqCd8MR65VFRFdPcDjw.

This may require you to connect to an instance first

Servers that are running on local networks sometimes have trouble traveling to other arks. A potential fix for this is adding MultiHome=0.0.0.0 to your command-line parameters.

Cross-ARK Data Transfer
GameUserSettings.ini
PvP
PvE
Logo

Rust

System requirements

  • Minimum RAM: 9GB, Increases depending upon map size

  • CPU: Dual-core 3.4GHz

  • Bandwidth: 10mbps upload

Useful Links

General Information

https://developer.valvesoftware.com/wiki/Rust_Dedicated_Server

RustAdmin

Server RCON administration tool https://www.rustadmin.com/

Online Rcon tool by Facepunch

https://facepunch.github.io/webrcon/

Wipe

A server wipe is used to reset a Rust server by deleting certain types of data about the map and players.

A wipe will keep the Rust+ data intact.

Map Wipe

A map wipe will remove all the player-made buildings and resources. Resetting the map back to its original state. However, a player's blueprints will be retained.

./rustserver map-wipe

Full Wipe

A full wipe will remove all the player-made buildings, resources and all player's blueprints.

./rustserver full-wipe

Automated Wipe

Using cron it is possible to automate your server wipes. The below example will wipe the server every Sunday night at midnight.

0 0 * * 0 /home/rustserver/rustserver map-wipe > /dev/null 2>&1

Random Seed

If the Rust server is using the Procedural Map and a seed is not set in the config when the wipe commands will set a new random seed.

seed=""

Install Oxide

Oxide is an API allowing you to run mods for your Rust server.

LinuxGSM now handles the install of Oxide for Rust, with mods-install and mods-update commands.

./rustserver mods-install

If a Rust update has been released, then an Oxide update will soon follow. To update Oxide, you can then run:

./rustserver mods-update

Install Oxide addons

To install Oxide addons place them into the serverfiles/oxide/plugins directory. This will cause them to load automatically when starting the server.

If you need to edit any addon configs, they will be located in serverfiles/oxide/config.

To update an addon without restarting the server, you'll need to reload the addon with an RCON command.

oxide.reload PluginName

RCON

Send RCON commands:

RCON is the protocol used to send commands to your server. You will need a tool to use it. Here are 3 of them:

  • Rusty: http://oxidemod.org/resources/rusty-server-rcon-administration-tool.53/

  • Rustadmin: https://www.rustadmin.com/ (supports both rconweb=1 and rconweb=0)

  • Facepunch web tool: http://facepunch.github.io/webrcon/#/home

To use software like Rusty, you need to alter LinuxGSM config and change rconweb="0". To use Facepunch tool, Rustadmin desktop or Rustadmin Online, you can leave it at default rconweb="1"

Note: Facepunch web tool currently don't accept domain names, you need to enter server IP.

Essential RCON Commands

save ; will save the server state (useful before a stop or restart)
oxide.reload PluginName ; will reload a plugin after updating it
ownerid STEAMID64 "Nickname" "Reason" ; to add an owner
moderatorid STEAMID64 "Nickname" "Reason" ; to add a moderator
server.writecfg ; will save config changes, including new admins

Note: append server.writecfg after adding an admin, and player needs to reconnect the server in order for it to be applied.

Rust Settings

Below is a complete list of all Rust server settings.

A complete list can be gathered by typing find . into Rust Rcon

Last updated: 19/11/23

Variables

aibrainsenses.humanknownplayerslosupdateinterval  (0.2)
aibrainsenses.knownplayerslosupdateinterval  (0.5)
aibrainsenses.updateinterval  (0.5)
aithinkmanager.animalframebudgetms  (2.5)
aithinkmanager.framebudgetms  (2.5)
aithinkmanager.petframebudgetms  (1)
autoturret.auto_turret_budget_ms How many milliseconds to spend on target scanning per frame (0.5)
baseboat.do_shore_drift   (True)
baseboat.drift_speed      (1)
baseboat.generate_paths   (True)
basefirework.maxactivefireworks  (25)
basefishingrod.forcefail  (False)
basefishingrod.forcesuccess  (False)
basefishingrod.immediatehook  (False)
basemission.missionsenabled  (True)
basenavigator.basenavmovementframeinterval How many frames between base navigation movement updates (2)
basenavigator.maxstepupdistance The max step-up height difference for pet base navigation (1.7)
basenavigator.navtypedistance  (1)
basenavigator.navtypeheightoffset  (0.5)
basenavigator.stucktriggerduration How long we are not moving for before trigger the stuck event (10)
basepet.movementupdatebudgetms  (1)
basepet.onlyqueuebasenavmovements  (True)
basepet.queuedmovementsallowed  (True)
baseplayer.lifestoryframebudgetms  (0.25)
baseridableanimal.decayminutes How long before a horse dies unattended (180)
baseridableanimal.dungtimescale  (1)
baseridableanimal.framebudgetms  (1)
basesubmarine.deepwaterdecayminutes How long before a submarine loses all its health while in deep water (120)
basesubmarine.outsidedecayminutes How long before a submarine loses all its health while outside. If it's in deep water, deepwaterdecayminutes is used (180)
basesubmarine.oxygenminutes How long a submarine can stay underwater until players start taking damage from low oxygen (10)
bear.population          Population active on the server, per square km (2)
bigwheelgame.spinfrequencyseconds  (45)
blackjackmachine.maxbet  Maximum initial bet per round (500)
boar.population          Population active on the server, per square km (5)
boombox.backtracklength   (30)
boombox.serverurllist    A list of radio stations that are valid on this server. Format: NAME,URL,NAME,URL,etc ()
cargoship.egress_duration_minutes  (10)
cargoship.event_duration_minutes  (50)
cargoship.event_enabled   (True)
cargoship.loot_round_spacing_minutes  (10)
cargoship.loot_rounds     (3)
cassette.maxcassettefilesizemb  (5)
chicken.population       Population active on the server, per square km (3)
cinematicentity.hideobjects Hides cinematic light source meshes (keeps lights visible) (False)
clothlod.clothloddist    distance cloth will simulate until (20)
codelock.lockoutcooldown  (900)
codelock.maxfailedattempts  (8)
camerarenderer.completionframebudgetms  (5)
camerarenderer.enabled    (True)
camerarenderer.entitymaxage  (5)
camerarenderer.entitymaxdistance  (100)
camerarenderer.farplane   (250)
camerarenderer.height     (90)
camerarenderer.layermask  (1218656529)
camerarenderer.maxraysperframe  (100000)
camerarenderer.maxrendersperframe  (25)
camerarenderer.nearplane  (0)
camerarenderer.playermaxdistance  (30)
camerarenderer.playernamemaxdistance  (10)
camerarenderer.renderinterval  (0.05)
camerarenderer.samplesperrender  (3000)
camerarenderer.verticalfov  (65)
camerarenderer.width      (160)
global.allowadminui      Controls whether the in-game admin UI is displayed to admins (True)
ai.accuratevisiondistance  (True)
ai.allowdesigning         (True)
ai.animal_ignore_food    If animal_ignore_food is true, animals will not sense food sources or interact with them (server optimization). (default: true) (True)
ai.frametime              (5)
ai.groups                 (True)
ai.ignoreplayers          (False)
ai.move                   (True)
ai.nav_carve_height      The height of the carve volume. (default: 2) (2)
ai.nav_carve_min_base_size The minimum size we allow a carving volume to be. (default: 2) (2)
ai.nav_carve_min_building_blocks_to_apply_optimization The minimum number of building blocks a building needs to consist of for this optimization to be applied. (default: 25) (25)
ai.nav_carve_size_multiplier The size multiplier applied to the size of the carve volume. The smaller the value, the tighter the skirt around foundation edges, but too small and animals can attack through walls. (default: 4) (4)
ai.nav_carve_use_building_optimization If nav_carve_use_building_optimization is true, we attempt to reduce the amount of navmesh carves for a building. (default: false) (False)
ai.navthink               (True)
ai.npc_alertness_drain_rate npc_alertness_drain_rate define the rate at which we drain the alertness level of an NPC when there are no enemies in sight. (Default: 0.01) (0.01)
ai.npc_alertness_to_aim_modifier This is multiplied with the current alertness (0-10) to decide how long it will take for the NPC to deliberately miss again. (default: 0.33) (0.5)
ai.npc_alertness_zero_detection_mod npc_alertness_zero_detection_mod define the threshold of visibility required to detect an enemy when alertness is zero. (Default: 0.5) (0.5)
ai.npc_cover_compromised_cooldown npc_cover_compromised_cooldown defines how long a cover point is marked as compromised before it's cleared again for selection. (default: 10) (10)
ai.npc_cover_info_tick_rate_multiplier The rate at which we gather information about available cover points. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 20) (20)
ai.npc_cover_path_vs_straight_dist_max_diff npc_cover_path_vs_straight_dist_max_diff defines what the maximum difference between straight-line distance and path distance can be when evaluating cover points. (default: 2) (2)
ai.npc_cover_use_path_distance If npc_cover_use_path_distance is set to true then npcs will look at the distance between the cover point and their target using the path between the two, rather than the straight-line distance. (True)
ai.npc_deliberate_hit_randomizer The percentage away from a maximum miss the randomizer is allowed to travel when shooting to deliberately hit the target (we don't want perfect hits with every shot). (default: 0.85f) (0.85)
ai.npc_deliberate_miss_offset_multiplier The offset with which the NPC will maximum miss the target. (default: 1.25) (1.25)
ai.npc_deliberate_miss_to_hit_alignment_time The time it takes for the NPC to deliberately miss to the time the NPC tries to hit its target. (default: 1.5) (1.5)
ai.npc_door_trigger_size npc_door_trigger_size defines the size of the trigger box on doors that opens the door as npcs walk close to it (default: 1.5) (1.5)
ai.npc_enable            If npc_enable is set to false then npcs won't spawn. (default: true) (True)
ai.npc_families_no_hurt  If npc_families_no_hurt is true, npcs of the same family won't be able to hurt each other. (default: true) (True)
ai.npc_gun_noise_silencer_modifier The modifier by which a silencer reduce the noise that a gun makes when shot. (Default: 0.15) (0.15)
ai.npc_htn_player_base_damage_modifier Baseline damage modifier for the new HTN Player NPCs to nerf their damage compared to the old NPCs. (default: 1.15f) (1.15)
ai.npc_htn_player_frustration_threshold npc_htn_player_frustration_threshold defines where the frustration threshold for NPCs go, where they have the opportunity to change to a more aggressive tactic. (default: 3) (3)
ai.npc_ignore_chairs     If npc_ignore_chairs is true, npcs won't care about seeking out and sitting in chairs. (default: true) (True)
ai.npc_junkpile_a_spawn_chance npc_junkpile_a_spawn_chance define the chance for scientists to spawn at junkpile a. (Default: 0.1) (0.1)
ai.npc_junkpile_dist_aggro_gate npc_junkpile_dist_aggro_gate define at what range (or closer) a junkpile scientist will get aggressive. (Default: 8) (8)
ai.npc_junkpile_g_spawn_chance npc_junkpile_g_spawn_chance define the chance for scientists to spawn at junkpile g. (Default: 0.1) (0.1)
ai.npc_junkpilespawn_chance defines the chance for scientists to spawn at NPC junkpiles. (Default: 0.1) (0.07)
ai.npc_max_junkpile_count npc_max_junkpile_count define how many npcs can spawn into the world at junkpiles at the same time (does not include monuments) (Default: 30) (30)
ai.npc_max_population_military_tunnels npc_max_population_military_tunnels defines the size of the npc population at military tunnels. (default: 3) (3)
ai.npc_max_roam_multiplier This is multiplied with the max roam range stat of an NPC to determine how far from its spawn point the NPC is allowed to roam. (default: 3) (3)
ai.npc_only_hurt_active_target_in_safezone If npc_only_hurt_active_target_in_safezone is true, npcs won't any player other than their actively targeted player when in a safe zone. (default: true) (True)
ai.npc_patrol_point_cooldown npc_patrol_point_cooldown defines the cooldown time on a patrol point until it's available again (default: 5) (5)
ai.npc_reasoning_system_tick_rate_multiplier The rate at which we tick the reasoning system. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 1) (1)
ai.npc_respawn_delay_max_military_tunnels npc_respawn_delay_max_military_tunnels defines the maximum delay between spawn ticks at military tunnels. (default: 1920) (1920)
ai.npc_respawn_delay_min_military_tunnels npc_respawn_delay_min_military_tunnels defines the minimum delay between spawn ticks at military tunnels. (default: 480) (480)
ai.npc_sensory_system_tick_rate_multiplier The rate at which we tick the sensory system. Minimum value is 1, as it multiplies with the tick-rate of the fixed AI tick rate of 0.1 (Default: 5) (5)
ai.npc_spawn_on_cargo_ship Spawn NPCs on the Cargo Ship. (default: true) (True)
ai.npc_spawn_per_tick_max_military_tunnels npc_spawn_per_tick_max_military_tunnels defines how many can maximum spawn at once at military tunnels. (default: 1) (1)
ai.npc_spawn_per_tick_min_military_tunnels npc_spawn_per_tick_min_military_tunnels defineshow many will minimum spawn at once at military tunnels. (default: 1) (1)
ai.npc_speed_crouch_run  npc_speed_crouch_run define the speed of an npc when in the crouched run state, and should be a number between 0 and 1. (Default: 0.25) (0.25)
ai.npc_speed_crouch_walk npc_speed_walk define the speed of an npc when in the crouched walk state, and should be a number between 0 and 1. (Default: 0.1) (0.1)
ai.npc_speed_run         npc_speed_walk define the speed of an npc when in the run state, and should be a number between 0 and 1. (Default: 0.4) (0.4)
ai.npc_speed_sprint      npc_speed_walk define the speed of an npc when in the sprint state, and should be a number between 0 and 1. (Default: 1.0) (1)
ai.npc_speed_walk        npc_speed_walk define the speed of an npc when in the walk state, and should be a number between 0 and 1. (Default: 0.18) (0.18)
ai.npc_use_new_aim_system If npc_use_new_aim_system is true, npcs will miss on purpose on occasion, where the old system would randomize aim cone. (default: true) (True)
ai.npc_use_thrown_weapons If npc_use_thrown_weapons is true, npcs will throw grenades, etc. This is an experimental feature. (default: true) (True)
ai.npc_valid_aim_cone    npc_valid_aim_cone defines how close their aim needs to be on target in order to fire. (default: 0.8) (0.8)
ai.npc_valid_mounted_aim_cone npc_valid_mounted_aim_cone defines how close their aim needs to be on target in order to fire while mounted. (default: 0.92) (0.92)
ai.npcswimming            (True)
ai.ocean_patrol_path_iterations  (100000)
ai.sensetime              (1)
ai.setdestinationsamplenavmesh  (True)
ai.sleepwake              (True)
ai.spliceupdates          (True)
ai.think                  (True)
ai.tickrate               (5)
ai.usecalculatepath       (True)
ai.usegrid                (True)
ai.usesetdestinationfallback  (True)
antihack.admincheat       (True)
antihack.build_inside_check  (2)
antihack.build_losradius  (0.01)
antihack.build_losradius_sleepingbag  (0.3)
antihack.build_terraincheck  (True)
antihack.build_vehiclecheck  (True)
antihack.debuglevel       (1)
antihack.enforcementlevel  (1)
antihack.eye_clientframes  (2)
antihack.eye_forgiveness  (0.5)
antihack.eye_history_forgiveness  (0.1)
antihack.eye_history_penalty  (100)
antihack.eye_losradius    (0.18)
antihack.eye_noclip_backtracking  (0.01)
antihack.eye_noclip_cutoff  (0.06)
antihack.eye_noclip_margin  (0.21)
antihack.eye_penalty      (0)
antihack.eye_protection   (4)
antihack.eye_serverframes  (2)
antihack.eye_terraincheck  (True)
antihack.eye_vehiclecheck  (True)
antihack.flyhack_extrusion  (2)
antihack.flyhack_forgiveness_horizontal  (1.5)
antihack.flyhack_forgiveness_horizontal_inertia  (10)
antihack.flyhack_forgiveness_vertical  (1.5)
antihack.flyhack_forgiveness_vertical_inertia  (10)
antihack.flyhack_margin   (0.05)
antihack.flyhack_maxsteps  (15)
antihack.flyhack_penalty  (100)
antihack.flyhack_protection  (3)
antihack.flyhack_reject   (False)
antihack.flyhack_stepsize  (0.1)
antihack.forceposition    (True)
antihack.maxdeltatime     (1)
antihack.maxdesync        (1)
antihack.maxviolation     (100)
antihack.melee_backtracking  (0.01)
antihack.melee_clientframes  (2)
antihack.melee_forgiveness  (0.5)
antihack.melee_losforgiveness  (0.2)
antihack.melee_penalty    (0)
antihack.melee_protection  (4)
antihack.melee_serverframes  (2)
antihack.melee_terraincheck  (True)
antihack.melee_vehiclecheck  (True)
antihack.modelstate       (True)
antihack.noclip_backtracking  (0.01)
antihack.noclip_margin    (0.09)
antihack.noclip_margin_dismount  (0.22)
antihack.noclip_maxsteps  (15)
antihack.noclip_penalty   (0)
antihack.noclip_protection  (3)
antihack.noclip_reject    (True)
antihack.noclip_stepsize  (0.1)
antihack.objectplacement  (True)
antihack.projectile_anglechange  (60)
antihack.projectile_backtracking  (0.01)
antihack.projectile_clientframes  (2)
antihack.projectile_damagedepth  (2)
antihack.projectile_desync  (1)
antihack.projectile_forgiveness  (0.5)
antihack.projectile_impactspawndepth  (1)
antihack.projectile_losforgiveness  (0.2)
antihack.projectile_penalty  (0)
antihack.projectile_positionoffset  (True)
antihack.projectile_protection  (6)
antihack.projectile_serverframes  (2)
antihack.projectile_terraincheck  (True)
antihack.projectile_trajectory  (1)
antihack.projectile_vehiclecheck  (True)
antihack.projectile_velocitychange  (1.1)
antihack.relaxationpause  (10)
antihack.relaxationrate   (0.1)
antihack.reporting        (False)
antihack.speedhack_forgiveness  (2)
antihack.speedhack_forgiveness_inertia  (10)
antihack.speedhack_penalty  (0)
antihack.speedhack_protection  (2)
antihack.speedhack_reject  (True)
antihack.speedhack_slopespeed  (10)
antihack.terrain_check_geometry  (False)
antihack.terrain_kill     (True)
antihack.terrain_padding  (0.3)
antihack.terrain_penalty  (100)
antihack.terrain_protection  (1)
antihack.terrain_timeslice  (64)
antihack.tickhistoryforgiveness  (0.1)
antihack.tickhistorytime  (0.5)
antihack.userlevel        (2)
app.alarmcooldown        Cooldown time before alarms can send another notification (in seconds) (30)
app.listenip              (0.0.0.0)
app.maxconnections        (500)
app.maxconnectionsperip   (5)
app.maxmessagesize        (1048576)
app.notifications        Enables sending push notifications (True)
app.port                  (28082)
app.publicip              ()
app.queuelimit           Max number of queued messages - set to 0 to disable message processing (100)
app.serverid              (9e6eb549-17a8-429c-9df3-aa8503591776)
app.update               Disables updating entirely - emergency use only (True)
batching.verbose          (0)
bradley.enabled           (True)
bradley.respawndelayminutes  (60)
bradley.respawndelayvariance  (1)
chat.enabled              (True)
chat.globalchat           (True)
chat.historysize         Number of messages to keep in memory for chat history (1000)
chat.localchat            (False)
chat.localchatrange       (100)
chat.serverlog            (True)
clan.enabled             Enables the clan system if set to true (must be set at boot, requires restart) (False)
clan.maxmembercount      Maximum number of members each clan can have (local backend only!) (100)
construct.frameminutes    (30)
craft.instant             (False)
debug.callbacks           (False)
debug.checkparentingtriggers  (True)
debug.checktriggers       (False)
debug.debugdismounts      (False)
debug.disablecondition   Do not damage any items (False)
debug.log                 (True)
decay.bracket_0_blockcount Between 0 and this value are considered bracket 0 and will cost bracket_0_costfraction per upkeep period to maintain (15)
decay.bracket_0_costfraction blocks within bracket 0 will cost this fraction per upkeep period to maintain (0.1)
decay.bracket_1_blockcount Between bracket_0_blockcount and this value are considered bracket 1 and will cost bracket_1_costfraction per upkeep period to maintain (50)
decay.bracket_1_costfraction blocks within bracket 1 will cost this fraction per upkeep period to maintain (0.15)
decay.bracket_2_blockcount Between bracket_1_blockcount and this value are considered bracket 2 and will cost bracket_2_costfraction per upkeep period to maintain (125)
decay.bracket_2_costfraction blocks within bracket 2 will cost this fraction per upkeep period to maintain (0.2)
decay.bracket_3_blockcount Between bracket_2_blockcount and this value (and beyond) are considered bracket 3 and will cost bracket_3_costfraction per upkeep period to maintain (200)
decay.bracket_3_costfraction blocks within bracket 3 will cost this fraction per upkeep period to maintain (0.333)
decay.debug               (False)
decay.delay_metal        How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_override     When set to a value above 0 everything will decay with this delay (0)
decay.delay_stone        How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_toptier      How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_twig         How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.delay_wood         How long should this building grade decay be delayed when not protected by upkeep, in hours (0)
decay.duration_metal     How long should this building grade take to decay when not protected by upkeep, in hours (8)
decay.duration_override  When set to a value above 0 everything will decay with this duration (0)
decay.duration_stone     How long should this building grade take to decay when not protected by upkeep, in hours (5)
decay.duration_toptier   How long should this building grade take to decay when not protected by upkeep, in hours (12)
decay.duration_twig      How long should this building grade take to decay when not protected by upkeep, in hours (1)
decay.duration_wood      How long should this building grade take to decay when not protected by upkeep, in hours (3)
decay.outside_test_range Maximum distance to test to see if a structure is outside, higher values are slower but accurate for huge buildings (50)
decay.scale               (1)
decay.tick                (600)
decay.upkeep             Is upkeep enabled (True)
decay.upkeep_grief_protection How many minutes can the upkeep cost last after the cupboard was destroyed? default : 1440 (24 hours) (1440)
decay.upkeep_heal_scale  Scale at which objects heal when upkeep conditions are met, default of 1 is same rate at which they decay (1)
decay.upkeep_inside_decay_scale Scale at which objects decay when they are inside, default of 0.1 (0.1)
decay.upkeep_period_minutes How many minutes does the upkeep cost last? default : 1440 (24 hours) (1440)
demo.recordlist           ()
demo.recordlistmode      Controls the behavior of recordlist, 0=whitelist, 1=blacklist (0)
demo.splitmegabytes       (200)
demo.splitseconds         (3600)
env.day                   (13)
env.month                 (5)
env.oceanlevel            (0)
env.progresstime          (True)
env.time                  (17.29095)
env.year                  (2025)
fps.limit                 (240)
gc.enabled                (True)
gc.incremental_enabled    (True)
gc.incremental_milliseconds  (3)
global.asyncwarmup        (False)
global.cinematicgingerbreadcorpses When enabled a player wearing a gingerbread suit will gib like the gingerbread NPC's (False)
global.developer          (0)
global.disablebagdropping Disables the backpacks that appear after a corpse times out (False)
global.forceunloadbundles  (True)
global.maxspraysperplayer If a player sprays more than this, the oldest spray will be destroyed. 0 will disable (40)
global.maxthreads         (8)
global.perf               (0)
global.preloadconcurrency  (1)
global.skipassetwarmup_crashes  (False)
global.sprayduration     Base time (in seconds) that sprays last (10800)
global.sprayoutofauthmultiplier Multiplier applied to SprayDuration if a spray isn't in the sprayers auth (cannot go above 1f) (0.5)
global.warmupconcurrency  (1)
halloween.enabled         (False)
halloween.murdererpopulation Population active on the server, per square km (0)
halloween.scarecrow_beancan_vs_player_dmg_modifier Modified damage from beancan explosion vs players (Default: 0.1). (0.1)
halloween.scarecrow_body_dmg_modifier Modifier to how much damage scarecrows take to the body. (Default: 0.25) (0.25)
halloween.scarecrow_chase_stopping_distance Stopping distance for destinations set while chasing a target (Default: 0.5) (0.5)
halloween.scarecrow_throw_beancan_global_delay The delay globally on a server between each time a scarecrow throws a beancan (Default: 8 seconds). (8)
halloween.scarecrowpopulation Population active on the server, per square km (0)
halloween.scarecrows_throw_beancans Scarecrows can throw beancans (Default: true). (True)
inventory.disableattirelimitations Disables all attire limitations, so NPC clothing and invalid overlaps can be equipped (False)
net.global_network_debug Toggle printing time taken to send all trees & all global entities to client when they connect (False)
net.global_networked_bases  (True)
net.limit_global_update_broadcast (default) true = only broadcast to clients with global networking enabled, false = broadcast to every client regardless (True)
net.visdebug              (False)
net.visibilityradiusfaroverride  (-1)
net.visibilityradiusnearoverride  (-1)
nexus.clanclatbatchduration Maximum duration in seconds to batch clan chat messages to send to other servers on the nexus (1)
nexus.defaultzonecontactradius Default distance between zones to allow boat travel, if map.contactRadius isn't set in the nexus (uses normalized coordinates) (0.33)
nexus.endpoint           URL endpoint to use for the Nexus API (https://api.facepunch.com/api/nexus/)
nexus.islandspawndistance How far away islands should be spawned, as a factor of the map size (1.5)
nexus.loadingtimeout     Time in seconds to keep players in the loading state before going to sleep (900)
nexus.logging             (True)
nexus.mapimagescale      Scale of the map to render and upload to the nexus (0.5)
nexus.messagelockduration Time in seconds to allow the server to process nexus messages before re-sending (requires restart) (5)
nexus.pinginterval       Time in seconds to wait between server status pings (30)
nexus.playermanifestinterval Interval in seconds to broadcast the player manifest to other servers on the nexus (30)
nexus.protectionduration Maximum time in seconds to keep transfer protection enabled on entities (300)
nexus.rpctimeoutmultiplier Multiplier for nexus RPC timeout durations in case we expect different latencies (1)
nexus.secretkey           ()
nexus.timeoffset         Time offset in hours from the nexus clock (0)
nexus.transferflushtime  Maximum amount of time in seconds that transfers should be cached before auto-saving (60)
nexus.zonecontroller      (basic)
heli.bulletaccuracy       (2)
heli.bulletdamagescale    (1)
heli.guns                 (1)
heli.lifetimeminutes      (15)
physics.autosynctransforms  (True)
physics.batchsynctransforms  (True)
physics.bouncethreshold   (2)
physics.gravity          Gravity multiplier (1)
physics.groundwatchdebug  (False)
physics.groundwatchdelay  (0.1)
physics.groundwatchfails  (1)
physics.minsteps         The slowest physics steps will operate (8)
physics.sendeffects      Send effects to clients when physics objects collide (True)
physics.sleepthreshold    (0.02)
physics.solveriterationcount The default solver iteration count permitted for any rigid bodies (default 7). Must be positive (3)
physics.steps            The amount of physics steps per second (16)
player.tickrate_cl        (20)
player.tickrate_sv        (16)
player.woundforever      Whether the crawling state expires (False)
pool.debug                (False)
pool.enabled              (True)
pool.mode                 (2)
pool.prewarm              (True)
sentry.hostileduration   how long until something is considered hostile after it attacked (120)
sentry.interferenceradius radius to check for other turrets (40)
sentry.maxinterference   max interference from other turrets (12)
sentry.targetall         target everyone regardless of authorization (False)
server.anticheatid        (xyza7891h6UjNfd0eb2HQGtaul0WhfvS)
server.anticheatkey       (OWUDFZmi9VNL/7VhGVSSmCWALKTltKw8ISepa0VXs60)
server.anticheatlog       (300)
server.anticheattoken     (True)
server.arrowarmor         (1)
server.arrowdamage        (1)
server.artificialtemperaturegrowablerange  (4)
server.authtimeout        (60)
server.bag_quota_item_amount  (True)
server.bansserverendpoint HTTP API endpoint for centralized banning (see wiki) ()
server.bansserverfailuremode Failure mode for centralized banning, set to 1 to reject players from joining if it's down (see wiki) (0)
server.bansservertimeout Timeout (in seconds) for centralized banning web server requests (5)
server.bleedingarmor      (1)
server.bleedingdamage     (1)
server.branch             ()
server.bulletarmor        (1)
server.bulletdamage       (1)
server.canequipbackpacksinair Allows backpack equipping while not grounded (False)
server.ceilinglightgrowablerange  (3)
server.ceilinglightheightoffset  (3)
server.censorplayerlist  Censors the Steam player list to make player tracking more difficult (True)
server.cinematic          (False)
server.combatlogdelay     (10)
server.combatlogsize      (30)
server.composterupdateinterval  (300)
server.compression        (False)
server.conveyormovefrequency How often industrial conveyors attempt to move items (value is an interval measured in seconds). Setting to 0 will disable all movement (5)
server.corpsedespawn      (300)
server.corpses            (True)
server.crawlingenabled   Do players go into the crawling wounded state (True)
server.crawlingmaximumhealth Maximum initial health given when a player dies and moves to crawling wounded state (12)
server.crawlingminimumhealth Minimum initial health given when a player dies and moves to crawling wounded state (7)
server.cycletime          (500)
server.debrisdespawn      (30)
server.defaultblueprintresearchcost How much scrap is required to research default blueprints (10)
server.description        (The command-line tool for quick, simple deployment and management of Linux dedicated game servers.)
server.dropitems          (True)
server.encryption         (2)
server.enforcepipechecksonbuildingblockchanges Whether to check for illegal industrial pipes when changing building block states (roof bunkers) (True)
server.entitybatchsize    (100)
server.entitybatchtime    (1)
server.entityrate         (16)
server.events             (True)
server.funwaterdamagethreshold  (0.8)
server.funwaterwetnessgain  (0.05)
server.gamemode           (vanilla)
server.headerimage        (https://git.io/JYdmK)
server.hostname           (LinuxGSM)
server.identity           (rustserver)
server.idlekick           (30)
server.idlekickadmins     (0)
server.idlekickmode       (1)
server.incapacitatedrecoverchance Base chance of recovery after incapacitated wounded state (0.1)
server.industrialcrafterfrequency How often industrial crafters attempt to craft items (value is an interval measured in seconds). Setting to 0 will disable all crafting (5)
server.industrialframebudgetms How long per frame to spend on industrial jobs (0.5)
server.ip                 (0.0.0.0)
server.ipqueriespermin    (30)
server.itemdespawn        (300)
server.itemdespawn_container_scale  (2)
server.itemdespawn_quick  (30)
server.level              (Procedural Map)
server.leveltransfer      (True)
server.levelurl           ()
server.logoimage          ()
server.max_sleeping_bags  (-1)
server.maxclientinfosize  (1048576)
server.maxconnectionsperip  (5)
server.maxdecryptqueuebytes  (524288000)
server.maxdecryptqueuelength  (5000)
server.maxdecryptthreadwait  (100)
server.maximummapmarkers How many markers each player can place (5)
server.maximumpings      How many pings can be placed by each player (5)
server.maxitemstacksmovedpertickindustrial How many stacks a single conveyor can move in a single tick (12)
server.maxmainthreadwait  (100)
server.maxpacketsize_command  (100000)
server.maxpacketsize_globalentities  (1000)
server.maxpacketsize_globaltrees  (100)
server.maxpacketspersecond  (1500)
server.maxpacketspersecond_command  (100)
server.maxpacketspersecond_rpc  (200)
server.maxpacketspersecond_rpc_signal  (50)
server.maxpacketspersecond_tick  (300)
server.maxpacketspersecond_voice  (100)
server.maxpacketspersecond_world  (1)
server.maxplayers         (50)
server.maxreadqueuebytes  (524288000)
server.maxreadqueuelength  (5000)
server.maxreadthreadwait  (100)
server.maxreceivetime     (20)
server.maxunack           (4)
server.maxwritequeuebytes  (524288000)
server.maxwritequeuelength  (5000)
server.maxwritethreadwait  (100)
server.meleearmor         (1)
server.meleedamage        (1)
server.metabolismtick     (1)
server.modifiertickrate   (1)
server.motd               ()
server.netcache           (True)
server.netcachesize       (0)
server.netlog             (False)
server.nonplanterdeathchancepertick  (0.005)
server.official           (False)
server.optimalplanterqualitysaturation  (0.6)
server.packetlog_enabled  (False)
server.parachuterepacktime How long it takes to pick up a used parachute in seconds (8)
server.pingduration      How long a ping should last (10)
server.plantlightdetection  (True)
server.planttick          (60)
server.planttickscale     (1)
server.playerserverfall   (True)
server.playertimeout      (60)
server.port               (28015)
server.printreportstoconsole Should F7 reports from players be printed to console (False)
server.pve                (False)
server.queriespersecond   (2000)
server.queryport          (28017)
server.radiation          (True)
server.reportsserverendpoint HTTP API endpoint for receiving F7 reports ()
server.reportsserverendpointkey If set, this key will be included with any reports sent via reportsServerEndpoint (for validation) ()
server.respawnatdeathposition If a player presses the respawn button, respawn at their death location (for trailer filming) (False)
server.respawnresetrange  (50)
server.respawnwithloadout When a player respawns give them the loadout assigned to client.RespawnLoadout (created with inventory.saveloadout) (False)
server.rewounddelay       (60)
server.rpclog_enabled     (False)
server.salt               (1113233618)
server.savebackupcount    (2)
server.savecachesize      (3825343)
server.saveinterval       (300)
server.schematime         (1800)
server.secure             (True)
server.seed               (1665026410)
server.showholstereditems  (True)
server.sprinklereyeheightoffset  (3)
server.sprinklerradius    (3)
server.stability          (True)
server.statbackup         (False)
server.stats              (False)
server.tags              Comma-separated server browser tag values (see wiki) ()
server.tickrate           (30)
server.updatebatch        (512)
server.updatebatchspawn   (1024)
server.url                (https://linuxgsm.com/)
server.useminimumplantcondition  (True)
server.watercontainersleavewaterbehind When transferring water, should containers keep 1 water behind. Enabling this should help performance if water IO is causing performance loss (False)
server.worldsize          (3000)
server.woundedmaxfoodandwaterbonus Maximum percent chance added to base wounded/incapacitated recovery chance, based on the player's food and water level (0.25)
server.woundedrecoverchance Base chance of recovery after crawling wounded state (0.2)
server.woundingenabled   Can players be wounded after recieving fatal damage (True)
spawn.max_density         (1)
spawn.max_rate            (1)
spawn.min_density         (0.5)
spawn.min_rate            (0.5)
spawn.player_base         (100)
spawn.player_scale        (2)
spawn.respawn_groups      (True)
spawn.respawn_individuals  (True)
spawn.respawn_populations  (True)
spawn.tick_individuals    (300)
spawn.tick_populations    (60)
stability.accuracy        (0.001)
stability.collapse        (0.05)
stability.stabilityqueue  (9)
stability.strikes         (10)
stability.surroundingsqueue  (3)
stability.verbose         (0)
steam.server_allow_steam_nicknames  (True)
time.fixeddelta           (0.0625)
time.maxdelta             (0.125)
time.pausewhileloading    (True)
time.timescale            (1)
tree.global_broadcast     (False)
vehicle.boat_corpse_seconds  (300)
vehicle.carwrecks        Determines whether modular cars turn into wrecks when destroyed, or just immediately gib. Default: true (True)
vehicle.cinematictrains  If true, trains always explode when destroyed, and hitting a barrier always destroys the train immediately. Default: false (False)
vehicle.trainskeeprunning Determines whether trains stop automatically when there's no-one on them. Default: false (False)
vehicle.vehiclesdroploot Determines whether vehicles drop storage items when destroyed. Default: true (True)
vis.attack                (False)
vis.damage                (False)
vis.hitboxes              (False)
vis.lineofsight           (False)
vis.protection            (False)
vis.sense                 (False)
vis.triggers              (False)
vis.weakspots             (False)
voice.voicerangeboostamount  (50)
weather.atmosphere_brightness  (-1)
weather.atmosphere_contrast  (-1)
weather.atmosphere_directionality  (-1)
weather.atmosphere_mie    (-1)
weather.atmosphere_rayleigh  (-1)
weather.clear_chance      (0.9)
weather.cloud_attenuation  (-1)
weather.cloud_brightness  (-1)
weather.cloud_coloring    (-1)
weather.cloud_coverage    (-1)
weather.cloud_opacity     (-1)
weather.cloud_saturation  (-1)
weather.cloud_scattering  (-1)
weather.cloud_sharpness   (-1)
weather.cloud_size        (-1)
weather.dust_chance       (0.03)
weather.fog               (-1)
weather.fog_chance        (0.03)
weather.ocean_scale       (-1)
weather.ocean_time        (-1)
weather.overcast_chance   (0)
weather.rain              (-1)
weather.rain_chance       (0.08)
weather.rainbow           (-1)
weather.storm_chance      (0.02)
weather.thunder           (-1)
weather.wetness_rain      (0.4)
weather.wetness_snow      (0.2)
weather.wind              (-1)
world.cache               (True)
world.configfile          ()
world.configstring        ()
xmas.enabled              (False)
xmas.giftsperplayer       (2)
xmas.spawnattempts        (5)
xmas.spawnrange           (40)
drone.altitudespeedoverride If greater than zero, overrides the drone's vertical movement speed (0)
drone.maxcontrolrange    How far drones can be flown away from the controlling computer station (500)
drone.movementspeedoverride If greater than zero, overrides the drone's planar movement speed (0)
dungeonnavmesh.use_baked_terrain_mesh  (True)
dynamicnavmesh.use_baked_terrain_mesh  (False)
eventschedulewipeoffset.event_hours_before_wipe  (24)
excavatorsignalcomputer.chargeneededforsupplies  (600)
global.steamconnectiontimeout  (10000)
global.steamnagleflush    (False)
global.steamnagletime    Nagle time, in microseconds (5000)
global.steamnetdebug     Turns on varying levels of debug output for the Steam Networking. This will affect performance. (0 = off, 1 = bug, 2 = error, 3 = important, 4 = warning, 5 = message, 6 = verbose, 7 = debug, 8 = everything) (0)
global.steamnetdebug_ackrtt  (4)
global.steamnetdebug_message  (4)
global.steamnetdebug_p2prendezvous  (4)
global.steamnetdebug_packetdecode  (4)
global.steamnetdebug_packetgaps  (4)
global.steamnetdebug_sdrrelaypings  (4)
global.steamsendbuffer   Upper limit of buffered pending bytes to be sent (524288)
global.steamsendratemax  Maxminum send rate clamp, 0 is no limit (1048576)
global.steamsendratemin  Minimum send rate clamp, 0 is no limit (131072)
rcon.ip                   (0.0.0.0)
rcon.port                 (28016)
rcon.print               If true, rcon commands etc will be printed in the console (False)
rcon.web                 If set to true, use websocket rcon. If set to false use legacy, source engine rcon. (True)
analytics.analytics_header  (X-API-KEY)
analytics.analytics_secret  ()
analytics.high_freq_stats  (True)
analytics.server_analytics_url  (https://rust-api.facepunch.com/api/public/analytics/rust/server)
analytics.stats_blacklist  ()
analytics.analytics_enabled  (True)
frankensteinbrain.movetowardsrate  (1)
frankensteinpet.decayminutes How long before a Frankenstein Pet dies un controlled and not asleep on table (180)
gamemodesoftcore.reclaim_fraction_belt  (0.5)
gamemodesoftcore.reclaim_fraction_main  (0.5)
gamemodesoftcore.reclaim_fraction_wear  (0)
growableentity.framebudgetms  (0.25)
guntrap.gun_trap_budget_ms How many milliseconds to spend on target scanning per frame (0.5)
hackablelockedcrate.decayseconds How many seconds until the crate is destroyed without any hack attempts (7200)
hackablelockedcrate.requiredhackseconds How many seconds for the crate to unlock (900)
halloweendungeon.lifetime How long each active dungeon should last before dying (600)
halloweendungeon.population Population active on the server (0)
horse.population         Population active on the server, per square km (0)
hotairballoon.outsidedecayminutes How long before a HAB loses all its health while outside (180)
hotairballoon.population Population active on the server (1)
hotairballoon.serviceceiling  (200)
ioentity.backtracking     (8)
ioentity.debugbudget     Print out what is taking so long in the IO frame budget (False)
ioentity.debugbudgetthreshold Ignore frames with a lower ms than this while debugBudget is active (2)
ioentity.framebudgetms    (1)
ioentity.responsetime     (0.1)
junkpilewater.framebudgetms  (0.25)
megaphone.megaphonevoicerange  (100)
minicopter.population    Population active on the server (0)
mlrs.brokendownminutes   How many minutes before the MLRS recovers from use and can be used again (10)
modularcar.outsidedecayminutes How many minutes before a ModularCar loses all its health while outside (864)
modularcar.population    Population active on the server (3)
monumentnavmesh.use_baked_terrain_mesh  (True)
motorrowboat.decaystartdelayminutes How long until decay begins after the boat was last used (45)
motorrowboat.deepwaterdecayminutes How long before a boat loses all its health while in deep water (120)
motorrowboat.outsidedecayminutes How long before a boat loses all its health while outside. If it's in deep water, deepwaterdecayminutes is used (180)
motorrowboat.population  Population active on the server (1)
npcautoturret.sleeperhostiledelay How many seconds until a sleeping player is considered hostile (1200)
parachute.bypassrepack    (False)
parachute.landinganimations  (False)
petbrain.controldistance  (100)
petbrain.drownindeepwater  (True)
petbrain.drowntimer       (15)
petbrain.idlewhenownermounted  (True)
petbrain.idlewhenownerofflineordead  (True)
playerhelicopter.insidedecayminutes How long before a player helicopter loses all its health while indoors (2880)
playerhelicopter.outsidedecayminutes How long before a player helicopter loses all its health while outside (480)
playerinventory.forcebirthday  (False)
polarbear.population     Population active on the server, per square km (1)
reclaimmanager.reclaim_expire_minutes  (120)
relationshipmanager.contacts  (True)
relationshipmanager.forgetafterminutes  (960)
relationshipmanager.maxplayerrelationships  (128)
relationshipmanager.maxteamsize  (8)
relationshipmanager.mugshotupdateinterval  (300)
relationshipmanager.seendistance  (10)
rhib.rhibpopulation      Population active on the server (0)
ridablehorse.population  Population active on the server, per square km (2)
aimanager.ai_dormant     If ai_dormant is true, any npc outside the range of players will render itself dormant and take up less resources, but wildlife won't simulate as well. (True)
aimanager.ai_dormant_max_wakeup_per_tick ai_dormant_max_wakeup_per_tick defines the maximum number of dormant agents we will wake up in a single tick. (default: 30) (30)
aimanager.ai_htn_animal_tick_budget ai_htn_animal_tick_budget defines the maximum amount of milliseconds ticking htn animal agents are allowed to consume. (default: 4 ms) (4)
aimanager.ai_htn_player_junkpile_tick_budget ai_htn_player_junkpile_tick_budget defines the maximum amount of milliseconds ticking htn player junkpile agents are allowed to consume. (default: 4 ms) (4)
aimanager.ai_htn_player_tick_budget ai_htn_player_tick_budget defines the maximum amount of milliseconds ticking htn player agents are allowed to consume. (default: 4 ms) (4)
aimanager.ai_htn_use_agency_tick If ai_htn_use_agency_tick is true, the ai manager's agency system will tick htn agents at the ms budgets defined in ai_htn_player_tick_budget and ai_htn_animal_tick_budget. If it's false, each agent registers with the invoke system individually, with no frame-budget restrictions. (default: true) (True)
aimanager.ai_to_player_distance_wakeup_range If an agent is beyond this distance to a player, it's flagged for becoming dormant. (160)
aimanager.nav_disable    If set to true the navmesh won't generate.. which means Ai that uses the navmesh won't be able to move (False)
aimanager.nav_obstacles_carve_state nav_obstacles_carve_state defines which obstacles can carve the terrain. 0 - No carving, 1 - Only player construction carves, 2 - All obstacles carve. (2)
aimanager.nav_wait       If true we'll wait for the navmesh to generate before completely starting the server. This might cause your server to hitch and lag as it generates in the background. (True)
aimanager.pathfindingiterationsperframe The maximum amount of nodes processed each frame in the asynchronous pathfinding process. Increasing this value will cause the paths to be processed faster, but can cause some hiccups in frame rate. Default value is 100, a good range for tuning is between 50 and 500. (100)
aimanager.setdestination_navmesh_failsafe If set to true, npcs will attempt to place themselves on the navmesh if not on a navmesh when set destination is called. (False)
coverpointvolume.cover_point_sample_step_height cover_point_sample_step_height defines the height of the steps we do vertically for the cover point volume's cover point generation (smaller steps gives more accurate cover points, but at a higher processing cost). (default: 2.0) (2)
coverpointvolume.cover_point_sample_step_size cover_point_sample_step_size defines the size of the steps we do horizontally for the cover point volume's cover point generation (smaller steps gives more accurate cover points, but at a higher processing cost). (default: 6.0) (6)
samsite.staticrepairseconds how long until static sam sites auto repair (1200)
santasleigh.altitudeaboveterrain  (50)
santasleigh.desiredaltitude  (60)
scraptransporthelicopter.population Population active on the server (0)
simpleshark.disable       (False)
simpleshark.forcesurfaceamount  (0)
slotmachine.forcepayoutindex  (-1)
snowmobile.allowpassengeronly Allow mounting as a passenger when there's no driver (False)
snowmobile.allterrain    If true, snowmobile goes fast on all terrain types (False)
snowmobile.outsidedecayminutes How long before a snowmobile loses all its health while outside (1440)
stag.population          Population active on the server, per square km (3)
telephonemanager.maxcalllength  (120)
telephonemanager.maxconcurrentcalls  (10)
traincar.decayminutes    How long before a train car despawns (30)
traincar.population      Population active on the server (2.3)
traincar.wagons_per_engine Ratio of wagons to train engines that spawn (2)
traincarunloadable.decayminutesafterunload How long before an unloadable train car despawns afer being unloaded (10)
traincouplingcontroller.max_couple_speed Maximum difference in velocity for train cars to couple (9)
tugboat.tugcorpseseconds  (7200)
tugboat.tugdecayminutes  How long before a tugboat loses all its health while outside (2160)
tugboat.tugdecaystartdelayminutes How long until decay begins after the tugboat was last used (1440)
wipetimer.days_to_add_test  (0)
wipetimer.hours_to_add_test  (0)
wipetimer.wipecronoverride Custom cron expression for the wipe schedule. Overrides all other convars (except wipeUnixTimestampOverride) if set. Uses Cronos as a parser: https://github.com/HangfireIO/Cronos/ ()
wipetimer.wipedayofweek  0=sun,1=mon,2=tues,3=wed,4=thur,5=fri,6=sat (4)
wipetimer.wipehourofday  Which hour to wipe? 14.5 = 2:30pm (19)
wipetimer.wipetimezone   The timezone to use for wipes. Defaults to the server's time zone if not set or invalid. Value should be a TZ identifier as seen here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones (Europe/London)
wipetimer.wipeunixtimestampoverride Unix timestamp (seconds) for the upcoming wipe. Overrides all other convars if set to a time in the future. (0)
wolf.population          Population active on the server, per square km (2)
xmasdungeon.playerdetectrange How far we detect players from our inside/outside (30)
xmasdungeon.xmaslifetime How long each active dungeon should last before dying (1200)
xmasdungeon.xmaspopulation Population active on the server (0)
zombie.population        Population active on the server, per square km (0)

Commands

baseboat.seconds_between_shore_drift(  ) 
baseboat.seconds_until_shore_drift(  ) 
boombox.clearradiobyuser(  ) 
bradleyapc.spawnroadbradley(  ) 
cassette.clearcassettes(  ) 
cassette.clearcassettesbyuser(  ) 
commands.echo(  ) 
commands.find(  ) 
camerarenderermanager.pool_stats(  ) 
global.adminui_deleteugccontent(  ) 
global.adminui_fullrefresh(  ) 
global.adminui_requestfireworkpattern(  ) 
global.adminui_requestplayerlist(  ) 
global.adminui_requestserverconvars(  ) 
global.adminui_requestserverinfo(  ) 
global.adminui_requestugccontent(  ) 
global.adminui_requestugclist(  ) 
global.authcount(  ) Returns all entities that the provided player is authed to (TC's, locks, etc), supports --json
global.authradius(  ) 
global.ban(  ) ban <player> <reason> [optional duration]
global.banid(  ) banid <steamid> <username> <reason> [optional duration]
global.banlist(  ) List of banned users (sourceds compat)
global.banlistex(  ) List of banned users - shows reasons and usernames
global.bans(  ) List of banned users
global.buildinfo(  ) Get information about this build
global.carstats(  ) Get information about all the cars in the world
global.clearugcentitiesinrange(  ) 
global.clearugcentity(  ) 
global.clientperf(  ) 
global.clientperf_frametime(  ) 
global.deauthradius(  ) 
global.entcount(  ) Returns all entities that the provided player has placed, supports --json
global.entid(  ) 
global.getugcinfo(  ) 
global.injureplayer(  ) 
global.kick(  ) 
global.kickall(  ) 
global.killplayer(  ) 
global.listid(  ) List of banned users, by ID (sourceds compat)
global.moderatorid(  ) 
global.mute(  ) 
global.mutelist(  ) Print a list of currently muted players
global.ownerid(  ) 
global.playerlist(  ) Get a list of players
global.players(  ) Print out currently connected clients etc
global.recoverplayer(  ) 
global.removemoderator(  ) 
global.removeowner(  ) 
global.removeskipqueue(  ) Removes skip queue permission from a SteamID
global.say(  ) Sends a message in chat
global.serverinfo(  ) Get a list of information about the server
global.skin_radius(  ) skin_radius 'skin' 'radius'
global.skipqueue(  ) 
global.skipqueueid(  ) Adds skip queue permissions to a SteamID
global.sleepingusers(  ) Show user info for players on server.
global.sleepingusersinrange(  ) Show user info for sleeping players on server in range of the player.
global.stats(  ) Print out stats of currently connected clients
global.status(  ) Print out currently connected clients
global.teaminfo(  ) 
global.unban(  ) 
global.unmute(  ) 
global.upgrade_radius(  ) upgrade_radius 'grade' 'radius'
global.users(  ) Show user info for players on server.
global.usersinrange(  ) Show user info for players on server in range of the player.
global.usersinrangeofplayer(  ) Show user info for players on server in range of the supplied player (eg. Jim 50)
ai.addignoreplayer(  ) Add a player (or command user if no player is specified) to the AIs ignore list.
ai.brainstats(  ) 
ai.clearignoredplayers(  ) Remove all players from the AIs ignore list.
ai.killanimals(  ) 
ai.killscientists(  ) 
ai.printignoredplayers(  ) Print a lost of all the players in the AI ignore list.
ai.removeignoreplayer(  ) Remove a player (or command user if no player is specified) from the AIs ignore list.
ai.selectnpclookatserver(  ) 
ai.sleepwakestats(  ) 
ai.wakesleepingai(  ) 
app.appban(  ) 
app.appunban(  ) 
app.connections(  ) 
app.info(  ) 
app.pair(  ) 
app.regeneratetoken(  ) 
app.resetlimiter(  ) 
app.retry_initialize(  ) Retry initializing the Rust+ companion server if it previously failed
bradley.quickrespawn(  ) 
chat.cardgamesay(  ) 
chat.clansay(  ) 
chat.localsay(  ) 
chat.say(  ) 
chat.search(  ) 
chat.tail(  ) 
chat.teamsay(  ) 
clan.info(  ) Prints info about a clan given its ID
console.search(  ) 
console.tail(  ) 
craft.add(  ) 
craft.cancel(  ) 
craft.canceltask(  ) 
craft.fasttracktask(  ) 
data.export(  ) 
debug.bench_io(  ) Spawn lots of IO entities to lag the server
debug.breakheld(  ) Break the current held object
debug.breakitem(  ) Break all the items in your inventory whose name match the passed string
debug.deleteentitiesbyshortname(  ) 
debug.drink(  ) 
debug.eat(  ) 
debug.enable_player_movement(  ) 
debug.flushgroup(  ) Takes you in and out of your current network group, causing you to delete and then download all entities in your PVS again
debug.heal(  ) 
debug.hurt(  ) 
debug.puzzlereset(  ) reset all puzzles
debug.refillvitals(  ) 
debug.renderinfo(  ) 
debug.repair_inventory(  ) Repair all items in inventory
debug.resetsleepingbagtimers(  ) 
debug.setdamage(  ) 
debug.setfood(  ) 
debug.sethealth(  ) 
debug.setradiation(  ) 
debug.setwater(  ) 
debug.spawnparachutetester(  ) 
debug.stall(  ) 
demo.record(  ) 
demo.stop(  ) 
entity.debug_toggle(  ) 
entity.deleteby(  ) Destroy all entities created by provided users (separate users by space)
entity.deletebytextblock(  ) Destroy all entities created by users in the provided text block (can use with copied results from ent auth)
entity.find_entity(  ) 
entity.find_group(  ) 
entity.find_id(  ) 
entity.find_parent(  ) 
entity.find_radius(  ) 
entity.find_self(  ) 
entity.find_status(  ) 
entity.nudge(  ) 
entity.spawnlootfrom(  ) 
entity.spawn(  ) 
entity.spawngrid(  ) 
entity.spawnitem(  ) 
env.addtime(  ) 
gamemode.set(  ) 
gamemode.setteam(  ) 
gc.alloc(  ) 
gc.collect(  ) 
gc.unload(  ) 
global.breakclothing(  ) 
global.breakitem(  ) 
global.clearallsprays(  ) 
global.clearallspraysbyplayer(  ) 
global.cleardroppeditems(  ) 
global.clearspraysatpositioninradius(  ) 
global.clearspraysinradius(  ) 
global.colliders(  ) 
global.error(  ) 
global.free(  ) 
global.injure(  ) 
global.kill(  ) 
global.objects(  ) 
global.queue(  ) 
global.quit(  ) 
global.recover(  ) 
global.report(  ) 
global.respawn(  ) 
global.respawn_sleepingbag(  ) 
global.respawn_sleepingbag_remove(  ) 
global.restart(  ) 
global.setinfo(  ) 
global.sleep(  ) 
global.spectate(  ) 
global.spectateid(  ) 
global.status_sv(  ) 
global.subscriptions(  ) 
global.sysinfo(  ) 
global.sysuid(  ) 
global.teleport(  ) 
global.teleport2autheditem(  ) 
global.teleport2death(  ) 
global.teleport2marker(  ) 
global.teleport2me(  ) 
global.teleport2owneditem(  ) 
global.teleportany(  ) 
global.teleporteveryone2me(  ) 
global.teleportlos(  ) 
global.teleportpos(  ) 
global.textures(  ) 
global.version(  ) 
harmony.load(  ) 
harmony.unload(  ) 
hierarchy.cd(  ) 
hierarchy.del(  ) 
hierarchy.ls(  ) 
inventory.clearinventory(  ) Clears the inventory of a target player. eg. inventory.clearInventory jim
inventory.copyto(  ) Copies the players inventory to the player in front of them
inventory.defs(  ) 
inventory.deployloadout(  ) Deploys the given loadout to a target player. eg. inventory.deployLoadout testloadout jim
inventory.deployloadoutinrange(  ) Deploys a loadout to players in a radius eg. inventory.deployLoadoutInRange testloadout 30
inventory.endloot(  ) 
inventory.equipslot(  ) 
inventory.equipslottarget(  ) 
inventory.give(  ) 
inventory.giveall(  ) 
inventory.givearm(  ) 
inventory.givebp(  ) 
inventory.giveid(  ) 
inventory.giveto(  ) 
inventory.lighttoggle(  ) 
inventory.listloadouts(  ) Prints all saved inventory loadouts
inventory.reloaddefs(  ) 
inventory.resetbp(  ) 
inventory.saveloadout(  ) Saves the current equipped loadout of the calling player. eg. inventory.saveLoadout loaduoutname
inventory.unlockall(  ) 
manifest.printmanifest(  ) 
manifest.printmanifestraw(  ) 
memsnap.full(  ) 
memsnap.managed(  ) 
memsnap.native(  ) 
nexus.broadcast_ping(  ) 
nexus.ping(  ) 
nexus.playeronline(  ) 
nexus.refreshislands(  ) 
nexus.transfer(  ) 
nexus.uploadmap(  ) Reupload the map image to the nexus. Normally happens automatically at server boot. WARNING: This will lag the server!
heli.call(  ) 
heli.calltome(  ) 
heli.drop(  ) 
heli.strafe(  ) 
heli.testpuzzle(  ) 
player.abandonmission(  ) 
player.cinematic_gesture(  ) 
player.cinematic_play(  ) 
player.cinematic_stop(  ) 
player.copyrotation(  ) 
player.createskull(  ) 
player.createtrophy(  ) 
player.dismount(  ) 
player.fillwater(  ) 
player.gesture_radius(  ) 
player.gotosleep(  ) 
player.markhostile(  ) 
player.mount(  ) 
player.printpresence(  ) 
player.printstats(  ) 
player.reloadweapons(  ) 
player.resetstate(  ) Resets the PlayerState of the given player
player.stopgesture_radius(  ) 
player.swapseat(  ) 
player.wakeup(  ) 
player.wakeupall(  ) 
pool.clear_assets(  ) 
pool.clear_memory(  ) 
pool.clear_prefabs(  ) 
pool.export_prefabs(  ) 
pool.fill_prefabs(  ) 
pool.print_arraypool(  ) 
pool.print_assets(  ) 
pool.print_memory(  ) 
pool.print_prefabs(  ) 
profile.flush_analytics(  ) 
profile.start(  ) 
profile.stop(  ) 
render.print_global_entities(  ) Print off count of global building entities on the server
render.tree_entities(  ) 
server.backup(  ) Backup server folder
server.broadcastplayvideo(  ) 
server.cheatreport(  ) 
server.combatlog(  ) Get the player combat log
server.combatlog_outgoing(  ) Get the player combat log, only showing outgoing damage
server.fps(  ) 
server.listtoolcupboards(  ) Prints all the Tool Cupboards on the server
server.listvendingmachines(  ) Prints all the vending machines on the server
server.netprotocol(  ) 
server.packetlog(  ) 
server.playerlistpos(  ) Prints the position of all players on the server
server.printdecryptqueue(  ) 
server.printeyes(  ) Print the current player eyes.
server.printpos(  ) Print the current player position.
server.printreadqueue(  ) 
server.printrot(  ) Print the current player rotation.
server.printwritequeue(  ) 
server.readcfg(  ) 
server.resetserveremoji(  ) Rescans the serveremoji folder, note that clients will need to reconnect to get the latest emoji
server.rpclog(  ) 
server.save(  ) Force save the current game
server.sendnetworkupdate(  ) Send network update for all players
server.setshowholstereditems(  ) Show holstered items on player bodies
server.snapshot(  ) This sends a snapshot of all the entities in the client's pvs. This is mostly redundant, but we request this when the client starts recording a demo.. so they get all the information.
server.start(  ) Starts a server
server.stop(  ) Stops a server
server.writecfg(  ) Writes config files
spawn.cargoshipevent(  ) 
spawn.fill_groups(  ) 
spawn.fill_individuals(  ) 
spawn.fill_populations(  ) 
spawn.report(  ) 
spawn.scalars(  ) 
stability.refresh_stability(  ) 
supply.call(  ) 
supply.drop(  ) 
system.cpu_affinity(  ) 
system.cpu_priority(  ) 
vehicle.autohover(  ) 
vehicle.boatdriftinfo(  ) Print out boat drift status for all boats
vehicle.fixcars(  ) 
vehicle.killboats(  ) 
vehicle.killcars(  ) 
vehicle.killdrones(  ) 
vehicle.killminis(  ) 
vehicle.killscraphelis(  ) 
vehicle.killtrains(  ) 
vehicle.stop_all_trains(  ) 
vehicle.swapseats(  ) 
voice.togglevoicerangeboost(  ) Enabled/disables voice range boost for a player eg. ToggleVoiceRangeBoost sam 1
weather.load(  ) 
weather.report(  ) 
weather.reset(  ) 
workshop.print_approved_skins(  ) 
world.monuments(  ) 
world.renderlabs(  ) Renders a PNG of the current map's underwater labs, for a specific floor
world.rendermap(  ) Renders a high resolution PNG of the current map
world.rendertunnels(  ) Renders a PNG of the current map's tunnel network
xmas.refill(  ) 
cui.cui_test(  ) 
cui.cui_test_update(  ) 
cui.endtest(  ) 
global.dump(  ) 
global.steamrelayinit(  ) 
global.steamstatus(  ) 
analytics.pending_analytics(  ) 
growableentity.growall(  ) 
meta.add(  ) add <convar> <amount> - adds amount to convar
note.update(  ) 
relationshipmanager.acceptinvite(  ) 
relationshipmanager.addtoteam(  ) 
relationshipmanager.fakeinvite(  ) 
relationshipmanager.kickmember(  ) 
relationshipmanager.leaveteam(  ) 
relationshipmanager.promote(  ) 
relationshipmanager.rejectinvite(  ) 
relationshipmanager.sendinvite(  ) 
relationshipmanager.sleeptoggle(  ) 
relationshipmanager.trycreateteam(  ) 
relationshipmanager.wipe_all_contacts(  ) 
relationshipmanager.wipecontacts(  ) 
ridablehorse.sethorsebreed(  ) 
santasleigh.drop(  ) 
telephonemanager.printallphones(  ) 
wipetimer.printtimezones(  ) 
wipetimer.printwipe(  ) 
ziplinelaunchpoint.report(  )
lutris/steam.rst at master · lutris/lutrisGitHub
Logo