Server Configuration

From Squad Wiki
Jump to: navigation, search

Requirements[edit | edit source]

Windows[edit | edit source]

Visual C++ Redistributable for Visual Studio 2013 vc_redist.x64.exe
Visual C++ Redistributable for Visual Studio 2015 vc_redist.x64.exe
DirectX End-User Runtimes (June 2010)

Linux[edit | edit source]

GLIBC 2.17 or higher

Installation[edit | edit source]

Windows[edit | edit source]

1. Download SteamCmd and extract to your preferred directory.

2. Open SteamCmd or create a file called "update server.bat" with the following contents.

SET STEAMCMD="C:\steamcmd\steamcmd.exe"
%STEAMCMD% +login anonymous +force_install_dir "C:\servers\squad_server" +app_update 403240 validate

3. Run the .bat file to install the server files. When the installation is complete, you can close the window.

4. Go to the server folder ("C:\servers\squad_server"), and create a new file called "start.bat" with the following contents. This is the file you will use to start the server.

 start SquadServer.exe Port=7787 QueryPort=27165 FIXEDMAXPLAYERS=80 RANDOM=ALWAYS -log

Your server is now installed, however you must still configure your network to allow players to connect to your server from the internet. You can find Squad's connection ports in the "Ports to Open" section below. Directions for port forwarding will be dependent on your model router / network setup.

Further info on server setup and configuration can be found in their respective sections on this page.


Linux[edit | edit source]

First of all this guide assumes you've got a Linux Distribution installed with 64 bit architecture. Most hosting companies will run 64bit so not to worry.
Other than that, this guide needs no linux experience whatsoever and will be in completely "for dummies" mode.
Anything in this guide that comes after the symbol $ is a command that you're supposed to run in the linux terminal.
PROTIP: The linux terminal autocompletes with TAB. So if you have a file or folder called "testfolder" you can write "test" and press tab and it will autofill to testfolder!
A suggested software to use to connect to your linux server terminal is PUTTY. https://the.earth.li/~sgtatham/putty/latest/w64/putty.exe


Any questions? Contact [M] Nordic Socialist on Discord, you can find me in the Squad Hosting discord http://discord.me/squadhosting or www.mumblerines.com/discord
All right, let's get started:
INSTALLING SERVER:
1. Log in as root and install the software screen and a library needed for SteamCMD

    Debian/Ubuntu: $apt-get install screen
                   $apt-get install lib32gcc1
    CentOS: $yum -y install screen
            $yum -y install glibc libstdc++
            $yum -y install glibc.i686 libstdc++.i686

2. Create a user you want to use for the squadservers.

    $adduser username

Enter a password for the user of your own choosing. You may have to change the password with "sudo passwd username" When prompted for full name, room number, work phone, home phone, and other just press enter. When asked if information is correct write Y and press enter


3. Log on to the new user account: ssh username@localhost and then the password you selected.

4. Make a directory named SquadServer

 
    $mkdir SquadServer

5. Enter the folder

    $cd SquadServer

6. Make a folder for the first server instance

    $mkdir server1

7. Download SteamCMD

    $wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz

NOTE: Some have complained about getting an untrusted/license error of some sort. If that is the case, try this:

    $wget http://media.steampowered.com/installer/steamcmd_linux.tar.gz

8. Unpack steamCMD

    $tar zxvf steamcmd_linux.tar.gz

9. Create a script for installing (And later updating) the first serverinstance

    $nano updateserver1.sh - This opens a text editor.
    
    Copy paste the following into the file: "./steamcmd.sh +login anonymous +force_install_dir server1 +app_update 403240 validate"
    
    Close the file and save by pressing ctrl+o and hitting enter. Exit by pressing ctrl+x

10. Make files in the folder executeable

    $chmod +x *

11. Install the server instance (this same command is used later to update the server when a new version is released.)

    $./updateserver1.sh

12. When it's finished it will say "Success! App '403240' fully installed." Quit SteamCMD by writing

    $exit

and hitting enter.

13. Create a script for starting the server instance

    $nano startserver1.sh

14. Copy paste the following into the file:

cd server1; ./SquadServer.sh Port=7787 QueryPort=27165 FIXEDMAXPLAYERS=80 RANDOM=NONE

