Server Konfiguration

Visual C++ Redistributable for Visual Studio 2015 vc\_redist.x64.exe

DirectX End-User Runtimes (June 2010)

2. Erstelle eine BAT-Datei namens "update-server.bat" mit dem folgenden Inhalt.Ersetzte hierbei die markierten Werte mit den, die zu deinem System passen.

```
SET STEAMCMD="//Pfad zum Programm steamcmd.exe"
%STEAMCMD% +login anonymous +force_install_dir "//Pfad zum Ordner wo der Server installiert werden soll" +app_update 403240 validate

```
3. Führe die BAT-Datei aus und lass das Programm durchlaufen, danach kannst du das Fenster schließen.

4. Gehe in den Ordner, in dem der Server installiert werden sollte und erstelle eine weiter BAT-Datei namens "start.bat" , mit der du den Server in Zukunft starten kannst, mit folgendem Inhalt:

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

```

Somit hast du deinen Server fertig installiert, damit andere Spieler diesen Server betreten können musst du aber noch einige Netzwerk-Einstellungen machen, die hierfür nötigen Port-Nummern kannst du dem Part "Zu öffnende Ports" entnehmen.

Weiterführende Infos bezüglich Setup und Konfiguration des Servers findest du in den jeweiligen Abschnitten dieser Seite.

### Linux

Diese Anleitung setzt voraus, dass du eine Linux-Distribution mit 64-bit Architektur besitzt.

Alles was in diesem Guide auf ein '$' folgt ist ein Command und muss in einem Terminal ausgeführt werden.

Um dich mit einen entfernten Server zu verbinden, empfiehlt es sich PUTTY. zu benutzen. Natürlich kann aber auch jedes andere Programm, was sich hierfür eignet genutzt werden.

Installation des Servers:

1. Logge dich als root ein und installiere das Programm "Screen" und eine Bibliothek die für das Programm SteamCMD benötigt wird.

```
    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. Erstelle einen Benutzer über den die Squad-Server laufen soll.

```
    $adduser username

```

Wähle in der darauffolgenden Abfrage ein Password. Die darauffolgenden Abfragen kannst du entweder ausfüllen oder einfach mit Enter überspringen.

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

4. Erstelle ein Verzeichnis mit z.B dem Namen SquadServer

```

    $mkdir SquadServer

```

5. Öffne den Ordner

```
    $cd SquadServer

```

6. Erstelle einen weiteren Ordner für die Server-Instanz

```
    $mkdir server1

```

7. Lade dir SteamCMD herunter

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

```

Sollte es Probleme mit der oben genannten Datei geben gibt es hier einen alternativen Download:

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

```

8. Entpacke SteamCMD

```
    $tar zxvf steamcmd_linux.tar.gz

```

9. Erstelle ein Script um den Server zu installieren bzw. später auch upzudaten.

```
    $nano updateserver1.sh

```

Damit öffnest du einen Texteditor.

Füge dann folgenden Inhalt ein:

```
./steamcmd.sh +login anonymous +force_install_dir server1 +app_update 403240 validate

```
Speichere die Datei indem du zuerst Strg+O drückst und dann Enter, zum schließen drücke Strg+X.

10. Markiere die Datei als ausführbare Datei

```
    $chmod +x *

```

11. Installiere den Server mit folgendem Kommando (mit diesem Kommando kannst du später auch den Server updaten)

```
    $./updateserver1.sh

```

12. Wenn die Meldung erscheint, dass das Programm installiert wurde kannst du SteamCMD mit folgendem Befehl verlassen.

```
    $exit

```

13. Erstelle ein Script, mit dem du den Server starten kannst.

```
    $nano startserver1.sh

```

14. Füge die folgenden Zeilen in die Datei ein:

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

```

Speichere die Datei indem du zuerst Strg+O drückst und dann Enter, zum schließen drücke Strg+X.

15. Markiere das gerade erstellte Script und den Ordner als ausführbar.

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

```

16. Erstelle und öffne einen neuen Screen.

```
    $screen -dmS server1
    $screen -r server1

```

17. Starte den Server

```
    $./startserver1.sh

```

Mithilfe von Screen läuft der Server auch weiter, selbst wenn du deine SSH-Verbindung trennst.

Bearbeiten von Config-Datein:

1. Logge doch mit deinem Account ein, auf dem der Server läuft und wechsel in den Ordner in dem sich die Server-Configs befinden.

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

```

2. Öffne die zu bearbeitende Datei mit Nano.

```
    $nano Server.cfg

```

Bearbeite die Datei, wenn du fertig bist kannst du speichern indem du Strg+O drückst und dann Enter. Nano kannst du dann mit Strg+X verlassen.

Stoppen des Servers:

1. Logge dich mit deinem Account ein, auf dem der Server läuft und öffne den Screen.

```
    $screen -r server1

