arrow-left

Only this pageAll pages
gitbookPowered by GitBook
triangle-exclamation
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...

Getting Started

To get started is to visit linuxgsm.comarrow-up-right 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.

Home

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

  • User docs: docs.linuxgsm.comarrow-up-right

  • Dev Docs:

hashtag
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.

dev-docs.linuxgsm.comarrow-up-right

Configuration

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.

hashtag
Commands

Standard: ./gameserver debug

Short: ./gameserver d

circle-check

To exit debug mode use CTRL+c

force-update

circle-info

This is a command for game servers using SteamCMD 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.

hashtag
Commands

Standard: ./gameserver force-update

Short: ./gameserver fu

map-compressor

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

hashtag
Supported Servers

  • Unreal Tournament 99

  • Unreal Tournament 2004

  • Killing Floor

  • Red Orchestra

hashtag
Commands

Standard: ./gameserver map-compressor

Short: ./gameserver mc

change-password

circle-info

This is a command for TeamSpeak 3 only.

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

circle-info

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

hashtag
Supported Servers

  • TeamSpeak 3

hashtag
Commands

Standard: ./gameserver change-password

Short: ./gameserver pw

Trackmania Nations Forever / Trackmania United Forever

Networking

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.

hashtag
Commands

Standard: ./gameserver test-alert

Short: ./gameserver ta

The Front [WIP]

Dependencies

ANSI Colors

Message Display Time

Features

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.

circle-info

Some game servers provide a verbose output in console.

circle-info

Some game servers can be managed from the console.

hashtag
Commands

Run the following command to access console:

Standard: ./gameserver console

Short: ./gameserver c

Answer y at the prompt.

hashtag
Exiting the console

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

circle-check

Take your time as this can be confusing at first.

triangle-exclamation

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

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.

hashtag
Commands

Standard: ./gameserver skeleton

Short: ./gameserver sk

hashtag
Skeleton Directory

The skeleton directory is created in skel.

hashtag
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.

7 Days to Die

hashtag
Server Resources

  • Official Dedicated Server Guidearrow-up-right

hashtag
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

Discordarrow-up-right 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.

hashtag
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)

circle-info

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.

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.

hashtag
Commands

hashtag

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.

hashtag
Commands

Standard: ./gameserver update

validate

circle-info

This is a command for game servers using 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.

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.

circle-info

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

Multi Theft Auto

hashtag
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

Sven Co-op

Information for Sven Co-op servers

hashtag
Server Resources

Official Resources

Valheim

hashtag
Server Resources

Alerts

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

hashtag
Alert Settings

Alert settings can be changed in

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.

hashtag
Enable Pushbullet alerts

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

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.

hashtag
Setup IFTTT Webhook

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

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.

hashtag
Setup Pushover Alerts

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

Visit

tmux

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

circle-info

LinuxGSM requires tmux => 1.6

Tmux is a key component of LinuxGSM and replaced 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

hashtag
Commands

Standard: ./gameserver update-lgsm

Short: ./gameserver ul

tmux

hashtag
Commands

Standard: ./gameserver validate

Short: ./gameserver v

SteamCMD
hashtag
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.

hashtag
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.

hashtag
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.

hashtag
Other Resources:

Add admins to Valheim server:

https://nodecraft.com/support/games/valheim/adding-admins-to-your-valheim-serverarrow-up-right

Official Dedicated Server Guidearrow-up-right

Linux

network-interfaces

TODO

Guides

Guides that are used on multiple servers

Install Sourcemod and Metamod:Source

Other

/home/gameserver/skel
gitarrow-up-right

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.

# 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"
Starting a server

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

./gameserver start

hashtag
Stopping a server

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

./gameserver stop

hashtag
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.

hashtag
Restarting a server

Will simply stop, and then start the server.

./gameserver restart

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.

hashtag
Automatic update

hashtag
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.

hashtag
Scheduled updates

A cronjob 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.

circle-info

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

It is recommended to check for updates once per hour.

crontab.guruarrow-up-right is a great resource to generate cronjobs.

SteamCMD
hashtag
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.

hashtag

hashtag
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="".

LinuxGSM config
# More info | https://docs.linuxgsm.com/alerts#more-info
postalert="off"
stoponlyifnoplayers="off"
0 * * * * /home/username/gameserver update > /dev/null 2>&1
0 * * * * su - username -c '/home/username/gameserver update' > /dev/null 2>&1
# Display IP | https://docs.linuxgsm.com/alerts#display-ip
displayip=""
hashtag
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 Communityarrow-up-right web page which serves as a place for hosting our community's resources.

Communityarrow-up-right
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 Databasearrow-up-right

hashtag
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

hashtag
Sven Co-op Guides

Make FastDL Webserver Case Insensitive

Sven Co-op Forumsarrow-up-right
Sven Co-op Official Discordarrow-up-right
Once you have created a token insert it in to you LinuxGSM config.

hashtag
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 herearrow-up-right to generate a channel.

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