15. Save and close the file by pressing ctrl+o > Enter > Ctrl+X
16. Make the script and the server folder executeable

    $chmod +x startserver1.sh
    $chmod +x server1

17. Open a screen window to run the server in then enter that screen

    $screen -dmS server1
    $screen -r server1

18. Start your server

    $./startserver1.sh 
    

Screen allows the server to run even if you've shut down your SSH session (putty).

EDITING CONFIG FILES:

1. Log on as your the user account running the server and go into the Serverconfig folder located in SquadServer/server1/Squad/ServerConfig in our example.

    $ cd SquadServer
    $ cd server1
    $ cd Squad
    $ cd ServerConfig

2. Open the file you wish to edit with NANO.

    $nano Server.cfg

Edit file. When you're done, save the file with ctrl+o and then enter. Exit nano with ctrl+X.

STOPPING SERVER:

1. SSH to your linux server as the user running the squadserver. (Not root) Once in the terminal, open up the screen for said server instance, in above example called server1

    $screen -r server1

2. You will now see the SquadServer log window, press CTRL+C and it will shut the server down. After that you can start it again with your startcommand.


Docker[edit | edit source]

If your server is running Docker, you can skip the above steps and simply use:

docker run -d --net=host --name=squad-dedicated cm2network/squad

The container will automatically update the game on startup, so if there is a game update just restart the container.

The config is located here: /home/steam/squad-dedicated/Squad/ServerConfig/

If you want to launch another instance you can increment the environment variables, using -e (--env):

docker run -d --net=host -e PORT=7788 -e QUERYPORT=27166 -e RCONPORT=21115 --name=squad-dedicated2 cm2network/squad

You can find the associated Docker Hub page here: https://hub.docker.com/r/cm2network/squad/

MULTI INSTANCE[edit | edit source]

LINUX[edit | edit source]

The important things to create different instance inside your server are these: 

- Duplicate the directory and rename it.

- After that, edits the config files and set on the Rcon.cfg a port 10 numbers later the one of the previous instance.

EXAMPLE:

Server1 Rcon Port: 21114

Server2 Rcon Port: 21124

- Keep on your mind to change the port of connection in the start.sh script to avoid other problems.

BETA PARAMETERS[edit | edit source]

LinuX[edit | edit source]

./steamcmd.sh +login anonymous +force_install_dir server1 +app_update 403240 -beta NAMEOFTHEBETA -betapassword PASSWORD validate +quit 

Windows[edit | edit source]

SET STEAMCMD="C:\steamcmd\steamcmd.exe"
%STEAMCMD% +login anonymous +force_install_dir "C:\servers\squad_server" +app_update 403240 -beta NAMEOFTHEBETA -betapassword PASSWORD validate +quit

Tips[edit | edit source]

Make sure Steam Client is closed. If its open Squad Server will not run. For support issues related to server hosting please visit our Discord Server http://discord.me/squadhosting

(Windows) Allowing the SquadServer.exe files through the firewall will save you headaches.

When hosting a Squad server and playing Squad on the same PC, the server must be started before logging on to Steam and launching Squad. Otherwise it won't work.

AppID - 403240[edit | edit source]

Ports to Open[edit | edit source]

Port = Game port = UDP (Default 7787, 7788 UDP) Need to be open on Windows firewall and router.
QueryPort = Steam query port = UDP (Default 27165 UDP)
QueryPort+1 = Second Steam query port = UDP and TCP (Default 27165, 27166, 27167 UDP and TCP)
RCON Port = UDP and TCP (Default 21114) must be open.

Command Line[edit | edit source]

All of the following parameters can be added to your starting command line for additional configuration. Be careful to avoid typos when adding these!

MULTIHOME = The IP Address you want to bind the server to. (Use only if you have multiple IPs on your server) (Optional)
Port = Game port
QueryPort = Steam query port
RANDOM = Randomize map rotation (ALWAYS, FIRST, NONE) (Optional)
FIXEDMAXPLAYERS = Player count cannot go higher than this (Optional)
FIXEDMAXTICKRATE = MAX server tickrate (Optional)
PREFERPREPROCESSOR = CPU Affinity (Optional) UNTESTED
-log = Display a log window on the server (Optional)
-fullcrashdump = Save a full dump file on crash (can become quite large sometimes) (Optional)