```

2. In dem Screen siehst du den Log des Servers mit der Tastenkombination Strg+C kannst du den Server nun beenden, erneut starten kannst du ihn mit dem unter Punkt 17 gezeigten Befehl.

### Docker

Wenn auf deinem Server Docker läufst und du es benutzt kannst den Server mit diesem Befehl einfach installieren:

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

```

Der Container updatet das Spiel bei jedem Start, somit musst du den Server bei einem neuen Versions-Release nur neustarten.

Die Config findest du im folgenden Pfad: */home/steam/squad-dedicated/Squad/ServerConfig/*

* Docker Volumes

Wenn der Docker Container beschädigt wird, ist der gesamte Dateibaum betroffen. Anstelle Dateien direkt im Docker Container zu bearbeiten sollten lieber Docker Volumes verwendet werden. Dies hat den Vorteil, dass die Daten besser gegen Korruption geschützt sind. Wenn Sie das Container entfernen und aus dem Image einen neuen erstellen, müssen Sie keine Konfigurationsdateien ändern.

```
docker run -d --net=host --volume=/<Your local directory>:/home/steam/squad-dedicated --name=squad-dedicated cm2network/squad

```

* Weitere Instanz

Soll eine weitere Instanz erstellt werden, können die entsprechenden Umgebungsparameter mit -e (--env) inkrementiert werden :

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

```

Denke daran die Rcon.cfg mit dem neuen Port (standartmäßig 21114) zu aktualisieren.

Die entsprechende Docker-Hub Seite findest du hier:
https://hub.docker.com/r/cm2network/squad/

## Mehrere Instanzen

### LINUX

Beim erstellen von mehreren instanzen sind folgende Dinge zu beachten:

- Dupliziere das Verzeichnis und benenne es um.

- Dannach editiere die config files und setze in der Rcon.cfg einen Port mit mindestens 10 Ports abstand zur letzten Instanz.

Beispiel:

Server1 Rcon Port: 21114

Server2 Rcon Port: 21124

- Denk daran den Verbindungsport im start.sh Skript anzupassen um weitere Probleme zu vermeiden.

## BETA PARAMETER

### LinuX

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

```

### Windows

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

```

## Tipps

Stelle fest dass der Steam Client geschlossen ist. Andernfalls wird der Squad Server nicht starten. Für weitere Fragen rund um das Hosten von Servern kannst du uns auf unseren Discord Server besuchen: **http://discord.me/squadhosting**

**(Windows)** SquadServer.exe dateiem in der Firewall freizuschalten kann die viele Kopfschmerzen ersparen.

Sollte auf dem selben Gerät gleichzeitig ein Server und ein Client betrieben werden, ist es wichtig dass der Server gestartet wird, bevor der Steam Client geöffnet wird und das Spiel gestartet wird.

## Zu öffnende Ports

**Port** = Spiel Port = UDP (Standartmäßig 7787, 7788 UDP) Muss in der Windows Firewall und im Router geöffnet sein.

**QueryPort** = Steam query port = UDP (Standartmäßig 27165 UDP)

**QueryPort+1** = Zweiter Steam query port = UDP und TCP (Standartmäßig 27165, 27166, 27167 UDP und TCP)

**RCON Port** = UDP und TCP (Standartmäßig 21114) muss geöffnet sein.

## Startparameter

Die folgende Liste an Parametern kann für erweiterte Konfiguration des Servers beim Start angegeben werden. Versuche Rechtschreibfehler zu vermeiden:

**MULTIHOME** = Die IP-Adresse, an die du den Server binden möchtest. **(Nur bei mehreren IP-Adressen für einen Server empfohlen)** *(Optional)*
**Port = Spiel port**
**QueryPort** = Steam query port

**RANDOM** = Zufällige Kartenroation (ALWAYS, FIRST, NONE) *(Optional)*

**FIXEDMAXPLAYERS** = Spielerzahl kann nicht höher als diesen Wert *(Optional)*

**FIXEDMAXTICKRATE** = MAX server tickrate *(Optional)*

**PREFERPREPROCESSOR** = CPU Affinity *(Optional)* UNTESTED

**-log** = Zeige ein Logfenster vom Server an *(Optional)*

**-fullcrashdump** = Speichere eine volle Logdatei beim Absturz (Kann ziemlich groß werden) *(Optional)*

In der folgenden Zeile ist ein Beispiel für die Implementierung von Startparametern gegeben.

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

### Windows

Du kannst den **start**-command verwenden um die Affinität für jeden Server einzeln zu setzen (wenn mehrere Server auf der gleichen Maschiene laufen):

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

### Affinität Berechnen

Öffne den Windows Taschenrechner.

**Step 1 -** Klicke das **menu icon**

**Step 2 -** Aktiviere "**programmer**" modus

**Step 3 -** Wechsle zu **bit keypad**

**Step 4 -** Klicke bis **BYTE** angezeigt wird, welches zu einem 4 Kerne 8 Threads CPU gehört. (Du kanns andere Werte wählen die zu deiner CPU passen).

**Step 5 -** Klicke auf **HEX**

Thread Werte starten bei 0. Du kannst auf dem dritten Bild erkennen, welche Zahl für welchen Thread zuständig ist. 1 bedeutet, dass der Thread ausgewählt ist und 0, dass der Thread ignoriert wird.

Das Ergebnis wird unter dem Parameter "HEX" angezeigt. Wenn alle verfügbaren Threads ausgewählt wurden (0-7) wird dort ein "FF" angezeigt. Für unsere /AFFINITY Parameter brauchen wir "FF" um die Prozessoraffinität auf alle Threads zu setzen. Wenn du nur die Threads 4-7 (0000 1111) verwenden möchtest sollte das HEX Ergebnis "F" anzeigen.

### Linux

Linux Benutzer können ihre Prozessoraffinität auch mit dem "taskset" Command in der Startzeile festlegen. Beachte dass die Threads bei 0 anfangen zu zählen. Mölchstest du also die Threads 1-8 zuweisen, verwende hierfür die Werte 0-7.

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

```

## Dateien (Instanzierte Hosts beginnen hier)

Configuration Dateien befinden sich unter `C:\servers\squad_server\Squad\ServerConfig\`
Folgende Dateien sind hier enthalten:

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

```

## Admins hinzufügen in Admins.cfg

Admins werden durch Gruppen festgelgt. Diese Gruppen haben dann Admin Privilegien. Es können unendlich viele Gruppen mit unterschiedlichen Rechten erstellt werden. Alle möglichen Berechtigungen sind in der Config-Datei bereits auskommentiert. Diese Dateien sind nicht überschreibbar. Sollen neue Berechtigungen erstellt werden, überprüfe gerne die Wiki nach Updates. Im folgenden befinden sich Beispiele.
Beachte dass die SteamId64 benötigt wird. Steam IDs können steamid.io/lookup/ konvertiert werden.

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

```
Eine Liste von Gruppenberechtigungen sieht wie folgt aus:

```
//// 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
////		immune - 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

```

## Banns in Bans.cfg

Hier werden deine Banneinträge vorgenommen. Sie sollten folgendes Format einhalten
`steamid:unix zeitstempel der entpannung //comment`
Ein Beispiel sieht wie Folgt aus:

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

Wenn Banneinträge manuell hinzugefügt oder entfernt werden ist darauf zu achten dass eine freue neue Zeile sich am Dateiende befindet. Jeder Banneintrag erhält seine eigene Zeile.

## Kartenrotation in MapRotation.cfg

Wirk kein spezifischer Modus zusammen mit dem Kartennamen angegeben, wird automatisch ein zufälliger Modus ausgewählt. Kartennahmen können in der DefaultGame.ini Datei gefunden werden. Jeder Karteneintrag erhält seine eigene Zeile. (Denk daran, dass die MapRotation.cfg, anders als andere Config dateien, nur beim Serverstart geladen wird.)

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

```

## Kartenrotation: Hinzufügen von Steam-Workshop Karten

Folgender Artikel gibt zu dem Thema auskünfte (auf Englisch): How to add one or more Steam Workshop Maps to the Squad Server

## Externe Admin Liste in RemoteAdminListHosts.cfg

Jede Zeile sollte die URL zu einer Admin Datei beinhalten. Die Datei folgt dem selben Format wie die oben genannte Admin.cfg. Diese Option ist dafür gemacht, wenn mehrere Server mit einer Admin-Liste versorgt werden sollen. Steht ein nutzer in mehreren Listen gleichzeitig, werden die rechte seiner Gruppen kombiniert.

## Externe Ban Liste in RemoteBanListHosts.cfg

Jede Zeile sollte die URL zu einer Bann Datei beinhalten. Die Datei folgt dem selben Format wie die oben genannte Bans.cfg. Diese Option ist dafür gemacht, wenn mehrere Server mit einer Bann-Liste versorgt werden sollen.

## Serverkonfiguration Einstellungen in Server.cfg

Dies ist die allgemeine Konfigurationsdatei für den Server. Jede Variable sollte in seiner eigenen Zeile sein.

```
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
FahrzeugeClaimingDisabled=false
FahrzeugeKitRequirementDisabled=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 Nachrichten in ServerMessages.cfg

Die hier hinterlegten Nachrichten werden in bestimmten Intervallen auf dem Server angezeigt. Der Intervall der Nachrichten wird in der Server.cfg Datei definiert. Jede Nachricht sollte in ihrer eigenen Zeile stehen. Diese Nachrichten eignen sich zum Anzeigen von Server Regeln und Kontaktmöglichkeiten.

## Rcon control in Rcon.cfg

Wenn du RCON nicht benutzen möchtest, lass den Parameter **password=** leer.
Hinweis: Die RCONIP=0.0.0.0 bindet die Server IP zu der standartmäßig öffentlichen IP des Servers. Wenn du mehrere IP-Adressen auf deinem Server hast, definiere die gewünschte IP bitte hier:

```
// 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

```