Pushbulletarrow-up-right
herearrow-up-right
# Pushbullet Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushbullet
pushbulletalert="on"
pushbullettoken="o.noWN6jpIeBUkLraw24saHKd7ksOkn7on"
channeltag=""
Visit https://ifttt.com/maker_webhooksarrow-up-right
  • Login and connect the Webhooks integration

  • Select Documentation to get your IFTTT API key.

  • Paste the API key into LinuxGSM settings.

  • hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    IFTTTarrow-up-right
    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.

    Pushoverarrow-up-right
    # Pushover Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Pushover
    pushoveralert="on"
    pushoveruserkey="yourpushoverid"
    pushovertoken="b5u24t1wua34gmh14kr1s3erkwi7tl"
    herearrow-up-right
    feature.
    LinuxGSM using tmux in console

    hashtag
    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.

    hashtag
    Known Issues

    hashtag
    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.

    circle-exclamation

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

    hashtag
    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.

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

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

    hashtag
    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 Ghettoforgearrow-up-right repository.

    Install Ghettoforge with the following command.

    Install tmux using the Ghettoforge repo.

    Once installed restart the server to complete the upgrade.

    tmuxarrow-up-right
    screenarrow-up-right
    console
    LinuxGSM settings

    IP Address Configuration

    How LinuxGSM handles IP addresses

    circle-info

    Make sure you understand basic IP addressing.

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

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

    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 .

    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.

    hashtag
    Commands

    Standard: ./gameserver monitor

    Short: ./gameserver m

    hashtag
    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.

    hashtag
    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 :

    hashtag
    Monitor Cronjob

    Use these cron examples to setup automated monitoring.

    circle-info

    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 .

    hashtag
    Alert Notifications

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

    hashtag
    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.

    hashtag
    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.

    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.

    hashtag
    Commands

    Standard: ./gameserver check-update

    Short: ./gameserver cu

    Unlike the 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.

    hashtag
    Automatic check for update

    hashtag
    Scheduled check for updates

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

    circle-exclamation

    Ensure that an 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.

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

    circle-info

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

    is a great resource to generate cronjobs.

    details

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

    hashtag
    Commands

    hashtag
    details

    Standard: ./gameserver details

    Short: ./gameserver dt

    hashtag
    postdetails

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

    Standard: ./gameserver postdetails

    Short: ./gameserver pd

    hashtag
    Details Provided

    Various relevant details are provided including:

    • Distro Details

    • Performance

    • Disk usage

    • Server Name

    hashtag
    Example output

    Killing Floor 2

    hashtag
    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.

    hashtag
    Resources

    hashtag
    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.

    hashtag
    Workshop

    triangle-exclamation

    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

    triangle-exclamation

    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.

    Minecraft: Java Edition

    hashtag
    Java Requirements

    Minecraft: Java Edition required Java 16

    hashtag
    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.

    Email

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

    hashtag
    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.

    circle-check

    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.

    hashtag
    Enable Email alerts

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

    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

    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.

    hashtag
    Log clearing

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

    hashtag
    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

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

    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.

    hashtag
    Find Branches

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

    circle-info

    hashtag
    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 .

    hashtag
    Beta Password

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

    Rocket.Chat

    Rocket.chat is an open-source collaboration tool.

    hashtag
    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)

    Game Server Config

    circle-info

    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.

    hashtag

    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

    • Automatically check for server crash and restart if needed

    Running on Boot

    hashtag
    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

    LinuxGSM Stats

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

    hashtag
    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.

    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:

    Dont Starve Together

    hashtag
    Authentication Token

    Don't Starve Together server requires an Authentication Token.

    1. Go to the Klei website .

    Garry's Mod

    hashtag
    Game Resources

    hashtag
    Auto Refresh

    Insurgency: SandStorm

    hashtag
    Custom Mods and Maps

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

    circle-info

    Unreal Tournament 2004

    hashtag
    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.

    glibc

    hashtag
    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 .

    hashtag

    Slack

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

    hashtag
    Create a Slack Webhook

    A webhook is required to post alerts to a slack.

    Source Engine

    hashtag
    Default ports

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

    • Game Port: 27015

    LAN Discovery

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

    hashtag
    Workarounds

    hashtag

    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.

    hashtag
    SFTP Advantages

    • Encrypted

    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.

    hashtag
    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.

    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.

    hashtag
    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.

    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.

    hashtag
    Sourcemod Resources

    //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 
    
    channeltag="myepicserver"
    # 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
    create session failed: ./srcds_linux -game csgo: Operation not permitted
    usermod -G tty csgoserver
    grep tty /etc/group
    tty:x:5:csgoserver
    yum install http://mirror.ghettoforge.org/distributions/gf/gf-release-latest.gf.el7.noarch.rpm
    yum --enablerepo=gf-plus install tmux
    restart
    # Discord Alerts | https://github.com/GameServerManagers/LinuxGSM/wiki/Discord
    discordalert="on"
    discordwebhook="https://discordapp.com/api/webhooks/3539332633367897009/5t_K4GkuBaR2-69TsKqXmHIya1ck1tirnu_Fst-DUC00dye98eaa_I6uTIcHEsi7a17K"

    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.

  • hashtag
    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.

    hashtag
    Bad practice to avoid

    hashtag
    By all means, you should never

    1. Connect to a server as root.

    2. Use FTP if SFTP is available.

    hashtag
    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 ?

    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.

    hashtag
    Symlink resources

    Excellent description of differences between Symlinks and Hardlinks by OSTechNixarrow-up-right

    Official Ubuntu ln Documentationarrow-up-right

    Debian 9

    1.5

    Debian 10

    1.5

    CentOS 7

    1.6

    CentOS 8

    1.5

    LinuxGSM
    game server
    displayip
    List of Minecraft Java releases arrow-up-right
    List of Minecraft Java snapshotsarrow-up-right

    The collected data is publicly available to view in a dashboard on LinuxGSM.comarrow-up-right

    hashtag
    What information is collected?

    Below is a list of types of data collected

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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

    hashtag
    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.

    hashtag
    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)arrow-up-right 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.

    hashtag
    How frequently is the data sent?

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

    hashtag
    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.

    LinuxGSM Statsarrow-up-right
    linuxgsm.comarrow-up-right

    Counter-Strike: Global Offensivearrow-up-right

  • Counter-Strike 1.6arrow-up-right

  • Counter-Strike: Sourcearrow-up-right

  • Day of Defeat: Sourcearrow-up-right

  • Day of Infamyarrow-up-right

  • Garry's Modarrow-up-right

  • Insurgencyarrow-up-right

  • Killing Floor 2arrow-up-right

  • Minecraftarrow-up-right

  • Quake 3arrow-up-right

  • Rustarrow-up-right

  • Terrariaarrow-up-right

  • Team Fortress 2arrow-up-right

  • Teamspeak 3arrow-up-right

  • Unreal Tournament 2004arrow-up-right

  • Unreal Tournament 3arrow-up-right

  • Unreal Tournament 99arrow-up-right

  • Xonoticarrow-up-right

  • ARK: Survival Evolvedarrow-up-right
    ARMA 3arrow-up-right
    Sourcemod Official Resources

    Official Sourcemod Install Guidearrow-up-right

    Sourcemod Download Linkarrow-up-right

    Metamod Download Linkarrow-up-right

    Sourcemod Plugins

    Plugins can be downloaded from Alliedmodders website:

    Plugins Forum arrow-up-right

    High Traffic Plugins Forum arrow-up-right

    hashtag
    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.

    Take note that some servers require a manually generated and placed .vdf file(link).arrow-up-right

    hashtag
    CS:GO Sourcemod Tips

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

    command
    LinuxGSM Mod Command
    tmux
    gamedig
    query_gsquery.py
    cronjobs
    Cronjobs
    alerts
    update
    cronjob
    alert
    crontab.guruarrow-up-right

    Server IP

  • Server Ports

  • Passwords

  • Config File

  • Backups

  • Server parameters

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

    ${systemdir}/data/darkrp_logs

  • ${systemdir}/data/ulx_logs

  • https://steamdb.info/app/258550/depots/arrow-up-right
    LinuxGSM config
    LinuxGSM config
    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)

  • hashtag
    Crontab

    To access and edit your cronjobs use crontab.

    hashtag
    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.

    hashtag
    User cronjob

    hashtag
    Root cronjob

    hashtag
    Cronjob Timing Examples

    hashtag
    Every single minute

    hashtag
    Every 30 minutes

    hashtag
    Every hour

    hashtag
    Every two hours

    hashtag
    Every two hours at 30 minutes past the hour

    hashtag
    Every day at 5:10 PM

    hashtag
    Every Wednesday at 1 AM

    hashtag
    Every Five Days at 1 AM

    hashtag
    Cronjob Generator

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

    hashtag
    LinuxGSM Cronjobs examples

    circle-info

    Replace username and gameserver with your own details.

    hashtag
    Daily cronjob

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

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

    hashtag
    Every X Time cronjobs

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

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

    hashtag
    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.

    (update command)
    (monitor command)
    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

    hashtag
    Crontab

    The crontab will allow you to create cronjobs 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.

    circle-info

    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.

    hashtag
    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 cronjobs and automated monitoring.

    hashtag
    Using start command

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

    To learn more, see Start-Stop-Restart

    hashtag
    rc.local

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

    After logging into your account visit this pagearrow-up-right to get your game server authentication token.
  • 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.

    hashtag
    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.

    circle-info

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

    hashtag
    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:

    hashtag
    Multi-Shard

    Take a look at Multiple-Serversarrow-up-right 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:

    hashtag
    Server #1

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

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

    hashtag
    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.

    hashtag
    Guides / Documentations:

    • Quick Setuparrow-up-right

    • Server Settingsarrow-up-right

    • Command Line Optionsarrow-up-right

    • Understanding Shards and Migration Portalsarrow-up-right

    https://accounts.klei.comarrow-up-right

    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.

    hashtag
    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.

    circle-exclamation

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

    hashtag
    Gamemode

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

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

    hashtag
    Workshop

    circle-exclamation

    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.

    hashtag
    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".

    circle-check

    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.

    circle-info

    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 LinuxGSMarrow-up-right

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

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

    Open mount.cfg file.

    Add game to mount.cfg

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

    Garry's Mod Wikiarrow-up-right
    Workshopchevron-right
    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"
    0 * * * * /home/username/gameserver check-update > /dev/null 2>&1
    0 * * * * su - username -c '/home/username/gameserver update' > /dev/null 2>&1
    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
    logdays="7" # How long logs are kept
    consolelogging="on" # Turning this to off will disable console logging
    # Steam App Branch Select
    # Example: "latest_experimental"
    branch="staging"
    betapassword="branchpassword"
    crontab -e
    * * * * * [/path/to/script] [command] > /dev/null 2>&1
    * * * * * su - username -c '[/path/to/script] [command]' > /dev/null 2>&1
    * * * * *
    */30 * * * *
    0 * * * *
    0 */2 * * *
    30 */2 * * *
    10 17 * * *
    0 1 * * * 3
    0 1 */5 * *
    0 5 * * *  /home/username/gameserver restart > /dev/null 2>&1
    0 5 * * *  su - username -c '/home/username/gameserver restart' > /dev/null 2>&1
    */5 * * * *  /home/username/gameserver monitor > /dev/null 2>&1
    */5 * * * *  su - username -c '/home/username/gameserver monitor' > /dev/null 2>&1
    */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
    [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'
    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
     -disableluarefresh
    sv_loadingurl "www.website.com/loading/screen"
    TTT     gamemode="terrortown"
    Sandbox gamemode="sandbox"
    wscollectionid="157384458"
    cp -R /home/cssserver/serverfiles/cstrike /home/gmodserver/serverfiles/cstrike
    chown -R gmodserver /home/gmodserver
    nano /home/gmodserver/serverfiles/garrysmod/cfg/mount.cfg
    "mountcfg"
    {
             "cstrike"      "/home/gmoduser/serverfiles/cstrike"
    }
    changelevel cs_italy

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

    Killing Floor 2 Official Server Wikiarrow-up-right
    Killing floor 2 Official Forumsarrow-up-right
    Official Guide Herearrow-up-right
    Config file's location

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

    hashtag
    Command

    ./gameserver details

    hashtag
    Sample output example

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    LinuxGSM Configs
    This guide will show you how to install the custom map TOROarrow-up-right as an example

    hashtag
    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.

    hashtag
    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

    circle-info

    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.ioarrow-up-right. 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.

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

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

    hashtag
    Resources

    Official Server Admin Guidearrow-up-right

    mods.ioarrow-up-right
    mod.io Server Admin Guidearrow-up-right

    Complete list of maps available with the LinuxGSM installer

    Server Requirements

    A complete list can be found herearrow-up-right.

    hashtag
    Distro glibc Versions

    List of distros and there glibc version.

    Distro

    glibc

    CentOS 7

    2.17

    CentOS 8

    2.28

    Debian 9

    2.24

    Debian 10

    2.28

    Debian 11

    2.31

    distrowatch.comarrow-up-right is also a great source to find this information.

    glibc version history available on Wikipediaarrow-up-right.

    hashtag
    External Links

    • distrowatch.comarrow-up-right

    • glibc Homepagearrow-up-right

    glibc fix

    Follow slack's guide to setting up an incoming webhookarrow-up-right.

  • Copy the Webhook URL

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

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

    Query Port: 27015

  • RCON Port: 27015

  • Client Port: 27020

  • Source TV: 27005

  • hashtag
    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.

    Changing port using Docker or firewall

    Changing port using the start parameters

    Console Command

    Connect using the console command.

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

    hashtag
    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.

    triangle-exclamation

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

    hashtag
    Fix

    As this github issuearrow-up-right 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 Start Parameters using your LinuxGSM Config 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 monitor 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

    LAN Discovery
    You can check that your server is listed on the master server by using ./gameserver details
    circle-info

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

    hashtag
    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.

    Rocket.chat guidearrow-up-right
    LinuxGSM settings

    Start Parameters

    circle-info

    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 game server configs 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 .

    hashtag
    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.

    hashtag
    Additional Parameters

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

    Anything added will be appended to the server executable binary.

    hashtag
    Basic Example

    hashtag
    Full Example

    hashtag
    Parameters reference

    • 7 Days to Die

    • Gold Source Servers

    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

    hashtag
    Commands

    hashtag
    Standard Install

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

    Standard: ./gameserver install

    Short: ./gameserver i

    hashtag
    Auto Install

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

    Standard: ./gameserver auto-install

    Short: ./gameserver ai

    hashtag
    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.

    hashtag
    Install Dependencies

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

    circle-exclamation

    If dependencies are not installed the server may not start.

    hashtag
    Dependencies as root

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

    hashtag
    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.

    hashtag
    Common Installation Issues

    hashtag
    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

    hashtag
    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.

    hashtag
    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

    hashtag
    DNS Issue

    Make sure you can ping using a hostname.

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

    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.

    hashtag
    Supported Servers

    • All Source engine servers

    hashtag
    Commands

    Standard: ./gameserver fastdl

    Short: ./gameserver fd

    hashtag
    Supported file formats

    • Maps (.bsp)

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

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

    • Particles (.pcf)

    hashtag
    Requirements

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

      or

    • Access to a remote web server.

    hashtag
    Usage

    hashtag
    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

    hashtag
    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.

    hashtag
    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

    hashtag
    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:

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    Call of Duty 4

    hashtag
    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.

    hashtag
    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.

    hashtag
    Updating CoD4x

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

    hashtag
    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 .

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

    hashtag
    server.cfg

    hashtag
    command-line parameters

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

    hashtag
    Mod Support

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

    hashtag
    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:

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

    hashtag
    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).

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

    hashtag
    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.

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

    hashtag
    Fast Download

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

    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:

    Workshop

    Many Steam games support the Steam Workshoparrow-up-right. 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.

    hashtag
    Supported Games Servers

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

    • Ark: Survival Evolved

    • ARMA 3

    • Day of Infamy

    hashtag
    Steam Web API Key/Auth Key

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

    triangle-exclamation

    Do not share your private API key.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    Server Configurations

    hashtag

    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:

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

    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.

    Guides from other sources:

    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.

    triangle-exclamation

    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.

    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.

    hashtag
    Commands

    hashtag

    Unreal Tournament 99

    hashtag
    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.

    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.

    hashtag
    Vocabulary

    Telegram

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

    hashtag
    Creating a Telegram Bot

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

    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.

    hashtag
    Install Node.js

    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 .

    circle-info

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

    permissions

    In Linux, files and directories are owned by a user and a group (see ). 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.

    hashtag
    Check current permissions

    KFGame/Config/kf2server/LinuxGSM-KFEngine.ini
    [OnlineSubsystemSteamworks.KFWorkshopSteamworks]
    ServerSubscribedWorkshopItems=605633924
    ServerSubscribedWorkshopItems=605551918
    ServerSubscribedWorkshopItems=605549089
    ServerSubscribedWorkshopItems=605532351
    ./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
    [/Script/ModKit.ModIOClient]
    bHasUserAcceptedTerms=True
    AccessToken=TOKEN HERE
    mkdir -p Insurgency/Config/Server
    touch Insurgency/Config/Server/Mods.txt
    touch Insurgency/Config/Server/MapCyle.txt
       
    (Scenario="Scenario_TORO_Checkpoint_Security",Lighting="Day",Mode="Checkpoint")
    (Scenario="Scenario_TORO_Checkpoint_Insurgents",Lighting="Day",Mode="Checkpoint")
    defaultmap="TORO"
    defaultscenario="Scenario_TORO_Checkpoint_Security"
    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
    connect IP:PORT
    connect 192.168.1.10:27025
    Master server:    listed
    steammaster="true"
    Install mods

    ./gameserver mods-install

    ./gameserver mi

    hashtag
    Update mods

    ./gameserver mods-update

    ./gameserver mu

    hashtag
    Remove mods

    ./gameserver mods-remove

    ./gameserver mr

    hashtag
    Supported mods/add-ons

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

    hashtag
    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

    hashtag
    Source Engine Games

    • Metamod: Source

    • SourceMod

    hashtag
    For Garry's Mod

    • ACF

    • ACF Missiles

    • DarkRP

    • DarkRP Modification

    • PAC3

    • UClip

    • ULib

    • ULX

    • UTime

    hashtag
    Unity3D Games

    Rust, Hurtworld, 7 Days To Die

    • Oxide Mod

    hashtag
    Technical Details

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    Adding mod support

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    Ubuntu 16.04 LTS

    2.23

    Ubuntu 18.04 LTS

    2.27

    Ubuntu 20.04 LTS

    2.31

    Memories Of Marsarrow-up-right
  • Natural Selection 2arrow-up-right

  • Rustarrow-up-right

  • Squadarrow-up-right

  • Killing Floor 2arrow-up-right

  • Parms variable

    Executable

    startparameters="-game nmrih"

    ./srcds_run -game nmrih

    LinuxGSM config files
    Source Dedicated Serversarrow-up-right
    https://linuxgsm.comarrow-up-right
    FAQ
    validate
    https://www.cyberciti.biz/faq/linux-setup-dns-lookup/arrow-up-right

    Sounds (.wav, .mp3, .ogg)

  • Fonts (.otf, .ttf)

  • Images (.png, .svg)

  • multiple game servers
    game server config
    https://cod4x.ovharrow-up-right
    herearrow-up-right
    CoD4x master server listarrow-up-right
    Fast download
    Counter-Strike 2
  • Garrys Mod

  • Hurtworld

  • Insurgency: Sandstorm

  • Killing Floor 2

  • Natural Selection 2

  • Starbound

  • Steam API key pagearrow-up-right
    a2ensite name_of_.conf_file
    mod_speling Documentationarrow-up-right
    Wikitechy mod_speling Guidearrow-up-right
    a2Hosting mod_speling Guidearrow-up-right
    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 addressarrow-up-right information.

  • hashtag
    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.

    hashtag
    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

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

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

    hashtag
    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.

    circle-info

    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.

    hashtag
    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.

    hashtag
    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

    hashtag
    Incremental (recommended)

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

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

    hashtag
    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".

    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    Diagnosing server accessibility

    hashtag
    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.

    circle-info

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

    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

    hashtag
    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.

    hashtag
    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).

    hashtag
    Check permissions from a file or all files of any directory

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

    Sample output:

    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.

    hashtag
    Change permissions

    Change permissions from files or directories

    hashtag
    Command

    chmod

    hashtag
    Recursive syntax (include sub files and directories)

    Append -R to your chmod

    chmod -R

    hashtag
    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

    hashtag
    Values

    hashtag
    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

    hashtag
    Syntax 2)

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

    hashtag
    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.

    hashtag
    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.

    hashtag
    Permissions for user/group/others/all

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

    hashtag
    Multiple permissions at once

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

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

    hashtag
    Set GUID and GID

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

    hashtag
    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

    File Ownership
    ## Predefined Parameters | https://docs.linuxgsm.com/configuration/start-parameters
    defaultmap="map_name"
    gamemode="game_mode"
    maxplayers="42"
    port="27015"
    sourcetvport="27020"
    clientport="27005"
    ## 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"
    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
    <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
    set sv_authtoken "mytokenhere"`
    +set sv_authtoken "mytokenhere"
    mods/                                  
         ├── pml220                         
         │   ├── mod.ff                         
         │   ├── pml220.iwd                     
         │   ├── z_c_r.iwd
    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""
        ├── usermaps
        │   ├── mp_nuketown
        │   │   ├── mp_nuketown.ff
        │   │   ├── mp_nuketown.iwd
        │   │   ├── mp_nuketown_load.ff
        ├── mods
        │   ├── myemptymod
    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
        cod4fastdl/
        ├── mods
        │   ├── pml220
        │   │   ├── mod.ff
        │   │   ├── pml220.iwd
        │   │   ├── z_c_r.iwd
        ├── usermaps
        │   ├── mp_nuketown
        │   │   ├── mp_nuketown.ff
        │   │   ├── mp_nuketown.iwd
        │   │   ├── mp_nuketown_load.ff
    https://steamcommunity.com/sharedfiles/filedetails/?id=3075706807
    https://steamcommunity.com/sharedfiles/filedetails/?id=157384458
    <IfModule mod_speling.c>
    CheckSpelling On
    CheckCaseOnly On
    </IfModule>
    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
    # Ports
    # =====================================
    # Change ports by editing the parameters in:
    # /home/lgsm/qlserver/serverfiles/baseq3/ql-server.cfg
    # Start Variables
    port="27015"
    sourcetvport="27020"
    clientport="27005"
    ip="0.0.0.0"
    port="27015"
    sourcetvport="27020"
    clientport="27005"
    port="27015"
    sourcetvport="27016"
    clientport="27017"
    port="27016"
    sourcetvport="27021"
    clientport="27006"
    port="27125"
    sourcetvport="27150"
    clientport="27100"
    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
    ultimatebyte@game:~$ ls -al twserver
    -rwxr-x--- 1 ultimatebyte ultimatebyte 5691 Jan 30 01:14 twserver
    0 no permissions
    1 x
    2 w
    3 wx
    4 r
    5 rx
    6 rw
    7 rwx
    hashtag
    Commands

    Standard: ./gameserver backup

    Short: ./gameserver b

    hashtag
    Example Output

    hashtag
    Backup Settings

    Alter these three settings by editing LinuxGSM config.

    hashtag
    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.

    circle-info

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

    hashtag
    maxbackupdays

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

    circle-info

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

    hashtag
    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.

    hashtag
    Automated Backups

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

    hashtag
    cronjob example

    see cronjobs

    hashtag
    Backups Location

    By default backups are saved in the backup directory.

    You can change this using the configuration file and the property backupdir.

    hashtag
    Checking Backups

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

    hashtag
    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.

    hashtag
    rsync

    rsyncarrow-up-right 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.

    hashtag
    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.

    hashtag
    duplicity-backup.sh

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

    hashtag
    rclone

    rclonearrow-up-right is similar to rsync however can easily sync to cloud storage solutions.

    OldUnreal-UTPatch469a-Linux.tar.bz2 (OldUnreal Patcharrow-up-right)
  • ut-server-436.tar (Latest Official Version)

  • UTBonusPack.zip

  • UTBonusPack2.zip (maps only)

  • UTInoxxPack.zip

  • UTBonusPack4.zip

  • hashtag
    Server Resources

    UT99.org is a community website for UT99arrow-up-right

    OldUnreal is another community websitearrow-up-right

    hashtag
    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.

  • 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
  • Configure LinuxGSM: Fill in the API token into your LinuxGSM config as follows:

  • hashtag
    Configuring Alerts for a Group

    hashtag
    New Group Creation

    1. Select New Group within Telegram.

    2. Name your group.

    3. Add your bot by searching its @Username.

    hashtag
    Adding to an Existing Group

    1. Open group info.

    2. Choose to add members.

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

    hashtag
    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.

      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 file.

    hashtag
    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 to retrieve the thread ID by looking for the message_thread_id field in the message object.

    5. Update the telegramthreadid field in the with the thread ID.

    hashtag
    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.

    hashtag
    Advanced Configuration: Custom cURL String

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

    Telegramarrow-up-right
    Telegram Bot APIarrow-up-right
    @BotFatherarrow-up-right
    GameDig requires Node.jsarrow-up-right a JavaScript runtime environment installed to work. Use the following instructions to install Node.js.

    hashtag
    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.

    hashtag
    Ubuntu/Debian

    hashtag
    CentOS

    circle-exclamation

    Work in progress

    hashtag
    Install NodeJS

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

    hashtag
    Ubuntu/Debian

    hashtag
    Enterprise Linux Based Distributions

    hashtag
    Install GameDig npm

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

    hashtag
    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.

    hashtag
    Sample output

    hashtag
    Details

    Extra info becomes available for game server details.

    hashtag
    Raw output

    GameDigarrow-up-right
    hashtag
    SteamCMD Login

    SteamCMD requires a login to download some game servers.

    It is recommended that you create a new Steam usernamearrow-up-right just for the server.

    hashtag
    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.

    hashtag
    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 LinuxGSM config.

    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".

    triangle-exclamation

    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 plain text.

    circle-info

    Check herearrow-up-right for a list of game servers that require a login.

    hashtag
    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.

    hashtag
    Steam Guard

    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.

    circle-info

    For more info visit steam supportarrow-up-right.

    hashtag
    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.

    hashtag
    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.

    hashtag

    wikiarrow-up-right
    SteamDBarrow-up-right
    SteamCMD Terminal

    LinuxGSM Config

    circle-info

    LinuxGSM Configs and Game Server Configs 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.

    hashtag
    Config Files Location

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

    hashtag
    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.

    hashtag
    Configuration files

    circle-info

    An understanding of how LinuxGSM handles instances helps.

    hashtag
    _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.

    circle-exclamation

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

    hashtag
    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.

    hashtag
    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.

    hashtag
    Secret Configs

    triangle-exclamation

    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.

    hashtag
    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.

    hashtag
    LinuxGSM config load order

    hashtag
    How to Use

    hashtag
    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

    circle-info

    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.

    hashtag
    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 .

    circle-info

    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.

    hashtag
    Examples

    hashtag
    Example 1

    Load de_nuke as default map on csgoserver:

    hashtag
    Example 2

    Load cs_office as default map on csgoserver:

    hashtag
    Example 3

    Load de_dust2 as default map on csgoserver:

    hashtag
    Example 4

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

    hashtag
    Example 5

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

    TeamSpeak 3

    hashtag
    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.

    Navigate to server groups server permissions and select guest.

    Select the values shown below and close the menu.

    • Virtual Server

      • Information

        • b_virtualserver_info_view

    hashtag
    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.

    hashtag
    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).

    hashtag
    Useful Commands

    hashtag
    Login

    hashtag
    Generating a new Privilege key

    Note: Your server ID is usually 1

    hashtag
    Reset your query password

    See .

    hashtag
    TeamSpeak 3 Databases

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

    hashtag
    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.

    hashtag
    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 .

    hashtag
    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.

    Additional information can be found .

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

    hashtag
    Known issues

    hashtag
    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.

    hashtag
    Accounting failed to register

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

    hashtag
    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.

    Java

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

    hashtag
    Installation of Java Runtime Environment

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

    hashtag
    Debian/Ubuntu

    hashtag
    JRE

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

    hashtag
    OpenJRE

    For openjdk, run the following changing the version number:

    hashtag
    CentOS

    Run the following command, changing the version number:

    hashtag
    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

    Xonotic

    Xonotic Logo

    hashtag
    Server Resources

    FAQarrow-up-right

    hashtag
    Ports

    • Game Port Default: 26000 UDP

    hashtag
    Default Config Location

    hashtag
    Client Specific

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

    System
    Location

    hashtag
    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

    hashtag
    Game Modes

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

    Gametype
    Servervalue
    Description

    hashtag
    Custom Maps

    hashtag
    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.

    hashtag
    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.

    hashtag
    Example

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

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

    Look at for more infos about Custom Map Hosting

    hashtag
    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

    Game Server Login Token

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

    hashtag
    Games using GSLT

    • Ballistic Overkill

    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.

    circle-check

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

    hashtag

    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.

    hashtag
    DDoS protection

    A

    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
    [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=
    # 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.
        # 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
        ```
    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
      }
    }
    ## SteamCMD Login
    steamuser="username"
    steampass="password"

    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

  • hashtag
    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. Valve announced that running certain plugins would get your server blacklistedarrow-up-right, 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.

    hashtag
    Generate a Token

    To generate a token follow this linkarrow-up-right.

    circle-info

    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

    circle-info

    Every single server must use a unique GSLT.

    hashtag
    GSLT Server Parameter

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

    start parameter

    circle-info

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

    +sv_setsteamaccount [token]

    game server config

    sv_setsteamaccount [token]

    hashtag
    Tower Unite

    Tower Unite has a command within its config file

    SteamLoginToken=

    hashtag
    FAQ

    hashtag
    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.

    hashtag
    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.

    hashtag
    Can I use the same GSLT for multiple servers?

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

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

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

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

    hashtag
    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: http://dathost.net/blog/important-information-regarding-our-csgo-servers/arrow-up-right

    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

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

    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

    Xonotic Gitlabarrow-up-right
    Xonotic Wikiarrow-up-right

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

    Copy any settings you want to apply to all instances to common.cfg.
    multiple game server
    multiple instances

    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

    Distro

    JRE 6

    JRE 7

    JRE 8

    JRE 11

    JRE 13

    JRE 16

    JRE 17

    CentOS 7

    YES

    YES

    YES

    YES

    NO

    Distrowatcharrow-up-right
    https://help.ubuntu.com/community/Javaarrow-up-right

    NO

    Network Locations

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

    hashtag
    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.

    hashtag
    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 DHCParrow-up-right and NATarrow-up-right.

    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.

    hashtag
    Network Interfaces

    All computers will have some sort of physical or virtual network interfacearrow-up-right (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.

    hashtag
    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.

    hashtag
    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

    hashtag
    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 playit.ggarrow-up-right that is specifically designed for game servers. However other solutions may work.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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).

    hashtag
    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.

    hashtag
    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.

    circle-check

    Unless a specific IP address is required the game server IP can be set to 0.0.0.0.

    (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.

    hashtag
    iptables

    iptablesarrow-up-right 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

    hashtag
    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.

    hashtag
    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 canyouseeme.orgarrow-up-right. 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.

    hashtag
    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.

    distributed denial-of-servicearrow-up-right
    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"
    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
    ip -o link show
    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)  
    ------------------

    b_virtualserver_channel_list

  • b_virtualserver_client_list

  • Group

    • Information

      • b_virtualserver_servergroup_list

      • b_virtualserver_channelgroup_list

  • change password
    herearrow-up-right
    herearrow-up-right
    LinuxGSM config
    Retrieving Your Telegram Chat ID
    LinuxGSM config

    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.

    hashtag
    Prerequisites

    hashtag
    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.

    hashtag
    LinuxGSM Configuration

    You should be familiar with how work.

    hashtag
    Understand ports

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

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    Cons

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

    • Each instance has to be individually setup.

    hashtag
    Examples

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

    hashtag
    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

    hashtag
    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.

    triangle-exclamation

    Most but not all game servers work with this method

    hashtag
    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.

    hashtag
    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.

    hashtag
    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

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    Common Mistakes

    hashtag
    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 .

    hashtag
    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.

    Arma 3

    hashtag
    Server Resources

    • Official Dedicated Server Guidearrow-up-right

    hashtag
    Headless Client

    hashtag
    Headless Client Overview

    • 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

    hashtag
    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.

    circle-info

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

    Create a 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.

    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[]=.

    circle-exclamation

    Do not use 127.0.0.1 as the IP address.

    Navigate to your profile directory.

    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.

    hashtag
    Mod Support

    Arma 3 mods are managed using the or manual downloads.

    hashtag
    Adding Mods

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

    circle-exclamation

    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:

    Download the Mod using the workshop id is 450814997

    Create a directory called @cba_a3 in serverfiles/mods

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

    circle-exclamation

    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.

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

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

    hashtag
    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.

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

    Factorio

    hashtag
    Server Resources

    • World generationarrow-up-right

    hashtag
    Server Configuration

    Configuration for Factorio is split between both the and .

    hashtag
    LinuxGSM Server Config

    port, rcon and branch configuration is set using stat parameters

    hashtag
    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 :

    hashtag
    Game Server Config

    All other settings are located in the Factorio .

    Useful settings include:

    hashtag
    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.

    hashtag
    World Generation Settings

    hashtag
    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

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

    hashtag
    Adjusting World Generation Settings

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

    circle-info

    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.

    hashtag
    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

    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.

    file-ownership

    hashtag
    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.

    hashtag
    Check current ownership

    hashtag
    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

    hashtag
    Check ownership from all files and hidden files of any directory

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

    Sample output:

    hashtag
    All these commands require elevated privileges!

    hashtag
    Change owner

    Change owner from files or directories

    hashtag
    Command

    chown

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

    hashtag
    Single file syntax

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

    hashtag
    Recursive syntax (include sub files and directories)

    chown -R newowner /path/to/directory

    hashtag
    Example

    chown -R myuser /home/myuser

    hashtag
    Group ownership

    Change group ownership on files or directories

    hashtag
    Command

    chgrp

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

    hashtag
    Single file syntax

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

    hashtag
    Recursive syntax (include sub files and directories)

    chgrp -R newgroup /path/to/dir/

    hashtag
    User and group ownership

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

    hashtag
    Command

    chown

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

    hashtag
    Single file command

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

    hashtag
    Recursive

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

    hashtag
    Example:

    chown -R myuser:myuser /home/myuser

    Security

    TO-DO

    hashtag
    Avoid a security breach and allow you to run multiple servers

    triangle-exclamation

    needs to be verified

    (NOTE: This method is detailed further . 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:

    And to keep the changes upon machine reboot:

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

    GitHub - GameServerManagers/Game-Server-Configs: A repo of game server configuration files used by LinuxGSMGitHubchevron-right
    GitHub - GameServerManagers/Game-Server-Configs: A repo of game server configuration files used by LinuxGSMGitHubchevron-right
    Tools > Options > Application
    Permissions > Server Groups
    ## Query mode
    # 1: session only
    # 2: gamedig (gsquery fallback)
    # 3: gamedig
    # 4: gsquery
    # 5: tcp
    querymode="3"
    querytype="teamspeak3"
    login serveradmin <password>
    use sid=<server-id>
    tokenadd tokentype=0 tokenid1=6 tokenid2=0
    cat ~user/serverfiles/tsdns/tsdns_settings.ini.sample
    cd serverfiles/tsdns/
    cp tsdns_settings.ini.sample tsdns_settings.ini
    nano tsdns_settings.ini
    cd ~
    ./ts3server restart
    ERROR |Accounting | |failed to register local accounting service: File exists
    /dev/shm/7gbhujb54g8z9hu43jre8
    "chat": {
        "id": 123456789,
        "first_name": "Your Name",
        "username": "YourUsername",
        "type": "private"
    }
    # 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=""
    {
        "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
        }
    }
    # 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=""
    More secure, by keeping instances separate with there own user.
  • Reduced risk of breaking multiple instances.

  • /home/csgoserver-zombies/csgoserver

    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

    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

    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

    LinuxGSM Configs
    Ports
    ports

    csgoserver-zombies

    /home/gmodserver/gmodserver-2

    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

  • mount -o remount,rw,hidepid=2 /proc
    nano /etc/fstab
    # Here are the modification to apply to the "proc" line
    proc    /proc    proc    defaults,hidepid=2    0    0
    herearrow-up-right
    this
    /home/gameserver/serverfiles
    /home/gameserver/gameserver
    /home/gameserver/gameserver-2
    ./linuxgsm.sh install
    OR
    ./linuxgsm.sh gameserver
    ./gameserver-2
    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
    .
    https://community.bistudio.com/wiki/Arma_3_Headless_Clientarrow-up-right
    new server instance
    Steam Workshoparrow-up-right
    steam workshoparrow-up-right
    CBA: Community Based Addons for Arma 3arrow-up-right
    https://steamworkshopdownloader.io/arrow-up-right
    LinuxGSM config
    log

    Run Factorio as normal

    Transfer them to the server

  • Delete or rename any previous worlds

  • Factorio server Wikiarrow-up-right
    Factorio console commandsarrow-up-right
    game server config
    start parameters
    game server config
    Factorio websitearrow-up-right
    ore generation valuesarrow-up-right
    Resource Overhaul Modarrow-up-right
    your Factorio installation saves toarrow-up-right
    Filezillaarrow-up-right
    Factorio Profile

    Counter-Strike: Global Offensive

    hashtag
    Server Resources

    Official Server Resources

    RcloneRclonechevron-right
    Introduction to rsyncLinode Guides & Tutorialschevron-right
    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...).GitHubchevron-right
    duplicity: Encrypted bandwidth-efficient backupduplicity.nongnu.orgchevron-right
    GitHub - nodesource/distributions: NodeSource Node.js Binary DistributionsGitHubchevron-right
    GitHub - nodesource/distributions: NodeSource Node.js Binary DistributionsGitHubchevron-right
    GitHub - nodesource/distributions: NodeSource Node.js Binary DistributionsGitHubchevron-right
    startparameters="-client -connect=${ip}:${port} -password=CHANGEME"
    headlessClients[]={"1.2.3.4"}; 
    localClient[]={"1.2.3.4"};
    ~cd ~/.local/share/Arma\ 3\ -\ Other\ Profiles
    serverfiles/mods/@cba_a3
    cp serverfiles/mods/@cba_a3/keys/* serverfiles/keys
    mods="mods/@cba_a3"
    mods="mods/@mod1\;mods/@mod2"
    #!/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
    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 ==========================================================================================================================================================================================================
    ## 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
    Logo
    Logo

    CS:GO Server Workshop setup Wikiarrow-up-right

  • CS:GO Server Known Issues Wikiarrow-up-right

  • CS:GO Game Modesarrow-up-right

  • hashtag
    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 Modesarrow-up-right. 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

    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.

    hashtag
    Server Guides

    Install Sourcemod on CS:GO Server

    hashtag
    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 )

    This will as well force the client to use the 128 tickrate

    hashtag
    Workshop

    For CSGO, edit these lines in your LinuxGSM config

    CS:GO Dedicated server Wikiarrow-up-right

    Commands

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

    hashtag
    Global commands list

    Command Name

    Command

    Short

    hashtag
    Specific commands

    hashtag
    Teamspeak 3

    hashtag
    Unreal & Unreal 2 Engine Games

    hashtag
    Rust

    Command Name
    Command
    Short

    hashtag
    Developer & Debug commands

    Counter-Strike 2

    circle-info

    This page is still a work in progress. If you have updated info please edit this document or let us know.

    hashtag
    Server Resources

    Official Server Resources

    hashtag
    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 for the various game modes. If you want more detailed and up-to-date information, take a look at Valve's wiki: .

    [Game Modes]
    gametype
    gamemode
    gamemodeflags
    skirmishid
    mapgroup (you can mix these across all Game Modes except Danger Zone, but use only one)

    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.

    hashtag
    Workshop

    it is possible to add a single or collection of workshop maps to a Counter-Strike 2 server.

    hashtag
    Workshop ID

    First, gather the map or collection ID. To do this find the workshop map or collection you want to use on the and look at the URL; it will contain the required ID number. In the example below the ID is 3075706807.

    hashtag
    Create a Collection

    hashtag
    Auth Key

    If you are using a collection you will need to get an auth key from .

    Unreal Tournament 3

    circle-info

    Unreal Tournament 3 requires using OpenSpy master server to get it running. Please ensure you have created a login to allow this server to work.

    hashtag
    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

    hashtag
    Ports

    • Game Port 7777 UDP handled by Parms

    • Query port 6500 UDP handled by parms

    • Web Admin 8080 TCP handled by UTWeb.ini

    hashtag
    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.

    hashtag
    How to fix the Unreal Tournament 3 Game Client

    Download the OpenSpy Patch to get the server browser working.

    hashtag
    Game Types

    This is a list of the valid gametypes:

    hashtag
    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:

    hashtag
    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.

    hashtag
    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.

    hashtag
    Enable Mapvote

    Edit the UTGame.ini. Under the [UTGame.UTGame] section, be sure to have this:

    hashtag
    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

    When your done you can logout with: AdminLogout

    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 Support to know the right place to reach us and what information to provide in order for us to be able to help you.

    hashtag
    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.

    hashtag
    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

    hashtag
    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

    hashtag
    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.

    hashtag
    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

    hashtag
    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

    hashtag
    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

    hashtag
    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

    hashtag
    Connectivity issues

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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

    hashtag
    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.

    hashtag
    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:

    sv_mincmdrate 128
    sv_minupdaterate 128
    wsapikey="YOUR_STEAM_API_KEY"
    wscollectionid="YOUR_COLLECTION_ID"
    wsstartmap="

    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

    ./gameserver dl

    Query Raw

    ./gameserver query-raw

    ./gameserver qr

    Clear Modules

    ./gameserver clear-moeuldes

    ./gameserver cm

    Install

    ./gameserver install

    ./gameserver i

    Auto Install

    ./gameserver auto-install

    ./gameserver ai

    Start

    ./gameserver start

    ./gameserver st

    Stop

    ./gameserver stop

    ./gameserver sp

    Restart

    ./gameserver restart

    ./gameserver r

    Details

    ./gameserver details

    ./gameserver dt

    Post Details

    ./gameserver postdetails

    ./gameserver pd

    Skeleton

    ./gameserver skeleton

    ./gameserver sk

    Backup

    ./gameserver backup

    ./gameserver b

    Update LinuxGSM

    ./gameserver update-lgsm

    ./gameserver ul

    Monitor

    ./gameserver monitor

    ./gameserver m

    Test Alert

    ./gameserver test-alert

    ./gameserver ta

    Update

    ./gameserver update

    ./gameserver u

    Check Update

    ./gameserver check-update

    ./gameserver cu

    Force Update

    ./gameserver force-update

    ./gameserver fu

    Validate

    ./gameserver validate

    ./gameserver v

    Console

    ./gameserver console

    ./gameserver c

    Debug

    ./gameserver debug

    ./gameserver d

    Command Name

    Command

    Short

    Change Password

    ./ts3server change-password

    ./gameserver pw

    Command Name

    Command

    Short

    Map Compressor

    ./gameserver map-compressor

    ./gameserver mc

    Full Wipe

    ./rustserver full-wipe

    ./rustserver fw

    Map Wipe

    ./rustserver map-wipe

    ./rustserver mw

    Command Name

    Command

    Short

    Developerarrow-up-right

    ./gameserver developer

    ./gameserver dev

    Detect Dependencies

    ./gameserver detect-deps

    ./gameserver dd

    Detect Glibc

    ./gameserver detect-glibc

    ./gameserver dg

    Detect ldd

    ./gameserver detect-ldd

    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

    Arms Race

    1

    0

    0

    0

    mg_armsrace

    CS 2 Dedicated server Wikiarrow-up-right
    CS 2 Game Modesarrow-up-right
    LinuxGSM config
    CS2 Game Modesarrow-up-right
    CS2 steam workshoparrow-up-right
    herearrow-up-right

    Boom! Headshot!

  • Does the user have the right permissions on its directories? See Permissions

  • after
    dpkg --add-architecture i386
    ?
  • If some dependencies are not available, did you check your /etc/apt/sources.list? (Debian based and apt only)

  • Did you make sure that a firewall doesn't prevent the download from working? Check command: iptables -L ; See Firewalls

  • Are ports already used by another service? See Ports and Multiple-Game-Servers

  • Is this a known tmux issue? See Tmux

  • Did you try to start with the debug command? See debug

  • What does the logs say? See [Logging

  • 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?

  • 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 Permissions

  • 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).

  • File Ownership
    https://linuxgsm.comarrow-up-right
    validate
    details
    Logging
    debug
    Start-Parameters
    Logging
    debug
    validate
    Logging
    details
    monitor
    Ports
    Ports
    Firewalls
    Firewalls
    Ports
    details
    Logging
    Support
    Support
    https://steamcommunity.com/sharedfiles/filedetails/?id=3075706807
    Useful port diagnostic command:
    netstat -atunp | grep srcds_linux
    WebAdmin 1.17

    UTGame.UTDuelGame

    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

    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.

    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

  • 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

    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

    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)

    OpenSpyarrow-up-right
    https://ut3-ultimate.com/playing-ut3/arrow-up-right

    Duel

    No Translocator

    GamePassword=<password>

    Logo
    Logo

    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.

    hashtag
    Debian Based Distributions

     ?mutator=UTGame.UTMutator_Instagib,UTGame.UTMutator_LowGrav
    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"))
    Logo
    Logo
    hashtag
    Ubuntu

    hashtag
    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.

    hashtag
    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.

    circle-info

    Ubuntu 22.04 LTS is recommended

    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

    https://en.wikipedia.org/wiki/Ubuntu#Releasesarrow-up-right

    hashtag
    Debian

    hashtag
    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.

    hashtag
    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.

    circle-info

    Debian 12 "Bookworm" is recommended

    https://en.wikipedia.org/wiki/Debian_version_historyarrow-up-right

    Version

    Status

    Code name

    Release date

    Security support until

    LTS until

    10

    oldoldstable

    Buster

    6 July 2019

    2022

    2024

    11

    oldstable

    https://en.wikipedia.org/wiki/Debian_version_history#Release_tablearrow-up-right

    hashtag
    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

    hashtag
    CentOS

    circle-info

    CentOS is no longer recommended for use with LinuxGSM for hosting game servers.

    circle-info

    Rocky Linux or AlmaLinux are now the recommended alternative Enterprise Linux Distro

    triangle-exclamation

    Significant changesarrow-up-right in the future of CentOS have occurred.

    hashtag
    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.

    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

    hashtag
    Rocky Linux

    hashtag
    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.

    hashtag
    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.

    hashtag
    AlmaLinux

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    circle-info

    EPEL is required to run LinuxGSM

    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.

    hashtag
    I'm having an issue can you help?

    There are various ways to get help and support with LinuxGSM.

    circle-exclamation

    Remember to consider the best place to post your issue and search the internet for a solution before posting.

    hashtag
    Documentation

    The website and GitHub wiki is a useful resource for various LinuxGSM related topics.

    hashtag
    General Support

    LinuxGSM has a discord server where you can get general support for LinuxGSM related stuff.

    hashtag
    Bugs/Feature Requests

    LinuxGSM has a GitHub issues page where you can submit any bugs and feature suggestions.

    hashtag
    tmux: command not found

    I received the following error

    Tmux has not been installed. See the dependencies section of the installation instructions.

    or

    hashtag
    Can I run a server 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.

    hashtag
    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%.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    [ 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.

    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.

    hashtag
    version `GLIBC_2.15′ not found

    The correct version of Glibc is not installed. See the dependencies section of the installation instructions.

    hashtag
    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.

    hashtag
    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 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.

    hashtag
    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.

    hashtag
    I found a bug how do I report it?

    If you find a bug or have a suggestion please submit a bug report on page.

    hashtag
    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.

    hashtag
    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 . 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.

    To find out specific requirements of game servers check out official game documentation or forums.

    hashtag
    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.

    hashtag
    [ 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

    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 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.

    hashtag
    [ FAIL ] Starting game-server: Permission issues found

    It usually means some scripts or executable files are not actually executable.

    Useful command:

    To learn more about this, see

    hashtag
    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 ? Double-check your rules, and try to disable it for testing

    hashtag
    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

    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

    hashtag
    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.

    Once the details are changed update LinuxGSM.

    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!?

  • 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.

  • 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

  • Did you wait long enough? Sometimes it's just a matter of time until your server shows up on the list

  • Corrupted game server files - run ./gameserver validate
  • File version incompatibility - run ./gameserver validate

  • http://linuxgsm.com/supportarrow-up-right
    https://linuxgsm.comarrow-up-right
    https://docs.linuxgsm.comarrow-up-right
    https://linuxgsm.com/discordarrow-up-right
    https://linuxgsm.com/issuesarrow-up-right
    Metamod: Sourcearrow-up-right
    Metamodarrow-up-right
    Sourcemodarrow-up-right
    SteamDB.infoarrow-up-right
    GitHub issuesarrow-up-right
    http://steampowered.comarrow-up-right
    https://steamdb.info/app/403240/depots/arrow-up-right
    Ownership
    examplearrow-up-right
    Permissions
    Firewalls

    Bullseye

    14 August 2021

    12

    stable

    Bookworm

    10 June 2023

    2019-09-24

    2024-05-31

    Stream 9

    2021-12-03

    2027-05-31

    [ FAIL ] Tmux not installed
        * Tmux is required to run this server.
            * Please see the the following link.
            * http://linuxgsm.com/tmux
    apt-get install tmux
    yum install tmux
    [ FAIL ] Script will not run as root!
    wget -N --no-check-certificate https://linuxgsm.sh
    [ 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
    ip="0.0.0.0"
    version `GLIBC_2.15′ not found
    write error: No space left on device
    ./gameserver update-lgsm
    chown -R username:username /home/username
    chmod +x <filename>
    ## GitHub Branch Select
    # Allows for the use of different function files
    # from a different repo and/or branch.
    githubuser="GameServerManagers"
    githubrepo="LinuxGSM"
    githubbranch="master"
    
    ./gameserver update-lgsm
    AMX Mod Xarrow-up-right
    Alliedmoddersarrow-up-right
    Ports

    ARK: Survival Evolved

    hashtag
    Server Resources

    • Official Dedicated Server Guidearrow-up-right

    hashtag
    System Requirements

    Different Maps require different system requirements.

    • TheIsland: 7GB RAM

    • Genesis 2: 12GB RAM

    hashtag
    Config Files

    An example of GameUserSettings.ini can be found .

    hashtag
    Server Settings

    circle-info

    Command line parameters take precedence over configuration files.

    hashtag
    Common Command-Line Parameters

    Below is a list of common Command-Line parameters. For a complete list see the .

    Parameter
    Description

    hashtag
    Common Configuration File Settings

    Below is a list of common Configuration settings. For a complete list see the .

    The following options must come under the [ServerSettings] section of GameUserSettings.ini:

    Variable
    Description

    The following options must come under the [SessionSettings] section of GameUserSettings.ini.

    Variable
    Description

    The following options must come under the [/Script/Engine.GameSession] section of GameUserSettings.ini.

    Variable
    Description

    The section [ModInstaller] handles each extra Steam Workshop Mods/Maps/TC IDs in the Game.ini.

    Variable
    Description

    hashtag
    Alt Saved Directory Name

    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.

    circle-exclamation

    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:

    hashtag
    Official Map Names

    • TheIsland

    • TheCenter

    • ScorchedEarth_P

    hashtag
    Mod Support

    ARK server mods are managed using the , this allows the auto-install and update of mods.

    hashtag
    Adding Mods

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

    circle-exclamation

    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:

    -AutoManagedMods is the required 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.

    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.

    For the example mod add the following to GameUserSettings.ini other mods may require their own configuration as per their documentation.

    For more config options for WBUI see this .

    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.

    circle-info

    Large mods may take several minutes to download to the server.

    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.

    hashtag
    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.

    circle-info

    To get individual item IDs from collections you can use the .

    hashtag
    IP Addressing

    hashtag
    Multihome

    The -MultiHome parameter is used to bind the server to a specific interface. By default, LinxuGSM sets this to the ${ip} variable.

    hashtag
    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.

    hashtag
    Multi-Instance

    ARK can work with LinuxGSM 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.

    hashtag
    CrossARK (Clusters)

    A 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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    Adding Servers to Clusters

    Firstly, set up .

    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.

    circle-info

    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.

    hashtag
    Server 1 (arkserver.cfg)

    hashtag
    Server 2 (arkserver-2.cfg)

    Once both server instances have been started check that the cluster directory has been created in ShooterGame/Saved/clusters/hsqCd8MR65VFRFdPcDjw.

    circle-info

    This may require you to connect to an instance first

    circle-exclamation

    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.

    -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.

    ServerPassword=

    If specified, players must provide this password to join the server.

    serverPVE=

    If True, disables and enables

    Ragnarok
  • Aberration_P

  • Extinction

  • Valguero_P

  • Genesis

  • CrystalIsles

  • Gen2

  • LostIsland

  • Fjordur

  • PGARK

  • SessionName

    -MultiHome

    Enables multihoming.

    -Port

    -QueryPort

    -AutoManagedMods

    Steam only, automatic MOD download/installation/updating. Mod IDs are listed in Game.ini under [ModInstaller] section.

    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.

    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

    MaxPlayers=70

    Specifies the maximum number of players that can play on the server simultaneously.

    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.

    Official Dedicated Server Configurationarrow-up-right
    Steam Workshoparrow-up-right
    Official ARK: Survival Evolved Server Administration forumarrow-up-right
    herearrow-up-right
    Ark Wikiarrow-up-right
    Ark Wikiarrow-up-right
    Steam Workshoparrow-up-right
    Steam Workshoparrow-up-right
    Editable Server UI (WBUI) Open Source - 924619115arrow-up-right
    parameter
    linkarrow-up-right
    Steam Collection ID Grabberarrow-up-right
    multi instances
    CrossARKarrow-up-right
    multiple ARK game server instances

    Error Codes

    Common

    hashtag
    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.

    hashtag
    Codes

    hashtag
    Error 0x10E

    Seems to affect HLDS based servers. Running again often fixes the issue.

    hashtag
    Error 0x202

    Not enough disk space.

    hashtag
    Error 0x206

    circle-info

    Unknown error, if you have any details please let us know

    circle-exclamation

    Missing content_log.txt if you have experienced this error and have a log please let us know.

    hashtag
    Error 0x212

    Not enough disk space.

    hashtag
    Error 0x402

    Connection issue with steam, you will need to wait for the steam servers to recover.

    circle-exclamation

    Missing content_log.txt if you have experienced this error and have a log please let us know.

    hashtag
    Error 0x602

    circle-info

    Unknown error, if you have any details please let us know

    hashtag
    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.

    hashtag
    Error 0x626

    Missing update files

    hashtag
    Error 0x6A6

    Corrupt update files.

    hashtag
    Error 0x2

    circle-exclamation

    Missing content_log.txt if you have it please let us know.

    hashtag
    Error 0x6

    No connection to content servers.

    hashtag
    0x3

    hashtag
    0x5

    hashtag
    0x11

    hashtag
    0x61

    hashtag
    0x101

    hashtag
    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.

    circle-check

    If you have experienced an error we don't have logs for please provide them to us to assist in diagnosing the issue.

    hashtag
    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

    This table is from 2015 and is probably outdated now but it's the best we currently have.

    hashtag
    ulimit SteamCMD startup error

    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:

    hashtag
    ERROR! Failed to install app '<appid_number>' (No subscription)

    The Steam account being used does not have a license for the required game.

    hashtag
    ERROR! Password check for AppId <appid_number> returned error Failure.

    The password for the branch is incorrect.

    hashtag
    [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.

    hashtag
    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.

    hashtag
    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.

    hashtag
    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.

    serverfiles/ShooterGame/Saved/Config/LinuxServer/GameUserSettings.ini
    serverfiles/ShooterGame/Saved/Config/LinuxServer/Game.ini
    altsavedirectoryname=
    ShooterGame/Saved/TheIsland
    [ServerSettings]
    ActiveMods=924619115
    [ModInstaller]
    ModIDS=924619115
    [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
    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)
    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
    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
    Logo

    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

    Reason

    Error! App '90' state is 0x10E after update job.

    Hex

    0x10E

    Decimal/StateFlags

    270

    Reason

    Not enough disk quota

    Hex

    0x202

    Decimal/StateFlags

    514

    Reason

    Hex

    0x206

    Decimal/StateFlags

    518

    ​Title

    ​Title

    Reason

    ​Not enough disk space

    Hex

    0x212

    Decimal/StateFlags

    530

    Reason

    Connection issue

    Hex

    0x402

    Decimal/StateFlags

    1026

    Reason

    Hex

    0x602

    Decimal/StateFlags

    1538

    Reason

    Disk write failure

    Hex

    0x606

    Decimal/StateFlags

    1542

    Reason

    Missing update files

    Hex

    0x626

    Decimal/StateFlags

    Reason

    Corrupt update files

    Hex

    0x6a6

    Decimal/StateFlags

    Reason

    Hex

    0x2

    Decimal/StateFlags

    2

    Reason

    No connection to content servers

    Reason 2

    Received 401 (Unauthorized) HTTP response for depot 11

    Hex

    0x6

    Decimal/StateFlags

    6

    StateInvalid

    0

    StateUninstalled

    1

    StateUpdateRequired

    2

    StateFullyInstalled

    4

    StateEncrypted

    8

    StateLocked

    16

    file-download
    6KB
    content_log_0x10E.txt
    arrow-up-right-from-squareOpen
    file-download
    2KB
    content_log_0x202.txt
    arrow-up-right-from-squareOpen
    file-download
    4KB
    content_log_0x212.txt
    arrow-up-right-from-squareOpen
    file-download
    3KB
    content_log_0x602.txt
    arrow-up-right-from-squareOpen
    file-download
    2KB
    content_log_0x606.txt
    arrow-up-right-from-squareOpen
    file-download
    6KB
    content_log_0x626.txt
    arrow-up-right-from-squareOpen
    file-download
    12KB
    content_log_0x6a6.txt
    arrow-up-right-from-squareOpen
    file-download
    2KB
    content_log_0x6.txt
    arrow-up-right-from-squareOpen
    file-download
    52KB
    content_log_0x6-2.txt
    arrow-up-right-from-squareOpen

    StateFilesMissing

    Cross-ARK Data Transferarrow-up-right
    GameUserSettings.iniarrow-up-right
    PvParrow-up-right
    PvEarrow-up-right
    Error! App '90' state is 0x10E after update job.
    Error! App '<appid_number>' state is 0x202 after update job.
    Error! App '<appid_number>' state is 0x206 after update job.
    Error! App '<appid_number>' state is 0x212 after update job.
    Error! State is 0x402 after update job.
    Error! State is 0x602 after update job.
    Error! App '<appid_number>' state is 0x606 after update job.
    Error! App '232250' state is 0x626 after update job.
    Error! App '317670' state is 0x6A6 after update job.
    Error! App '<appid_number>' state is is 0x2 after update job.
    Error! App '<appid_number>' state is 0x6 after update job.
    Update state (0x3) reconfiguring, progress: 0.00 (0 / 0)
    Update state (0x5) validating, progress: 13.48 (1554089956 / 11530459441)
    Update state (0x11) preallocating, progress: 8.53 (983870089 / 11530459441)
    Update state (0x61) downloading, progress: 1.11 (127644881 / 11530459441)
     Update state (0x101) committing, progress: 3.43 (395043827 / 11530459441)
    ./steamcmd.sh: line 17: ulimit: open files: cannot modify limit: Operation not permitted
    ulimit -n 2048

    Rust

    hashtag
    System requirements

    • Minimum RAM: 9GB, Increases depending upon map size

    • CPU: Dual-core 3.4GHz

    • Bandwidth: 10mbps upload

    hashtag
    Useful Links

    hashtag
    General Information

    hashtag
    RustAdmin

    Server RCON administration tool

    hashtag
    Online Rcon tool by Facepunch

    hashtag
    Wipe

    A server wipe is used to reset a Rust server by deleting certain types of data about the map and players.

    circle-info

    A wipe will keep the Rust+ data intact.

    hashtag
    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.

    hashtag
    Full Wipe

    A full wipe will remove all the player-made buildings, resources and all player's blueprints.

    hashtag
    Automated Wipe

    Using it is possible to automate your server wipes. The below example will wipe the server every Sunday night at midnight.

    hashtag
    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.

    hashtag
    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.

    If a Rust update has been released, then an Oxide update will soon follow. To update Oxide, you can then run:

    hashtag
    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.

    hashtag
    RCON

    hashtag
    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:

    • Rustadmin: (supports both rconweb=1 and rconweb=0)

    • Facepunch web tool:

    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.

    hashtag
    Essential RCON Commands

    Note: append server.writecfg after adding an admin, and player needs to reconnect the server in order for it to be applied.

    hashtag
    Rust Settings

    Below is a complete list of all Rust server settings.

    circle-info

    A complete list can be gathered by typing find . into Rust Rcon

    circle-info

    Last updated: 19/11/23

    hashtag
    Variables

    hashtag
    Commands

    https://developer.valvesoftware.com/wiki/Rust_Dedicated_Serverarrow-up-right
    https://www.rustadmin.com/arrow-up-right
    https://facepunch.github.io/webrcon/arrow-up-right
    cron
    http://oxidemod.org/resources/rusty-server-rcon-administration-tool.53/arrow-up-right
    https://www.rustadmin.com/arrow-up-right
    http://facepunch.github.io/webrcon/#/homearrow-up-right
    ./rustserver map-wipe
    ./rustserver full-wipe
    0 0 * * 0 /home/rustserver/rustserver map-wipe > /dev/null 2>&1
    seed=""
    ./rustserver mods-install
    ./rustserver mods-update
    oxide.reload PluginName
    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
    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)
    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/docs/steam.rst at master · lutris/lutrisGitHubchevron-right
    Logo