The following line implements additional start parameters as an example.

start SquadServer.exe MULTIHOME=1.2.3.4 Port=7787 QueryPort=27165 FIXEDMAXPLAYERS=80 FIXEDMAXTICKRATE=50 RANDOM=ALWAYS -log

Set processor Affinity[edit | edit source]

Windows[edit | edit source]

You can use the start-command allows you to set the core thread affinity for each server (if you run several servers on one machine):

start /AFFINITY C /WAIT SquadServer.exe Port=7787 QueryPort=27165 FIXEDMAXPLAYERS=80 RANDOM=ALWAYS -log

Calculating AFFINITY[edit | edit source]

Squad Affinity Calculator.png

Open your Windows calculator.

Step 1 - Click menu icon

Step 2 - Enable "programmer" mode

Step 3 - Toggle bit keypad

Step 4 - Click until you see BYTE which corresponds to 4 core 8 threads CPU (You can select other values to correspond your CPU).

Step 5 - Click on HEX

Core thread count starts from 0, you can see which number is responsible for which core thread on the third image. 1 means core thread is selected, 0 means core thread is ignored.

Result you need is shown in "HEX", if you have all core thread selected 0-7 you will see "FF" as your result. For our /AFFINITY parameter we need then "FF" to set the core affinity to all core threads. If you want to select only core threads 4-7 (0000 1111) your result should be "F".

Linux[edit | edit source]

Linux users can also set their core affinity by using the "taskset" command in their start line. Keep in mind that core threads are zero-indexed. This means if you have 8 processor threads, you can assign cores 0-7.

cd server1; taskset -c 0-3 ./SquadServer.sh Port=7787 QueryPort=27165 FIXEDMAXPLAYERS=80 RANDOM=NONE

Files (Instanced hosts start here)[edit | edit source]

Configuration files are located in C:\servers\squad_server\Squad\ServerConfig\ Configuration files located in this directory are

Admins.cfg
Bans.cfg
License.cfg
MapRotation.cfg
Motd.cfg (optional)
Rcon.cfg
RemoteAdminListHosts.cfg
RemoteBanListHosts.cfg
Server.cfg
ServerMessages.cfg

Adding Admins in Admins.cfg[edit | edit source]

Admins are now created by groups and groups are assigned to admins. You can create as many groups as you want with any types of permissions. All the permissions will be in the config file commented out. These files will not be over writeable so when we add new permissions you will need to check here or the wiki for updates. The below are just examples. Please note that it needs to be SteamId64. You can convert your ID at steamid.io/lookup/

Group=SuperAdmin:changemap,cheat,private,balance,chat,kick,ban,config,cameraman,debug,pause
Group=Admin:changemap,balance,chat,kick,ban,cameraman,pause
Group=Moderator:changemap,chat,kick,ban
Admin=76561115695178:Moderator //Player 5
Admin=8915618948911:Moderator //Player 4
Admin=7894591951519:Admin //Player 3
Admin=7984591565611:SuperAdmin //Player 2
Admin=917236241624:SuperAdmin //Player 1
Admin=45365435431:Admin //Player 8792 

A list of group permission are as follows:

//// Valid access levels are as follows
////		startvote - not used
////		changemap
////		pause - Pause server gameplay
////		cheat - Use server cheat commands
////		private	- Password protect server
////		balance	- Group Ignores server team balance
////		chat - Admin chat and Server broadcast
////		kick
////		ban
////		config - Change server config
////		cameraman - Admin spectate mode
////		immunity - Cannot be kicked / banned
////		manageserver - Shutdown server
////		featuretest - Any features added for testing by dev team
////		reserve - Reserve slot
////		demos - Record Demos (not working)
////		debug - show admin stats command and other debugging info
////		teamchange - No timer limits on team change
////		forceteamchange - Can issue the ForceTeamChange command
////		canseeadminchat - This group can see the admin chat and teamkill/admin-join notifications

Bans in Bans.cfg[edit | edit source]

This is where your bans will go. They need to be in the format of steamid:unix timestamp of unban //comment So an example file will look like this

76561198039509812:0 //Permanent ban for cheating
7862895148978485:1454455855 //team killing

Make sure if you manually add / remove a ban that the file ends with a new line character. Each ban goes on its own line.

Map Rotation in MapRotation.cfg[edit | edit source]

If you add the general map names (such as below without a specific game mode). Our parser will do all variations of it including AAS, INS, etc. Map names can be seen from the DefaultGame.ini file. Each map entry goes on a new line. (Keep in mind that MapRotation.cfg, unlike most other Squad config files, will only be loaded at server start.)

Al Basrah
Belaya
Chora
Fool's Road
Gorodok
Kamdesh
Kohat
Kokan
Logar Valley
Mestia
Narva
Sumari
Tallil Outskirts
Yehorivka

If you want a specifc map version you can add the below into the rotation file

Al Basrah
Al Basrah RAAS v1
Al Basrah Invasion v1
Al Basrah Invasion v2
Al Basrah Insurgency v1
 
Belaya
Belaya AAS v1
Belaya AAS v2
Belaya AAS v3
Belaya RAAS v1
Belaya Invasion v1
Belaya Invasion v2
Belaya Invasion v3
 
Chora
Chora AAS v1
Chora AAS v2
Chora RAAS v1
Chora Invasion v1 Night
Chora Insurgency v1
Chora Skirmish v1 Night
 
Fool's Road
Fool's Road AAS v1
Fool's Road AAS v2
Fool's Road AAS v3
Fool's Road AAS v4
Fool's Road RAAS v1
Fool's Road Skirmish v1
Fool's Road Skirmish v2
 
Gorodok
Gorodok AAS v1
Gorodok AAS v2
Gorodok AAS v3
Gorodok AAS v4
Gorodok RAAS v1
Gorodok RAAS v2
Gorodok Invasion v1
Gorodok Invasion v2
Gorodok Skirmish v1
 
Kamdesh
Kamdesh AAS v1
Kamdesh RAAS v1
Kamdesh RAAS v2
Kamdesh RAAS v3
Kamdesh Invasion v1
Kamdesh Invasion v2
Kamdesh Invasion v3
Kamdesh Insurgency v1
Kamdesh Insurgency v2
Kamdesh Skirmish v1
 
Kohat
Kohat AAS v1
Kohat AAS v2
Kohat RAAS v1
Kohat Invasion v1
Kohat Insurgency v1
Kohat Skirmish v1
 
Kokan
Kokan AAS v1
Kokan AAS v2
Kokan RAAS v1
Kokan Invasion v1
Kokan Insurgency v1
Kokan Skirmish v1
 
Logar Valley
Logar Valley AAS v1
Logar Valley AAS INF v1
Logar Valley RAAS v1
Logar Valley Insurgency v1
Logar Valley Insurgency v1 Night
 
Mestia
Mestia AAS v1
Mestia AAS v2
Mestia RAAS v1
Mestia Invasion v1
Mestia Invasion v2
 
Narva
Narva AAS v1
Narva AAS v2
Narva AAS v3
Narva RAAS v1
Narva Invasion v1
Narva Invasion v2
Narva Skirmish v1
 
Sumari
Sumari AAS v3
Sumari RAAS v1
Sumari Insurgency v1
Sumari Skirmish v1

Tallil Outskirts
Tallil Outskirts AAS v1
Tallil Outskirts RAAS v1
Tallil Outskirts RAAS v2
Tallil Outskirts Invasion v1
Tallil Outskirts Skirmish v1
Tallil Outskirts Skirmish v2
 
Yehorivka
Yehorivka AAS v1
Yehorivka AAS v2
Yehorivka AAS v3
Yehorivka AAS v5
Yehorivka RAAS v1
Yehorivka RAAS v2
Yehorivka Invasion v1
Yehorivka Invasion v2
Yehorivka Skirmish v1

Map Rotation: Add Steam-Workshop Maps[edit | edit source]

See this article: How to add one or more Steam Workshop Maps to the Squad Server

Message of the day in Motd.cfg[edit | edit source]

Motd.cfg is an optional file that can be created the ServerConfig folder that will display a small text box to each player on entering the server. This is ideal for displaying server information, simple rules, or other messages. Be mindful though that text entered into this file will not wrap in game, and will overflow out of view.

Remote Admin Lists in RemoteAdminListHosts.cfg[edit | edit source]

Each line should contain a URL to the admin file. The admin file will follow the exact same format as above. This should be used if you run multiple servers and would like to have a single admin file for all of them. If a player is listed in multiple files, their permissions will be combined.

Remote Ban Lists in RemoteBanListHosts.cfg[edit | edit source]

Each line should contain a URL to the ban file. The ban file will follow the exact same format as above. This should be used if you run multiple servers and would like to have a single admin file for all of them.

Server Configuration Settings in Server.cfg[edit | edit source]

This is the general server config file. Each variable should be on its own line. New additions will be added to this wiki. Since we do not overwrite config files you will need to manually add them to your existing server config if you wish to alter the default value.

ServerName="Squad Dedicated Server"
IsLANMatch=false
ShouldAdvertise=true
MaxPlayers=40
NumReservedSlots=0
NumPlayersDiffForTeamChanges=3
AllowTeamChanges=true
PreventTeamChangeIfUnbalanced=true
EnforceTeamBalance=true
RejoinSquadDelayAfterKick=180
ServerMessageInterval=300
ServerPassword=Password
AutoTkBanTime=1209600
TKAutoKickEnabled=true //set to false to disable autokick system, required true for licensed servers.
RecordDemos=false
VehicleClaimingDisabled=false
VehicleKitRequirementDisabled=false
AllowQA=false
// Forced on for Licensed servers (Only OWI staff & qa are admins)
AllowCommunityAdminAccess=false
// Forced on for Licensed servers (Only OWI devs)
AllowDevProfiling=false

Server Messages in ServerMessages.cfg[edit | edit source]

This will rotate server messages every x seconds (based on Server.cfg setting). Each message should have its own line. This should be used to display server rules and contact information.

Rcon control in Rcon.cfg[edit | edit source]

If you do not want to use RCON, leave the password= empty. NOTE: Leaving the RCONIP=0.0.0.0 will bind it to the public default IP. If your server has multiple IP's please specify the address here.

// Edit this IP to bind the RCON socket to an alternate IP address.
// Alternatively, set this from the command line with the argument:
//   RCONIP=0.0.0.0
IP=0.0.0.0
// Edit this IP to bind the RCON socket to an alternate port.
// Alternatively, set this from the command line with the argument:
//   RCONPORT=21114
Port=21114
// Set this to enable the usage of RCON with the given password for login.
// Leaving this empty will keep RCON turned off.
// Alternatively, set this from the command line with the argument:
//   RCONPASSWORD=MyPassword
Password=
// Set this to set the maximum number of allowable concurrent RCON
// connections to the server.
// Alternatively, set this from the command line with the argument:
//   RCONMAXCONNECTIONS=5
MaxConnections=5
// Edit this to customize the number of seconds without contact from a connected
// console before the server checks with that computer to see if the session is
// still active, or if it got disconnected. Supports values between 30 and 3600.
// Alternatively, set this from the command line with the argument:
//   RCONSECONDSBEFORETIMEOUTCHECK=120
SecondsBeforeTimeoutCheck=120

Tournament Mode[edit | edit source]

1. To enable tournament mode, you must run the server instance at least once to generate the necessary file.

2. Go to your server folder, and locate the Game.ini file under \Saved\Config\WindowsServer, (or Saved\Config\LinuxServer), and add the below contents as needed.

3. A server restart is necessary to apply any changes to the tournament mode configuration.

For more information, see this forum post. This mode was added with Alpha 5.2.

V12 compatible version:

[/Script/Squad.SQGameMode]
bTournamentMode=true

[/Script/Squad.SQTournamentModeRuleset]
Restrictions=(Setting="r.ShadowQuality", Min=1, Max=5)
Restrictions=(Setting="r.ViewDistanceQuality", Min=3, Max=4)
Restrictions=(Setting="r.ViewDistanceScale", Min=1, Max=4)
Restrictions=(Setting="grass.MaxUpdateFrequency", Min=10, Max=40)

Old version:

[/Script/Squad.SQGameMode]
bTournamentMode=true

[/Script/Squad.SQTournamentModeRuleset]
Restrictions=(Setting="r.LightFunctionQuality", Min=1, Max=1)
Restrictions=(Setting="r.ShadowQuality", Min=3, Max=5)
Restrictions=(Setting="r.Shadow.CSM.MaxCascades", Min=1, Max=10)
Restrictions=(Setting="r.Shadow.MaxResolution", Min=1024, Max=4096)
Restrictions=(Setting="r.Shadow.RadiusThreshold", Min=0.03, Max=0.05)
Restrictions=(Setting="r.Shadow.DistanceScale", Min=0.5, Max=1.0)
Restrictions=(Setting="r.Shadow.CSM.TransitionScale", Min=0.4, Max=1.0)
Restrictions=(Setting="r.DistanceFieldShadowing", Min=0, Max=1)
Restrictions=(Setting="r.DistanceFieldAO", Min=0, Max=1)
Restrictions=(Setting="r.AllowLandscapeShadows", Min=0, Max=1)
Restrictions=(Setting="r.MotionBlurQuality", Min=0, Max=4)
Restrictions=(Setting="r.AmbientOcclusionMipLevelFactor", Min=0.4, Max=1.0)
Restrictions=(Setting="r.AmbientOcclusionMaxQuality", Min=0, Max=100)
Restrictions=(Setting="r.DepthOfFieldQuality", Min=0, Max=4)
Restrictions=(Setting="r.RenderTargetPoolMin", Min=300, Max=1000)
Restrictions=(Setting="r.LensFlareQuality", Min=0, Max=3)
Restrictions=(Setting="r.SceneColorFringeQuality", Min=0, Max=1)
Restrictions=(Setting="r.EyeAdaptationQuality", Min=0, Max=2)
Restrictions=(Setting="r.FastBlurThreshold", Min=0, Max=100)
Restrictions=(Setting="r.Upscale.Quality", Min=1, Max=3)
Restrictions=(Setting="r.Tonemapper.GrainQuantization", Min=0, Max=1)
Restrictions=(Setting="r.LightShaftQuality", Min=0, Max=1)
Restrictions=(Setting="r.Filter.SizeScale", Min=0.6, Max=1)
Restrictions=(Setting="r.Tonemapper.Quality", Min=0, Max=5)
Restrictions=(Setting="r.SkeletalMeshLODBias", Min=-1, Max=0)
Restrictions=(Setting="r.ViewDistanceScale", Min=1.0, Max=10.0)
Restrictions=(Setting="r.MipMapLODBias", Min=-1, Max=0)
Restrictions=(Setting="r.Streaming.MipBias", Min=0, Max=1.5)
Restrictions=(Setting="r.MaxAnisotropy", Min=0, Max=16)
Restrictions=(Setting="r.TranslucencyLightingVolumeDim", Min=24, Max=64)
Restrictions=(Setting="r.RefractionQuality", Min=0, Max=2)
Restrictions=(Setting="r.SSR.Quality", Min=0, Max=4)
Restrictions=(Setting="r.SceneColorFormat", Min=3, Max=4)
Restrictions=(Setting="r.DetailMode", Min=0, Max=2)
Restrictions=(Setting="r.TranslucencyVolumeBlur", Min=0, Max=1)
Restrictions=(Setting="r.MaterialQualityLevel", Min=0, Max=2)
Restrictions=(Setting="r.SSS.Scale", Min=0, Max=1)
Restrictions=(Setting="r.SSS.SampleSet", Min=0, Max=2)
Restrictions=(Setting="r.EmitterSpawnRateScale", Min=0.125, Max=1.0)
Restrictions=(Setting="r.ParticleMinTimeBetweenTicks", Min=8, Max=33)
Restrictions=(Setting="foliage.DensityScale", Min=0, Max=1.0)
Restrictions=(Setting="grass.DensityScale", Min=0, Max=1.0)
Restrictions=(Setting="grass.MaxUpdateFrequency", Min=10, Max=30)
Restrictions=(Setting="r.PostProcessAAQuality", Min=0, Max=6)
Restrictions=(Setting="r.Shadow.MaxCSMResolution", Min=512, Max=4096)
Restrictions=(Setting="r.VolumetricFog", Min=0, Max=1)
Restrictions=(Setting="r.Streaming.LimitPoolSizeToVRAM", Min=0, Max=1)
Restrictions=(Setting="r.Streaming.MaxEffectiveScreenSize", Min=0, Max=0)
Restrictions=(Setting="r.SSS.HalfRes", Min=0, Max=1)
Restrictions=(Setting="r.ParticleLightQuality", Min=0, Max=2)