<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://pavlovwiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SaltedCrackerJack</id>
	<title>Pavlov VR Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://pavlovwiki.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SaltedCrackerJack"/>
	<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php/Special:Contributions/SaltedCrackerJack"/>
	<updated>2026-05-12T23:53:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=969</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=969"/>
		<updated>2023-12-05T06:28:25Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* System setup and software installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
(Not required unless hosting large amount of servers )&lt;br /&gt;
&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  &lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  &lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Steam user'''&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Optional] Set the /bin/bash shell for the steam user this will allow you to use arrow keys in terminal and show what folder you are in at all times&amp;lt;pre&amp;gt;sudo chsh -s /bin/bash steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #its recommended for the best experience to keep shack servers at or below 10 players pcvr and psvr are both capped at 24 too. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server (PCVR only)''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &amp;lt;hr&amp;gt;&lt;br /&gt;
=== Interactive Update ALL ===&lt;br /&gt;
will find all server installs on machine and update them will update Ubuntu check what version and do correct updates for that version also UPDATE 29 PCVR STEP  then it will list each server by server name and ask what type it is and then it will update and move to the next&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/Pavlov-updateallservers/tree/main&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== getting map info with just the UGC ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
you will need to get a API key from mod.io for this ... running this bash script and passing a UGC number to it will return the map name  mod.io url and a thumbnail &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HOW TO USE &amp;lt;pre&amp;gt;nano get-map.sh&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
then enter this script &amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ugc=000000&lt;br /&gt;
&lt;br /&gt;
gameID=3959 #PAVLOV IS 3959&lt;br /&gt;
&lt;br /&gt;
api-path=&amp;quot;https://u-*ID NUMBER*.modapi.io/v1&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
api-key=&amp;quot;&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
curl -X GET &amp;quot;${api-path}/v1/games/${gameID}/mods/$(&amp;quot;${ugc:3})?api_key=${api-key}&amp;quot;   -H 'Accept: application/json' | jq  '.logo.thumb_1280x720, .name , .profile_url&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then give script perms to run &amp;lt;pre&amp;gt;sudo chmod +x get-map.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and then run it like this &lt;br /&gt;
&amp;lt;pre&amp;gt;bash get-map.sh UGC3409480   &amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=946</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=946"/>
		<updated>2023-11-24T06:29:47Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Configuring Game.ini */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
(Not required unless hosting large amount of servers )&lt;br /&gt;
&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Optional] Set the /bin/bash shell for the steam user this will allow you to use arrow keys in terminal and show what folder you are in at all times &amp;lt;pre&amp;gt;sudo chsh -s /bin/bash steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #its recommended for the best experience to keep shack servers at or below 10 players pcvr and psvr are both capped at 24 too. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server (PCVR only)''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &amp;lt;hr&amp;gt;&lt;br /&gt;
=== Interactive Update ALL ===&lt;br /&gt;
will find all server installs on machine and update them will update Ubuntu check what version and do correct updates for that version also UPDATE 29 PCVR STEP  then it will list each server by server name and ask what type it is and then it will update and move to the next&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/Pavlov-updateallservers/tree/main&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== getting map info with just the UGC ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
you will need to get a API key from mod.io for this ... running this bash script and passing a UGC number to it will return the map name  mod.io url and a thumbnail &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HOW TO USE &amp;lt;pre&amp;gt;nano get-map.sh&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
then enter this script &amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ugc=000000&lt;br /&gt;
&lt;br /&gt;
gameID=3959 #PAVLOV IS 3959&lt;br /&gt;
&lt;br /&gt;
api-path=&amp;quot;https://u-*ID NUMBER*.modapi.io/v1&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
api-key=&amp;quot;&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
curl -X GET &amp;quot;${api-path}/v1/games/${gameID}/mods/$(&amp;quot;${ugc:3})?api_key=${api-key}&amp;quot;   -H 'Accept: application/json' | jq  '.logo.thumb_1280x720, .name , .profile_url&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then give script perms to run &amp;lt;pre&amp;gt;sudo chmod +x get-map.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and then run it like this &lt;br /&gt;
&amp;lt;pre&amp;gt;bash get-map.sh UGC3409480   &amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=945</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=945"/>
		<updated>2023-11-20T23:58:11Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Interactive Update ALL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
(Not required unless hosting large amount of servers )&lt;br /&gt;
&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Optional] Set the /bin/bash shell for the steam user this will allow you to use arrow keys in terminal and show what folder you are in at all times &amp;lt;pre&amp;gt;sudo chsh -s /bin/bash steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server (PCVR only)''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &amp;lt;hr&amp;gt;&lt;br /&gt;
=== Interactive Update ALL ===&lt;br /&gt;
will find all server installs on machine and update them will update Ubuntu check what version and do correct updates for that version also UPDATE 29 PCVR STEP  then it will list each server by server name and ask what type it is and then it will update and move to the next&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/Pavlov-updateallservers/tree/main&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== getting map info with just the UGC ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
you will need to get a API key from mod.io for this ... running this bash script and passing a UGC number to it will return the map name  mod.io url and a thumbnail &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
HOW TO USE &amp;lt;pre&amp;gt;nano get-map.sh&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
then enter this script &amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ugc=000000&lt;br /&gt;
&lt;br /&gt;
gameID=3959 #PAVLOV IS 3959&lt;br /&gt;
&lt;br /&gt;
api-path=&amp;quot;https://u-*ID NUMBER*.modapi.io/v1&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
api-key=&amp;quot;&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
curl -X GET &amp;quot;${api-path}/v1/games/${gameID}/mods/$(&amp;quot;${ugc:3})?api_key=${api-key}&amp;quot;   -H 'Accept: application/json' | jq  '.logo.thumb_1280x720, .name , .profile_url&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then give script perms to run &amp;lt;pre&amp;gt;sudo chmod +x get-map.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and then run it like this &lt;br /&gt;
&amp;lt;pre&amp;gt;bash get-map.sh UGC3409480   &amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=944</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=944"/>
		<updated>2023-11-20T23:55:28Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Interactive Update ALL */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
(Not required unless hosting large amount of servers )&lt;br /&gt;
&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Optional] Set the /bin/bash shell for the steam user this will allow you to use arrow keys in terminal and show what folder you are in at all times &amp;lt;pre&amp;gt;sudo chsh -s /bin/bash steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server (PCVR only)''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &amp;lt;hr&amp;gt;&lt;br /&gt;
=== Interactive Update ALL ===&lt;br /&gt;
will find all server installs on machine and update them will update Ubuntu check what version and do correct updates for that version also UPDATE 29 PCVR STEP  then it will list each server by server name and ask what type it is and then it will update and move to the next&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/Pavlov-updateallservers/tree/main&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== getting map info with just the UGC ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
you will need to get a API key from mod.io for this ... running this bash script and passing a UGC number to it will return the map name  mod.io url and a thumbnail &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
nano get-map.sh&lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
then enter this script &lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;!/bin/bash&lt;br /&gt;
&lt;br /&gt;
ugc=000000&lt;br /&gt;
&lt;br /&gt;
gameID=3959 #PAVLOV IS 3959&lt;br /&gt;
&lt;br /&gt;
api-path=&amp;quot;&amp;lt;nowiki&amp;gt;https://u-*ID&amp;lt;/nowiki&amp;gt; NUMBER*.modapi.io/v1&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
api-key=&amp;quot;&amp;quot; #get on thhe access tab in mod.io settings&lt;br /&gt;
&lt;br /&gt;
curl -X GET &amp;quot;${api-path}/v1/games/${gameID}/mods/$(&amp;quot;${ugc:3})?api_key=${api-key}&amp;quot;   -H 'Accept: application/json' | jq  '.logo.thumb_1280x720, .name , .profile_url'&lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
then give script perms to run &lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
sudo chmod +x get-map.sh&lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and then run it like this &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
`&lt;br /&gt;
&lt;br /&gt;
bash get-map.sh UGC3409480&lt;br /&gt;
&lt;br /&gt;
`&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=943</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=943"/>
		<updated>2023-11-19T20:34:56Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* (Not required unless hosting large amount of servers ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
(Not required unless hosting large amount of servers )&lt;br /&gt;
&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Optional] Set the /bin/bash shell for the steam user this will allow you to use arrow keys in terminal and show what folder you are in at all times &amp;lt;pre&amp;gt;sudo chsh -s /bin/bash steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server (PCVR only)''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &amp;lt;hr&amp;gt;&lt;br /&gt;
=== Interactive Update ALL ===&lt;br /&gt;
will find all server installs on machine and update them will update Ubuntu check what version and do correct updates for that version also UPDATE 29 PCVR STEP  then it will list each server by server name and ask what type it is and then it will update and move to the next&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/Pavlov-updateallservers/tree/main&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=938</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=938"/>
		<updated>2023-11-02T05:05:18Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* System setup and software installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
====(Not required unless hosting large amount of servers )====&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[Optional] Set the /bin/bash shell for the steam user this will allow you to use arrow keys in terminal and show what folder you are in at all times &amp;lt;pre&amp;gt;sudo chsh -s /bin/bash steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server (PCVR only)''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &amp;lt;hr&amp;gt;&lt;br /&gt;
=== Interactive Update ALL ===&lt;br /&gt;
will find all server installs on machine and update them will update Ubuntu check what version and do correct updates for that version also UPDATE 29 PCVR STEP  then it will list each server by server name and ask what type it is and then it will update and move to the next&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/Pavlov-updateallservers/tree/main&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=937</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=937"/>
		<updated>2023-11-01T22:45:21Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* (Not required unless hosting large amount of servers ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
====(Not required unless hosting large amount of servers )====&lt;br /&gt;
you can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=936</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=936"/>
		<updated>2023-11-01T22:45:08Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Obtaining an ApiKey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey ====&lt;br /&gt;
====(Not required unless hosting large amount of servers )====&lt;br /&gt;
youu can just comment this line out or remove it For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(Note that there have been reported failures of this SMS system for non-US mobiles. In this case, DM davevillz your phone number and request a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use Game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the Steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of Pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|TTTclassic&lt;br /&gt;
|TTT with only innocent/traitor/detective&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check the firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://pavlovwiki.com/index.php/Setting_up_a_dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also needs to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, you'll run into issues very quickly. This is because Shack has no affiliation with Steam, and therefore cannot use Steam Workshop maps like the above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading it to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first, create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but I'll go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install Cyberduck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. The username is typically `root`, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (it will say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
You'll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server won't work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your server's automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example, it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And that's all! Disconnect CyberDuck from your server before playing, otherwise you'll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared with anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's URL from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy the contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single-threaded (there are multiple threads, but the vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is an automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map ID as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when you have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say I have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers it's not a sync its uses the same list if you want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
It will show where the file is really located &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=840</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=840"/>
		<updated>2023-07-31T22:51:49Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Make an API request with Mod.io to get map picture and name */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Make an API request with Mod.io to get map picture and name''' ===&lt;br /&gt;
very basic script pass the script a map id as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when u have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say i have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers its not a sync its using the same list if u want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
it will show where the file is really located &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=839</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=839"/>
		<updated>2023-07-31T22:51:36Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Save Logs for records and stats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Make an API request with Mod.io to get map picture and name ===&lt;br /&gt;
very basic script pass the script a map id as an argument then it will give u the name and a thumbnail to use &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/mod.io-modcheck/tree/main&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when u have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say i have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers its not a sync its using the same list if u want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
it will show where the file is really located &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=826</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=826"/>
		<updated>2023-07-18T01:55:00Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Scripts For Server Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when u have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say i have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers its not a sync its using the same list if u want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
it will show where the file is really located &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=825</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=825"/>
		<updated>2023-07-17T17:08:51Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Save Logs for records and stats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Sharing Bans over gameserver on same machine''' ===&lt;br /&gt;
when u have a lot of servers keeping the bans synced can be a nightmare so using a symbolic link allows all the servers to use one file &lt;br /&gt;
&lt;br /&gt;
for this lets say i have pavlovserver000 and pavlovserver001 and they are located at /home/steam/pavlovserver000 and  /home/steam/pavlovserver001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''step 1 will be to pick a blacklist to use as the new one and move it to a central location'' &lt;br /&gt;
 mkdir ~/shared ; mv /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ~/shared/blacklist.txt ; rm /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now we have moved the blacklist from pavlovserver000 to a folder in our home called shared and then we removed the blacklist from pavlovserver001 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
step 2 making the links &lt;br /&gt;
 ln -s ~/shared/blacklist.txt /home/steam/pavlovserver000/Pavlov/Saved/Config/blacklist.txt ; ln -s ~/shared/blacklist.txt /home/steam/pavlovserver001/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
now editing them in pavlovserver001's files will update the list for all of the servers its not a sync its using the same list if u want to check where a link is pointed if u &lt;br /&gt;
 ls -l&lt;br /&gt;
it will show where the file is really located &lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=824</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=824"/>
		<updated>2023-07-17T16:57:22Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Scripts For Server Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=823</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=823"/>
		<updated>2023-07-17T16:56:34Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* System setup and software installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
  sudo setenforce 0&lt;br /&gt;
  sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
  wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
  sudo useradd -m steam&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=822</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=822"/>
		<updated>2023-07-17T16:56:07Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* System setup and software installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 '''''sudo apt update''''' &amp;amp;&amp;amp; '''''sudo apt install''''' -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
 sudo useradd -m steam&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;'''Ubuntu 20.10 or higher'''&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
 sudo useradd -m steam&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;'''Rocky Linux, CentOS 8, and RHEL 8'''&amp;lt;blockquote&amp;gt;&lt;br /&gt;
 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
 sudo setenforce 0&lt;br /&gt;
 sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
 wget &amp;lt;nowiki&amp;gt;https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
 sudo useradd -m steam&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=821</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=821"/>
		<updated>2023-07-17T16:47:10Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Scripts For Server Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Advanced Scripts For Server Management ==&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== '''Auto-updating the server''' ===&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== '''Save Logs for records and stats''' ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=820</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=820"/>
		<updated>2023-07-17T16:46:33Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Save Logs for records and stats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Advanced Scripts For Server Management ===&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auto-updating the server ====&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Save Logs for records and stats ===&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection&lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=819</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=819"/>
		<updated>2023-07-17T16:45:18Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Scripts For Server Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Advanced Scripts For Server Management ===&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Auto-updating the server ====&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
==== Save Logs for records and stats ====&lt;br /&gt;
this is a automated script that will on a timer save all the backups made by the server before they are purged by the game for admin records and starts collection &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs2&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=818</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=818"/>
		<updated>2023-07-17T16:27:21Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Scripts For Server Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Advanced Scripts For Server Management ===&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
==== Auto-updating the server ====&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=817</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=817"/>
		<updated>2023-07-17T16:26:09Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Scripts For Server Management */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
=== Advanced Scripts For Server Management ===&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=816</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=816"/>
		<updated>2023-07-17T16:25:17Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Useful Linux Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players.&lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt&lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall&lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Advanced Scripts For Server Management ===&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Troubleshooting_Servers&amp;diff=815</id>
		<title>Troubleshooting Servers</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Troubleshooting_Servers&amp;diff=815"/>
		<updated>2023-07-17T16:08:45Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Check your ports from an outside tool */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
even if you think u did it all right it is more often than not port related .. using a free tool like this one https://portchecker.co/ check the appropriate ports for what your experiencing if the server is showing in game but has a ping of 999 that is more than likely a port problem so you would check the default ports for the server (unless u changed them) 7777, 8177 are the default ports both need to show as open . if u cannot connect to RCON check the port you set in the RconSettings.txt the default is 9100&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Troubleshooting_Servers&amp;diff=814</id>
		<title>Troubleshooting Servers</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Troubleshooting_Servers&amp;diff=814"/>
		<updated>2023-07-17T16:07:09Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Getting Help */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Check your ports from an outside tool ===&lt;br /&gt;
even if you think u did it all right it is more often than not port related .. using a free tool like this one https://portchecker.co/ check the appropriate ports for what your experiencing if the server is showing in game but has a ping of 999 that is more than likely a port problem so you would check the default ports for the server (unless u changed them) 7777, 8177 are the default ports both need to show as open . if u cannot connect to RCON check the port you set in the RconSettings.txt the default is 9100&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=813</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=813"/>
		<updated>2023-07-17T15:59:14Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=812</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=812"/>
		<updated>2023-07-17T15:54:42Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Hosting at home */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Check your ports from an outside tool ..''' using a free tool like this one https://portchecker.co/ check the appropriate ports for what your experiencing if the server is showing in game but has a ping of 999 that is more than likely a port problem so you would check the default ports for the server (unless u changed them) 7777, 8177 are the default ports both need to show as open . if u cannot connect to RCON check the port you set in the [[Rcon Overview and Commands|RconSettings.txt]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Starting Server Install ====&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode, see Limited Ammo Types table below&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
* '''AFKTimeLimit''' There is now a feature to kick players who are idle in the game. Integers are measured in seconds and 0 disables AFK kicking completely.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: See Game modes table below&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Limited Ammo Types&lt;br /&gt;
!AmmoType&lt;br /&gt;
!Name&lt;br /&gt;
!Description&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|Unlimited&lt;br /&gt;
|Players have unlimited ammo, carry no ammo boxes and do not display an ammo count on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|Limited Generic&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon class (Pistol, Submachine gun, Rifles/MGs, Shotgun, Sniper).&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|2&lt;br /&gt;
|Limited Specific&lt;br /&gt;
|Players carry ammo boxes with a limited amount of ammo.&lt;br /&gt;
One box for each weapon.&lt;br /&gt;
&lt;br /&gt;
Mags and ammo boxes can be put on the chest of the player to consolidate the ammo.&lt;br /&gt;
&lt;br /&gt;
An ammo count is displayed on the wrist.&lt;br /&gt;
|-&lt;br /&gt;
|3&lt;br /&gt;
|Custom&lt;br /&gt;
|Allows for full control over ammo by the map.&lt;br /&gt;
|-&lt;br /&gt;
|4&lt;br /&gt;
| Limited Special&lt;br /&gt;
|'''All weapons except &amp;quot;special&amp;quot; weapons are unlimited, more clarification is needed.''' &lt;br /&gt;
|-&lt;br /&gt;
|5&lt;br /&gt;
|Boxless&lt;br /&gt;
|'''Like limited generic but without boxes? Clarification is needed.'''&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Game modes&lt;br /&gt;
!GameMode &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|DM&lt;br /&gt;
|Death match&lt;br /&gt;
|-&lt;br /&gt;
|KOTH&lt;br /&gt;
|King of the hill&lt;br /&gt;
|-&lt;br /&gt;
|GUN&lt;br /&gt;
| Gun game&lt;br /&gt;
|-&lt;br /&gt;
|OITC&lt;br /&gt;
| One in the chamber&lt;br /&gt;
|-&lt;br /&gt;
|SND&lt;br /&gt;
|Search and destroy&lt;br /&gt;
|-&lt;br /&gt;
|TANKTDM&lt;br /&gt;
|WW2 Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
| TDM&lt;br /&gt;
|Team Death Match&lt;br /&gt;
|-&lt;br /&gt;
|TTT&lt;br /&gt;
|Trouble in Terrorist Town&lt;br /&gt;
|-&lt;br /&gt;
|WW2GUN&lt;br /&gt;
|WW2 gun game&lt;br /&gt;
|-&lt;br /&gt;
|ZWV&lt;br /&gt;
| Zombie wave survival&lt;br /&gt;
|-&lt;br /&gt;
|HIDE&lt;br /&gt;
|The Hidden &lt;br /&gt;
|-&lt;br /&gt;
|INFECTION&lt;br /&gt;
|Hidden infection&lt;br /&gt;
|-&lt;br /&gt;
|PUSH&lt;br /&gt;
|Push&lt;br /&gt;
|-&lt;br /&gt;
|PH&lt;br /&gt;
|Prop hunt&lt;br /&gt;
|}&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=703</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=703"/>
		<updated>2023-06-18T03:07:16Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Default Map ID's */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta default +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The update 29 of the PCVR version of pavlov and after added a requirement to run these commands to change the steamclient.so:&lt;br /&gt;
 &amp;lt;code&amp;gt;sudo rm /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt; &lt;br /&gt;
 &amp;lt;code&amp;gt;sudo ln -s /usr/lib/x86_64-linux-gnu/libc++.so.1 /usr/lib/x86_64-linux-gnu/libc++.so&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The map system has switched from the steam workshop to modio which means that the server rotation will need to be redone with modio UGCs. &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov&amp;lt;/nowiki&amp;gt;. This is done by taking the resource ID from the modio page, adding “UGC” in front of it and then adding that to the rotation. For example the map gravity &amp;lt;nowiki&amp;gt;https://mod.io/g/pavlov/m/gravity1&amp;lt;/nowiki&amp;gt; has a resource ID of 2773760 so the map ID to add to the server would be “UGC2773760”. When a match ends, the server will load the next map in the rotation.  &lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
= Default Map ID's =&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Rcon_Overview_and_Commands&amp;diff=651</id>
		<title>Rcon Overview and Commands</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Rcon_Overview_and_Commands&amp;diff=651"/>
		<updated>2023-06-14T00:03:49Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Rcon Overview and Commands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RCON (Remote CONnection) is the method pavlov servers can be controlled from outside of VR. When a server is brought online, an email is sent to the owner with the RCON credentials to connect remotely. RCON can be accessed at: &amp;lt;nowiki&amp;gt;http://pavlovrcon.com/&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Rcon Overview and Commands ==&lt;br /&gt;
'''Ban/Unban''' &lt;br /&gt;
&lt;br /&gt;
If you want Ban/Unban to work file /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt needs to be writable by user running server.  (If you followed the instructions on the wiki, username steam is running the server and creates the file).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Help                                -Returns the full list of commands&lt;br /&gt;
Ban {UniqueID}                      -Bans the player from the server (adds them to blacklist.txt)&lt;br /&gt;
Kick {UniqueID}                     -Kicks the player from the server&lt;br /&gt;
Kill {UniqueID}                     -Kills the player &lt;br /&gt;
Unban {UniqueID}                    -Unbans the player from the server (tries to remove the unique id from blacklist.txt)'&lt;br /&gt;
Banlist                             -Shows the current list of banned players&lt;br /&gt;
AddMod {UniqueID}                   -Adds a mod ID to the mods.txt file &lt;br /&gt;
RemoveMod {UniqueID}                -Removes a mod ID to the mods.txt file&lt;br /&gt;
ItemList                            -Shows available items for GiveItem command&lt;br /&gt;
RotateMap                           -Rotates to the next map in the game.ini&lt;br /&gt;
SwitchMap {MapName/ID} {GameMode}   -Switches to the map/gamemode specified, ex &amp;quot;SwitchMap DataCenter TDM&amp;quot; or &amp;quot;SwitchMap UGC1080326389 DM&amp;quot;&lt;br /&gt;
SwitchTeam {UniqueID} {TeamId}      -Switches the specified players team&lt;br /&gt;
GiveItem {UniqueID} {ItemId}        -Give the specified player the Item&lt;br /&gt;
GiveCash {UniqueID} {CashAmt}       -Give the specified player cash&lt;br /&gt;
GiveTeamCash {TeamId} {CashAmt}     -Gives all members of the teamId cash&lt;br /&gt;
GiveVehicle {UniqueID} {VehicleID}  -Spawns Vehicle on top of player, see below for vehicle IDs&lt;br /&gt;
InspectPlayer {UniqueID}            -Returns information about the player specified (PlayerName, Cash, KDA, TeamId etc)&lt;br /&gt;
RefreshList                         -Returns a list of players on the server (unique/steamId)&lt;br /&gt;
Slap {UniqueID} {damage amt}        -Inflicts damage amount on player.  From zero to 100.&lt;br /&gt;
ServerInfo                          -Returns information about the server (ServerName, CurrentMap, PlayerCount/MaxPlayerCount etc)&lt;br /&gt;
Disconnect                          -Disconnects the player from Rcon&lt;br /&gt;
ResetSND                            -Resets the match back to round 1 keeping the same teams&lt;br /&gt;
SetPlayerSkin {UniqueID} {SkinId}   -Sets the skin for the specified player, see below for IDs&lt;br /&gt;
SetLimitedAmmoType {0-5}            -Sets the limited ammo type for the duration of the match. See below for the different ammo types available&lt;br /&gt;
SetPin {####}                       -Sets the password on your server, must be 4 digits e.g. &amp;quot;SetPin 0000&amp;quot;. Running SetPin without a number will remove the pin from the server.&lt;br /&gt;
Shownametags {True/False}           -Toggles if nametags are visible or not. Useful for tactical/realistic servers, or making trailers and taking screenshots for your maps.&lt;br /&gt;
Shutdown                            -Shuts down the server (Shack RC only, currently untested).&lt;br /&gt;
&lt;br /&gt;
TTT-only commands:&lt;br /&gt;
&lt;br /&gt;
tttflushkarma {UniqueID}            -Resets a player's karma&lt;br /&gt;
tttsetkarma {UniqueID} {####}       -Sets the karma of a player to a value&lt;br /&gt;
tttsetrole {UniqueID}               -Currently broken&lt;br /&gt;
tttendround                         -Ends the round&lt;br /&gt;
tttpausetimer                       -Pauses the timer&lt;br /&gt;
TTTAlwaysEnableSkinMenu             -Enables the skin menu mid-round&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
PCVR UE5 update RCON CMDS&amp;lt;pre&amp;gt;&lt;br /&gt;
AddMapRotation [MapID] [GameMode] # add a map to the servers rotation from Mod.io&lt;br /&gt;
AddMod [UniqueID] # add user to mods.txt on server (make an admin) and allows them to use admin menu in pause menu &lt;br /&gt;
Ban [UniqueID] # ban player permanently and add there ID to blacklist.txt on server&lt;br /&gt;
Banlist # shows current banned players&lt;br /&gt;
Disconnect # close rcon connection (should always be used when done)&lt;br /&gt;
EnableCompMode [True/False]&lt;br /&gt;
EnableVerboseLogging [True/False] # more info printed to log file on server&lt;br /&gt;
EnableWhitelist [True/False] # only players who are on the whitelist.txt on server may join &lt;br /&gt;
Gag [UniqueID] [True/False] # player cant use mic &lt;br /&gt;
GiveAll [TeamID] [ItemID] # give all players on team a item &lt;br /&gt;
GiveCash [UniqueID] CashAmt # give player cash &lt;br /&gt;
GiveItem [UniqueID] [ItemID] # give player item &lt;br /&gt;
GiveTeamCash [TeamId] [CashAmt] # give team cash &lt;br /&gt;
InspectAll # prints detailed status for each connected player &lt;br /&gt;
InspectPlayer [UniqueID] # prints detailed status for a connected player&lt;br /&gt;
InspectTeam [TeamID] # prints detailed status for one team of connected players&lt;br /&gt;
ItemList # list items in game / map (custom items built into map will list too ) &lt;br /&gt;
Kick [UniqueID] # remove player from game &lt;br /&gt;
Kill [UniqueID] # kills player &lt;br /&gt;
MapList # shows current map rotation &lt;br /&gt;
ModeratorList # shows current server admins&lt;br /&gt;
RefreshList # shows all connected players and ID&lt;br /&gt;
RemoveMapRotation [MapID] [GameMode] # remove map from rotation &lt;br /&gt;
RemoveMod [UniqueID] # remove admin&lt;br /&gt;
ResetSND &lt;br /&gt;
PauseMatch [TimeInSeconds]&lt;br /&gt;
RotateMap&lt;br /&gt;
ServerInfo&lt;br /&gt;
SetBalanceTableURL [GithubURL]&lt;br /&gt;
SetCash [UniqueID] [CashAmt]&lt;br /&gt;
SetLimitedAmmoType [AmmoType]&lt;br /&gt;
SetMaxPlayers [MaxPlayerNumber]&lt;br /&gt;
SetPin [PinNumber]&lt;br /&gt;
SetPlayerSkin [UniqueID] [SkinID]&lt;br /&gt;
SetTimeLimit [TimeLimitAmount]&lt;br /&gt;
ShowNametags [True/False]&lt;br /&gt;
ShutdownServer&lt;br /&gt;
Slap [UniqueID] [DamageAmount]&lt;br /&gt;
SwitchMap [MapId] [GameMode]&lt;br /&gt;
SwitchTeam [UniqueID] [TeamID]&lt;br /&gt;
Teleport [MoveUniqueID] [ToUniqueID]&lt;br /&gt;
TTTAlwaysEnableSkinMenu [True/False]&lt;br /&gt;
TTTEndRound [WinningTeamID]&lt;br /&gt;
TTTFlushKarma&lt;br /&gt;
TTTGiveCredits [UniqueID] [CreditAmount]&lt;br /&gt;
TTTPauseTimer [True/False]&lt;br /&gt;
TTTSetKarma [UniqueID] [KarmaAmt]&lt;br /&gt;
TTTSetRole [UniqueID] [RoleID]&lt;br /&gt;
Unban [UniqueID]&lt;br /&gt;
UpdateServerName [ServerName]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{UniqueID} is a player's Steam ID 64. It's the 17-digit number that appears next to their names in most Rcon tools. Alternatively, if you have a player's profile URL, you can find their ID at: https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
'''Limited ammo types:'''&lt;br /&gt;
&lt;br /&gt;
0 = Unlimited&amp;lt;br /&amp;gt;&lt;br /&gt;
1 = Limited Generic&amp;lt;br /&amp;gt;&lt;br /&gt;
2 = Limited Specific&amp;lt;br /&amp;gt;&lt;br /&gt;
3 = Custom (for modders)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 = Limited Special&amp;lt;br /&amp;gt;&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
'''Item, skin, and vehicle IDs:'''&lt;br /&gt;
&lt;br /&gt;
[http://wiki.pavlov-vr.com/index.php?title=ItemIDs A full list of all items, vehicles, and skin can be found here.]&lt;br /&gt;
&lt;br /&gt;
You can also run the ItemList command through Rcon to receive the most recent and up to date list of all items.&lt;br /&gt;
&lt;br /&gt;
'''Game Modes:''' &amp;lt;br /&amp;gt;&lt;br /&gt;
DM        - Death Match &amp;lt;br /&amp;gt;&lt;br /&gt;
KOTH      - King Of The Hill &amp;lt;br /&amp;gt;&lt;br /&gt;
GUN       - Gun Game &amp;lt;br /&amp;gt;&lt;br /&gt;
OITC      - One In The Chamber &amp;lt;br /&amp;gt;&lt;br /&gt;
SND       - Search and Destroy &amp;lt;br /&amp;gt;&lt;br /&gt;
TANKTDM   - WW2 Team Death Match &amp;lt;br /&amp;gt;&lt;br /&gt;
TDM       - Team Death Match &amp;lt;br /&amp;gt;&lt;br /&gt;
TTT       - Trouble in Terrorist Town &amp;lt;br /&amp;gt;&lt;br /&gt;
WW2GUN    - WW2 Gun Game &amp;lt;br /&amp;gt;&lt;br /&gt;
ZWV       - Zombie Wave Survival &amp;lt;br /&amp;gt;&lt;br /&gt;
HIDE      - The Hidden &amp;lt;br /&amp;gt;&lt;br /&gt;
INFECTION - Hidden Infection &amp;lt;br /&amp;gt;&lt;br /&gt;
PUSH      - Push &amp;lt;br /&amp;gt;&lt;br /&gt;
PH        - Prophunt &amp;lt;br /&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Connecting to RCON ===&lt;br /&gt;
&lt;br /&gt;
Make sure whatever port you used is open in your firewall for TCP connections. Connections are simple TCP port/telnet style connections. &lt;br /&gt;
&lt;br /&gt;
To test connecting to the rcon port and issuing simple commands use netcat or telnet:  &lt;br /&gt;
&amp;lt;pre&amp;gt;nc {ip address} {port}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;telnet {ip address} {port}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the password use the md5 hash of the password in the file (this may change in the future). You can get this using &amp;lt;pre&amp;gt;echo -n password | md5sum&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If successful you should get an Authenticated=1 reply&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Tools available to access Rcon interface ===&lt;br /&gt;
&lt;br /&gt;
A good first place to start is the RCON web interface run by ArcticVR. You do this at http://pavlovrcon.com/. &lt;br /&gt;
&lt;br /&gt;
If you want private control of your server, you will need to do a bit more work for it. At the simplest, using netcat (nc) or telnet as described above will give you basic access to all commands&lt;br /&gt;
&lt;br /&gt;
If you want to batch commands (i.e. for moving players on to teams and triggering ResetSnd) the following script can be useful to call a pre-written batch files of commands. Call with your batch file as the first argument to the script. The file should have one command per line with first line being the hashed password as above.&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
#!/bin/bash&lt;br /&gt;
function slowcat(){ while read; do sleep .05; echo &amp;quot;$REPLY&amp;quot;; done; }&lt;br /&gt;
cat  $1 | slowcat | nc {ip address} {port}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example batchfile:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
8b96753b29612d8c98d6b696140b5d9f&lt;br /&gt;
ResetSnd&lt;br /&gt;
Disconnect&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''There is a very brief example above &lt;br /&gt;
but it was not very detailed so i wanted to add a more detailed explanation''' &lt;br /&gt;
&lt;br /&gt;
be aware that connecting and disconnecting a lot can hurt server performance&lt;br /&gt;
&lt;br /&gt;
first you need to make a shell script&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/test.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/bash&lt;br /&gt;
function slowcat(){ while read; do sleep .15; echo &amp;quot;$REPLY&amp;quot;; done; }&lt;br /&gt;
cat $1 | slowcat | nc {SERVER IP} {SERVER RCON PORT}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
now exit and save the test.sh &lt;br /&gt;
&lt;br /&gt;
here will will make a batch file that will just hold the rcon password and cmds we want to issue &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/batch&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;{RCON PASSWORD CONVERTED TO MD5 HASH}&lt;br /&gt;
{RCON CMD}&lt;br /&gt;
{RCON CMD}&lt;br /&gt;
Disconnect&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
here the first line has to be the rcon password converted to MD5 HASH&lt;br /&gt;
https://www.md5hashgenerator.com/&lt;br /&gt;
then each line after that u can use any rcon commands&lt;br /&gt;
the last line must be disconnect &lt;br /&gt;
&lt;br /&gt;
now we need to give the sh permissions to run&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo chmod +x /home/steam/test.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to run the bash script&lt;br /&gt;
&amp;lt;pre&amp;gt;./home/steam/test.sh /home/steam/batch&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so to run the script we need to ./ the .sh then after a space we need to pass the batch&lt;br /&gt;
&lt;br /&gt;
=== Rcon access from within VR ===&lt;br /&gt;
&lt;br /&gt;
PavlovRconWebserver, pavlov-vr-rcon and pavlov_rcon_tcl have been designed to be accessible within VR using virtual desktop view.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''pavlov_rcon_tcl''': This is a tool designed to run on your desktop for access within VR&lt;br /&gt;
&lt;br /&gt;
https://github.com/Oakraven79/pavlov_rcon_tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''PavlovRconWebserver''' is an interface designed to be usable from everywhere all the time. (also in VR over desktop view) &lt;br /&gt;
&amp;lt;pre&amp;gt;Features: &lt;br /&gt;
Manage multiple Linux servers with multiple pavlov servers.&lt;br /&gt;
Start / Stop / Update&lt;br /&gt;
Public player lists&lt;br /&gt;
Do almost all rcon commands&lt;br /&gt;
Change the map rotation&lt;br /&gt;
Determine which users can do what via roles&lt;br /&gt;
Manage whitelists and blacklists&lt;br /&gt;
Integrate the player lists on all other websites&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;Requirements:&lt;br /&gt;
Good Linux knowledge&lt;br /&gt;
SSH access to a linux server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://github.com/devinSpitz/PavlovRconWebserver&lt;br /&gt;
&lt;br /&gt;
While functional, the PavlovRconWebserver is still in development.&lt;br /&gt;
&lt;br /&gt;
If you do plan on using this tool, we recommend asking for help on the official Discord or http://discord.spitzen.solutions, or contacting the creator on the Github page (devinspitz) for the latest info on how to use it. Failing to do so will likely result in you breaking your servers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''pavlov-vr-rcon''': This is tool designed to run on your desktop for access from within VR with SND team setup &lt;br /&gt;
&lt;br /&gt;
https://github.com/Krzychu81/pavlov-vr-rcon&lt;br /&gt;
&lt;br /&gt;
=== RCON access from Discord ===&lt;br /&gt;
&lt;br /&gt;
For the ultimate in both control and complexity of setup, use the open-source '''pavlov-bot'''. This is a discord bot that will listen for commands in your discord and execute them. Supports all RCON commands with handy features such as discord role based authentication and authorisation, player, map and team aliases (No more SteamIDs or UGC####) and enhanced &amp;quot;all&amp;quot; and team based commands. Has support for flushing non-registered players from server. Advanced features to include alerting when servers are kicking off, team killing player kick/ban and large server (PUSH/RUSH/TankTDM) player balance (count) control. &lt;br /&gt;
&lt;br /&gt;
For '''shack''' users it has been updated to support Oculus ids and map aliases, so is fully functional for both server versions. See Readme.md for shack specific tweaks. &lt;br /&gt;
&lt;br /&gt;
https://github.com/makupi/pavlov-bot&lt;br /&gt;
&lt;br /&gt;
'''Horde''' also offers a Discord Bot to grant RCON permissions to friends in Discord, and run commands from specific channels. Invite the Horde Bot to your Discord server with this link:&lt;br /&gt;
https://discord.com/oauth2/authorize?client_id=780880728992383077&amp;amp;scope=bot&amp;amp;permissions=199744&lt;br /&gt;
&lt;br /&gt;
=== Tips on developing apps to use RCON ===&lt;br /&gt;
 &lt;br /&gt;
What is important if you are issuing commands using a program at high frequency is that you open one connection and put all of the commands through that open connection with a small (.1 sec is fine) delay. What you don't want to do is open a new connection for each command or shove all of the commands through super fast. First causes performance issues and the second dropped commands.&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=650</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=650"/>
		<updated>2023-06-13T05:07:18Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* System setup and software installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;big&amp;gt;&amp;lt;u&amp;gt;Inspect players every 5 minutes&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;  [https://github.com/JTWP-org/inspect-every-5-mins (INSTALL FROM GIT )] ===&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script connects to the server u set in the config with [https://netcat.sourceforge.net/ NETCAT] 2 times every 5 min and it uses  RCON commands [[Rcon Overview and Commands|RefreshList ServerInfo]] &amp;amp;.&amp;lt;code&amp;gt;[[InspectPlayer 76|InspectPlayer]] {UniqueID} to build stats for the current round  stats are then appended over the last one collected&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as for the 5 min timer we use a [https://linux.die.net/man/5/crontab crontask]                     &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;big&amp;gt;&amp;lt;u&amp;gt;pending reset&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;  ''(COMING SOON'') ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Useful Linux Commands===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Default Map ID's===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter)===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
===Map wont load when running in a container===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
===Server stuck rotating forever===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
===Can't connect to RCON===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PC ONLY - Map Download stops===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
===Getting Help===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=649</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=649"/>
		<updated>2023-06-13T04:48:47Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* System setup and software installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;big&amp;gt;&amp;lt;u&amp;gt;Inspect players every 5 minutes&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;  [https://github.com/JTWP-org/inspect-every-5-mins (INSTALL FROM GIT )] ===&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script connects to the server u set in the config with [https://netcat.sourceforge.net/ NETCAT] 2 times every 5 min and it uses  RCON commands [[Rcon Overview and Commands|RefreshList ServerInfo]] &amp;amp;.&amp;lt;code&amp;gt;[[InspectPlayer 76|InspectPlayer]] {UniqueID} to build stats for the current round  stats are then appended over the last one collected&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as for the 5 min timer we use a [https://linux.die.net/man/5/crontab crontask]                     &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;big&amp;gt;&amp;lt;u&amp;gt;pending reset&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;  ''(COMING SOON'') ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Useful Linux Commands===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Default Map ID's===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter)===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
===Map wont load when running in a container===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
===Server stuck rotating forever===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
===Can't connect to RCON===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PC ONLY - Map Download stops===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
===Getting Help===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=537</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=537"/>
		<updated>2023-05-26T05:51:00Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;big&amp;gt;&amp;lt;u&amp;gt;Inspect players every 5 minutes&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;  [https://github.com/JTWP-org/inspect-every-5-mins (INSTALL FROM GIT )] ===&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script connects to the server u set in the config with [https://netcat.sourceforge.net/ NETCAT] 2 times every 5 min and it uses  RCON commands [[Rcon Overview and Commands|RefreshList ServerInfo]] &amp;amp;.&amp;lt;code&amp;gt;[[InspectPlayer 76|InspectPlayer]] {UniqueID} to build stats for the current round  stats are then appended over the last one collected&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as for the 5 min timer we use a [https://linux.die.net/man/5/crontab crontask]                     &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;big&amp;gt;&amp;lt;u&amp;gt;pending reset&amp;lt;/u&amp;gt;&amp;lt;/big&amp;gt;  ''(COMING SOON'') ===&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Useful Linux Commands===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Default Map ID's===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter)===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
===Map wont load when running in a container===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
===Server stuck rotating forever===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
===Can't connect to RCON===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PC ONLY - Map Download stops===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
===Getting Help===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=536</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=536"/>
		<updated>2023-05-26T05:17:23Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (INSTALL FROM GIT  )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script connects to the server u set in the config with [https://netcat.sourceforge.net/ NETCAT] 2 times every 5 min and it uses  RCON commands [[Rcon Overview and Commands|RefreshList ServerInfo]] &amp;amp;.&amp;lt;code&amp;gt;InspectPlayer {UniqueID} to build stats for the current round  stats are then appended over the last one collected&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
as for the 5 min timer we use a [https://www.google.com/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=&amp;amp;ved=2ahUKEwj_y-OQnZL_AhWqlIkEHaudB94QFnoECAwQAQ&amp;amp;url=https%3A%2F%2Fdocs.spring.io%2Fspring-framework%2Fdocs%2Fcurrent%2Fjavadoc-api%2Forg%2Fspringframework%2Fscheduling%2Fconfig%2FCronTask.html&amp;amp;usg=AOvVaw1l8F8C093jQ_1pJMilPnPY crontask]                     &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Useful Linux Commands===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Default Map ID's===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter)===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
===Map wont load when running in a container===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
===Server stuck rotating forever===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
===Can't connect to RCON===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PC ONLY - Map Download stops===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
===Getting Help===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=535</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=535"/>
		<updated>2023-05-26T03:58:51Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (INSTALL FROM GIT  )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script connects to the server u set in the config with [https://netcat.sourceforge.net/ NETCAT] 2 times every 5 min and it uses  RCON commands [[Rcon Overview and Commands|RefreshList]] &amp;amp;.&amp;lt;code&amp;gt;InspectPlayer {UniqueID} to build stats for the current round and match stats are then appended over the last one collected&amp;lt;/code&amp;gt;                     &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
===Useful Linux Commands===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Default Map ID's===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter)===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
===Map wont load when running in a container===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
===Server stuck rotating forever===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
===Can't connect to RCON===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===PC ONLY - Map Download stops===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
===Getting Help===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;br /&gt;
[[Category:RCON automation]]&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=534</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=534"/>
		<updated>2023-05-26T03:17:10Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                                &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats and the server match status for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project   &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;posted by invicta in the old wiki &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=533</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=533"/>
		<updated>2023-05-26T03:02:52Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /*    &amp;quot;PlayerInfo&amp;quot;: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                                &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=532</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=532"/>
		<updated>2023-05-26T03:01:23Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                                &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====    &amp;quot;PlayerInfo&amp;quot;: ====&lt;br /&gt;
&lt;br /&gt;
====    { ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;PlayerName&amp;quot;: &amp;quot;toidi_na_llats_ot_woh&amp;quot;, ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;UniqueId&amp;quot;: &amp;quot;76561199117105981&amp;quot;, ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;KDA&amp;quot;: &amp;quot;7/0/2&amp;quot;, ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;Score&amp;quot;: &amp;quot;16&amp;quot;, ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;Dead&amp;quot;: false, ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;Cash&amp;quot;: &amp;quot;7000&amp;quot;, ====&lt;br /&gt;
&lt;br /&gt;
====        &amp;quot;TeamId&amp;quot;: &amp;quot;1&amp;quot; ====&lt;br /&gt;
&lt;br /&gt;
====    } ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=531</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=531"/>
		<updated>2023-05-26T02:59:30Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                                &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected&amp;lt;/sup&amp;gt;&amp;lt;blockquote&amp;gt;&lt;br /&gt;
======    '''''&amp;quot;PlayerInfo&amp;quot;:''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''   {''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;PlayerName&amp;quot;: &amp;quot;toidi_na_llats_ot_woh&amp;quot;,''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;UniqueId&amp;quot;: &amp;quot;76561199117105981&amp;quot;,''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;KDA&amp;quot;: &amp;quot;7/0/2&amp;quot;,''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;Score&amp;quot;: &amp;quot;16&amp;quot;,''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;Dead&amp;quot;: false,''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;Cash&amp;quot;: &amp;quot;7000&amp;quot;,''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''       &amp;quot;TeamId&amp;quot;: &amp;quot;1&amp;quot;''''' ======&lt;br /&gt;
&lt;br /&gt;
====== '''''   }''''' ======&lt;br /&gt;
&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=530</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=530"/>
		<updated>2023-05-26T02:50:22Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                &lt;br /&gt;
&lt;br /&gt;
* '''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected&amp;lt;/sup&amp;gt; &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|PlayerName&lt;br /&gt;
|Salted Cracker Jack&lt;br /&gt;
|-&lt;br /&gt;
|UniqueId&lt;br /&gt;
|76561198210003277&lt;br /&gt;
|-&lt;br /&gt;
|Score&lt;br /&gt;
|NUM&lt;br /&gt;
|-&lt;br /&gt;
|KDA&lt;br /&gt;
|KILLS / DEATHS / ASSIST&lt;br /&gt;
|-&lt;br /&gt;
|Dead&lt;br /&gt;
|TRUE / FALSE&lt;br /&gt;
|-&lt;br /&gt;
|CASH&lt;br /&gt;
|PLAYYERS MONEY&lt;br /&gt;
|-&lt;br /&gt;
|TEAM ID&lt;br /&gt;
|0 / 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=529</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=529"/>
		<updated>2023-05-26T02:45:57Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON examples */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                &lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected every 5&amp;lt;/sup&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|PlayerName&lt;br /&gt;
|Salted Cracker Jack&lt;br /&gt;
|-&lt;br /&gt;
|UniqueId&lt;br /&gt;
|76561198210003277&lt;br /&gt;
|-&lt;br /&gt;
|Score&lt;br /&gt;
|NUM&lt;br /&gt;
|-&lt;br /&gt;
|KDA&lt;br /&gt;
|KILLS / DEATHS / ASSIST&lt;br /&gt;
|-&lt;br /&gt;
|Dead&lt;br /&gt;
|TRUE / FALSE&lt;br /&gt;
|-&lt;br /&gt;
|CASH&lt;br /&gt;
|PLAYYERS MONEY&lt;br /&gt;
|-&lt;br /&gt;
|TEAM ID&lt;br /&gt;
|0 / 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=528</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=528"/>
		<updated>2023-05-26T02:44:20Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON examples ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                &lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins/blob/main/log/inspectPlayer-04-23-2023-21-50.demo.json (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected every 5&amp;lt;/sup&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|PlayerName&lt;br /&gt;
|Salted Cracker Jack&lt;br /&gt;
|-&lt;br /&gt;
|UniqueId&lt;br /&gt;
|76561198210003277&lt;br /&gt;
|-&lt;br /&gt;
|Score&lt;br /&gt;
|NUM&lt;br /&gt;
|-&lt;br /&gt;
|KDA&lt;br /&gt;
|KILLS / DEATHS / ASSIST&lt;br /&gt;
|-&lt;br /&gt;
|Dead&lt;br /&gt;
|TRUE / FALSE&lt;br /&gt;
|-&lt;br /&gt;
|CASH&lt;br /&gt;
|PLAYYERS MONEY&lt;br /&gt;
|-&lt;br /&gt;
|TEAM ID&lt;br /&gt;
|0 / 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=527</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=527"/>
		<updated>2023-05-26T02:41:50Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Automated RCON */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Automated RCON ==&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON                &lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins/blob/main/log/inspectPlayer-04-23-2023-21-50.demo.json (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected every 5&amp;lt;/sup&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|PlayerName&lt;br /&gt;
|Salted Cracker Jack&lt;br /&gt;
|-&lt;br /&gt;
|UniqueId&lt;br /&gt;
|76561198210003277&lt;br /&gt;
|-&lt;br /&gt;
|Score&lt;br /&gt;
|NUM&lt;br /&gt;
|-&lt;br /&gt;
|KDA&lt;br /&gt;
|KILLS / DEATHS / ASSIST&lt;br /&gt;
|-&lt;br /&gt;
|Dead&lt;br /&gt;
|TRUE / FALSE&lt;br /&gt;
|-&lt;br /&gt;
|CASH&lt;br /&gt;
|PLAYYERS MONEY&lt;br /&gt;
|-&lt;br /&gt;
|TEAM ID&lt;br /&gt;
|0 / 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=526</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=526"/>
		<updated>2023-05-26T02:37:09Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Pending Restart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated RCON ===&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON        &lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins/blob/main/log/inspectPlayer-04-23-2023-21-50.demo.json (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected every 5&amp;lt;/sup&amp;gt;   &lt;br /&gt;
&lt;br /&gt;
     &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|PlayerName&lt;br /&gt;
|Salted Cracker Jack&lt;br /&gt;
|-&lt;br /&gt;
|UniqueId&lt;br /&gt;
|76561198210003277&lt;br /&gt;
|-&lt;br /&gt;
|Score&lt;br /&gt;
|NUM&lt;br /&gt;
|-&lt;br /&gt;
|KDA&lt;br /&gt;
|KILLS / DEATHS / ASSIST&lt;br /&gt;
|-&lt;br /&gt;
|Dead&lt;br /&gt;
|TRUE / FALSE&lt;br /&gt;
|-&lt;br /&gt;
|CASH&lt;br /&gt;
|PLAYYERS MONEY&lt;br /&gt;
|-&lt;br /&gt;
|TEAM ID&lt;br /&gt;
|0 / 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pending Restart ===&lt;br /&gt;
when this  [https://www.gnu.org/software/bash/ BASH] script is triggered  it will start a loop that checks every 15 mins if the server is empty and  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=525</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=525"/>
		<updated>2023-05-26T02:33:11Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Inspect players every 5 (GitHub ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;hr&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automated RCON ===&lt;br /&gt;
here are some examples of scripts that interact with Pavlov RCON    &lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;big&amp;gt;Inspect players every 5 minutes&amp;lt;/big&amp;gt;'''  [https://github.com/JTWP-org/inspect-every-5-mins/blob/main/log/inspectPlayer-04-23-2023-21-50.demo.json (installation instructions on GITHUB )]&lt;br /&gt;
&lt;br /&gt;
This [https://www.gnu.org/software/bash/ BASH] script will collect current players stats for every one. then it will  write them to a log in JSON format that can easily be  handled for your records or the next project  .. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected every 5&amp;lt;/sup&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
      &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;PlayerName&amp;quot;: &amp;quot;Salted Cracker Jack&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;UniqueId&amp;quot;: &amp;quot;76561198210003277&amp;quot;,&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|PLAYERS NAME&lt;br /&gt;
|Salted Cracker Jack&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
       &amp;quot;KDA&amp;quot;: &amp;quot;27/0/18&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;Score&amp;quot;: &amp;quot;72&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;Dead&amp;quot;: false,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;Cash&amp;quot;: &amp;quot;13000&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;TeamId&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pending Restart ===&lt;br /&gt;
when this  [https://www.gnu.org/software/bash/ BASH] script is triggered  it will start a loop that checks every 15 mins if the server is empty and  &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=524</id>
		<title>Setting up a dedicated server</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Setting_up_a_dedicated_server&amp;diff=524"/>
		<updated>2023-05-26T01:00:32Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Advanced Server Administration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up a dedicated server ==&lt;br /&gt;
&lt;br /&gt;
'''There are no Windows binaries''' &lt;br /&gt;
&lt;br /&gt;
This guide is written exclusively for Linux and covers Ubuntu/Debian/Debian-like and Red Hat RPM-based distros. Possible to run with other distros, but some of the commands won't work and you will need to know enough to figure out the software install of dependencies on your own. &lt;br /&gt;
&lt;br /&gt;
If you are considering hosting from home, please read that section of the wiki first. &lt;br /&gt;
&lt;br /&gt;
This guide assumes you know the basics of using a bash terminal: ssh'ing into a server, running bash commands, editing text files, etc.&lt;br /&gt;
&lt;br /&gt;
If you have no experience using bash, maybe start [https://www.howtogeek.com/140679/beginner-geek-how-to-start-using-the-linux-terminal/ here]. Editing text files via commandline is often a challenge. Suggest using nano and reading guide [https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ here]&lt;br /&gt;
&lt;br /&gt;
If you are new to linux and accessing your server from Windows, highly suggest using MobaXterm as your SSH client as that can make required editing of text files easier using built in editor instead of the native linux command line editors.&lt;br /&gt;
&lt;br /&gt;
And finally, ask yourself why you want to setup a server? If you look at the list, there are many, many more servers than players. If you don't have a team, discord community, or group of friends ready to play on your server, chances are it will go unused. Got one of these... great, let's go. &lt;br /&gt;
&lt;br /&gt;
If you don't want to go through the hassle yourself and want to pay for a hosting service Arctic VR (PC and Shack) and Horde (Shack) provide a server hosting services and are trusted in the community. See links below.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Requirements ===&lt;br /&gt;
&lt;br /&gt;
'''Pavlovserver can only be hosted under Linux.''' &lt;br /&gt;
&lt;br /&gt;
This can be running as a VM under windows, but this will increase the complexity of the setup beyond this guide. &lt;br /&gt;
&lt;br /&gt;
Ubuntu 18.04 x86_64, Ubuntu 19/04 amd64, Ubuntu 20.04, and Rocky Linux 8 are confirmed working. Ubuntu 15.04 x86 is known to fail to install using this guide. Recommend not running on &amp;quot;minimal&amp;quot; images as some tools are missing. &lt;br /&gt;
&lt;br /&gt;
* 2GB RAM + 1GB RAM per each additional server with 10 players. More RAM is recommended for larger maps, higher player counts, or complex gamemodes. Not having enough RAM is a common cause of server crashes.&lt;br /&gt;
&lt;br /&gt;
* A ~2.5Ghz CPU will comfortably support a 10 player server.&lt;br /&gt;
 &lt;br /&gt;
* A ~4Ghz CPU will comfortably support 24 players. This is a limit built into Pavlov itself, no server will allow players to join over 24. Lower player counts are recommended for complex gamemodes (E.g. CodZ) and/or highly detailed maps, so that maximum number will often be lower.&lt;br /&gt;
&lt;br /&gt;
(Note that these are '''not''' hard limits for player counts, just suggestions for the best performance, based on experiences with many server providers on different grades of hardware.)&lt;br /&gt;
 &lt;br /&gt;
* Pavlovserver is functionally single threaded (one thread does vast majority of work). More CPUs only help if you are running more servers. More clockspeed = higher performance = more users per server. &lt;br /&gt;
The maximum number of servers you can run is dependent on how many CPUs you have. For example, if you have an 8 core CPU, the maximum number of servers would be 7. You should always have at least one CPU free as overhead, as Pavlov servers can use slightly more than one thread.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting at home ====&lt;br /&gt;
When hosting at home there are additional requirements regarding networking: Your router has to support port-forwarding, hair-pinning/LoopbackNAT, and respond to ping requests.  These techniques are necessary to allow your server to be found and to talk back to the client. please see https://en.wikipedia.org/wiki/Port_forwarding,  https://en.wikipedia.org/wiki/Hairpinning, and https://www.speedguide.net/faq/how-to-become-pingable-behind-a-routerfirewall-376 for more info and google for these terms in addition to your router model to find guides on how to enable/configure it properly. If you have modern Router, it may have these features already enabled, in this case you just have to configure port-forwarding. If you can see your server but not join it while others can, this is indicative of a failure of LoopbackNAT. &lt;br /&gt;
&lt;br /&gt;
A second challenge to hosting at home is CGNAT (Carrier grade NAT: https://www.a10networks.com/blog/carrier-grade-nat/). Just like NAT on your home network that has to be gotten around w/ port-forwarding, CGNAT breaks the ability of external connections to be made back to your server, but the controls are solely in your ISPs hands. Sometimes if you ask, you can be removed from CGNAT pools and/or assigned a static IP. CGNAT rollouts are becoming very common now, so if your server worked then doesn't allow connections now, your ISP may have made this change. &lt;br /&gt;
&lt;br /&gt;
You can check whether you’re on a CGNAT network by visiting a Web site such as ipaddress.com or whatsmyip.com and comparing the IP address listed to the public/WAN IP address assigned to your Internet gateway. To find your gateway’s public IP address, check the status page in the administrative interface. If the two IP addresses differ, you’re likely on a CGNAT network. If so, this problem must be resolved before you go any further. &lt;br /&gt;
&lt;br /&gt;
'''Not understanding these requirements and configuration is a frequent cause of failed setups and questions in discord. Don't skip this if you are trying to host from home'''&lt;br /&gt;
&lt;br /&gt;
'''There are serious security implications of hosting this software at home.''' None of the devs are security experts and there has been no security review of the code. You are opening up your system to the world and publicity advertising this fact. Expect that any system hosting this software is open to compromise from the Internet and act accordingly. If your router offers a DMZ network, use it. Consider hosting on a cloud based server and think twice before running this software on any system that contains data you care about or has access to networks and computers you care about.&lt;br /&gt;
&lt;br /&gt;
If you're hosting at home using Oracle's VirtualBox, there are steps you can take to prevent double NAT (which can cause issues later on)&lt;br /&gt;
&lt;br /&gt;
1. Select your VM and then click Settings in VirtualBox's main window.&lt;br /&gt;
&lt;br /&gt;
2. Click on Network and change Attached To from NAT to Bridged Adapter. &lt;br /&gt;
&lt;br /&gt;
Once you've done this, your VM should be connected directly to your home router and double NAT should no longer be a issue.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Hosting Providers ====&lt;br /&gt;
&lt;br /&gt;
Considering the suggested server specs, you may be interested in the following hosting providers. For providers promising dedicated &amp;quot;Pavlov hosting&amp;quot; as opposed to general VPS services please contact and ask how you change maps being hosted and how you get RCON access before you put your money down. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Provider              | Base CPU | Details&lt;br /&gt;
Arctic VR             | 4.5 GHz  | https://www.arctic-vr.com/server-hosting&lt;br /&gt;
Amazon Web Services   | 4.0 GHz  | https://aws.amazon.com/ec2/instance-types/z1d/&lt;br /&gt;
VULTR                 | 4.0 GHz  | https://www.vultr.com/products/high-frequency-compute/&lt;br /&gt;
packet.com            | 3.5 GHz  | https://www.packet.com/cloud/servers/c1-small/       &lt;br /&gt;
Google Cloud Platform | 3.2 GHz  | https://cloud.google.com/compute/docs/cpu-platforms&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== ARCTIC VR  =====&lt;br /&gt;
&lt;br /&gt;
Arctic VR is the largest and longest running Pavlov VR hosting provider. The In-Game Admin Menu is exclusive to the ArcticVR hosting service. They offer EU, NA East and NA West servers for both shack and PCVR. ArcticVR offers the fastest Pavlov servers as well as DDos Protection, RCON remote management, custom maps, low pings, unlimited slots, and expert support.&lt;br /&gt;
&lt;br /&gt;
Website: https://www.arctic-vr.com/server-hosting&lt;br /&gt;
&lt;br /&gt;
[[File:Arctic_options.png|link=https://www.arctic-vr.com/server-hosting|700px]]&lt;br /&gt;
&lt;br /&gt;
===== VULTR =====&lt;br /&gt;
&lt;br /&gt;
Consider using a referral from the community:&lt;br /&gt;
&lt;br /&gt;
Carlos: https://www.vultr.com/?ref=8615589-6G&lt;br /&gt;
&lt;br /&gt;
Carrot: https://www.vultr.com/?ref=8689348&lt;br /&gt;
&lt;br /&gt;
Archaeo: https://www.vultr.com/?ref=8653652-6G&lt;br /&gt;
&lt;br /&gt;
Cheeto: https://www.vultr.com/?ref=8717358&lt;br /&gt;
&lt;br /&gt;
For a Pavlov Shack server, I recommend minimum Cloud Compute, Intel High Performance, Ubuntu 20.04, and disabled automatic backups.  At the time, this was $6/m.  Some of the cheap options have 1TB bandwidth, and some have 2TB+.  If it's a personal server, 1TB could be fine, but 2TB should be safe.&lt;br /&gt;
&lt;br /&gt;
===== Google Cloud Platform (90 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
The below configuration is successfully running 4 pavlov PC instances with ~15 total maps and up to 24 players per server. If you want more maps use larger boot disk. Both can dynamically be scaled based on popularity.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; compute engine -&amp;gt; VM instances&lt;br /&gt;
create instance&lt;br /&gt;
- region: wherever you like&lt;br /&gt;
- machine type: n1-highcpu-4 (4 vCPUs, 3.6 GB memory)&lt;br /&gt;
- boot disk: Ubuntu 20.04&lt;br /&gt;
- boot disk -&amp;gt; size: 25gb&lt;br /&gt;
- network tags: pavlov-server&lt;br /&gt;
- [create]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Menu -&amp;gt; Vpc network -&amp;gt; firewall rules&lt;br /&gt;
[Create firewall rule]&lt;br /&gt;
Name: pavlov server&lt;br /&gt;
Target Tags: pavlov-server&lt;br /&gt;
Source IP Ranges: 0.0.0.0/0&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; UDP: 7777, 8177 (Shack and PC)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: 7777, 8177 (Shack-only)&lt;br /&gt;
Protocols and Ports -&amp;gt; Specified protocols and ports -&amp;gt; TCP: {RCON port - default 9100}&lt;br /&gt;
[save]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Amazon Web Services (30 day free credit available) =====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Login -&amp;gt; Change Region: Choose your region&lt;br /&gt;
Services -&amp;gt; Compute -&amp;gt; EC2 -&amp;gt; Create&lt;br /&gt;
Choose an AMI: Ubuntu 18.04&lt;br /&gt;
Instance Type: z1d.large&lt;br /&gt;
&lt;br /&gt;
Instance Details -&amp;gt; Tenancy: Dedicated (optional: this will more than triple the cost)&lt;br /&gt;
&lt;br /&gt;
Storage: 50gb disk (or whatever, you're in control of the map roster)&lt;br /&gt;
&lt;br /&gt;
Security Groups:&lt;br /&gt;
Create a new Security Group&lt;br /&gt;
Security group name: pavlov-server&lt;br /&gt;
Description: pavlov server&lt;br /&gt;
Rules:&lt;br /&gt;
Type: Custom ICMP Rule - IPV4 / Protocol: Echo Request&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 7777 / Source: 0.0.0.0/0&lt;br /&gt;
Type: Custom UDP Rule / Port Range: 8177 / Source: 0.0.0.0/0&lt;br /&gt;
Type: SSH (optional, but I assume you wanna SSH in..)&lt;br /&gt;
&lt;br /&gt;
Launch -&amp;gt; Create new Keypair -&amp;gt; Download -&amp;gt; Launch&lt;br /&gt;
&lt;br /&gt;
Once it's started, SSH in like:&lt;br /&gt;
$ ssh -i your-key.pem ubuntu@you-server-details.amazonaws.com&lt;br /&gt;
&lt;br /&gt;
(I use cmder on Windows, if you're using putty or mobaxterm or something, might be different)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting Server Install ===&lt;br /&gt;
&lt;br /&gt;
====Obtaining an ApiKey====&lt;br /&gt;
For your server to show up in the server list, there is now a requirement to have an ApiKey issued by vankrupt. This is to prevent DOS attacks against the master server&lt;br /&gt;
&lt;br /&gt;
Get the key by going here: https://pavlov-ms.vankrupt.com/servers/v1/key and using your mobile number to get a SMS &lt;br /&gt;
(note that there have been reported failures of this SMS system for non-US mobiles. In this case DM davevillz your mobile and ask for a key)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Put this key in your Game.ini as follows:&lt;br /&gt;
    ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
or if you would like (personally untested..I would use game.ini) you can call it at server runtime with flag as follows:&lt;br /&gt;
   -KEY=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This key can be re-used for a reasonable number of servers (a limit of 10 has been mentioned). Contact the Devs if you need more servers per key.&lt;br /&gt;
&lt;br /&gt;
====System setup and software installation====&lt;br /&gt;
&lt;br /&gt;
Install dependencies and create the `steam` user. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
Confirm Linux version&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsb_release -a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.04'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Ubuntu 20.10 or higher'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc-s1 libc++-dev unzip&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux, CentOS 8, and RHEL 8'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/g' /etc/selinux/config&lt;br /&gt;
sudo setenforce 0&lt;br /&gt;
sudo yum install gdb curl glibc.i686 libstdc++.i686 libstdc++-devel.i686 libstdc++-devel.x86_64 unzip wget -y&lt;br /&gt;
wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo rpm -i libcxx-3.8.0-3.el7.x86_64.rpm&lt;br /&gt;
sudo useradd -m steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[Optional] Set a password for steam.&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo passwd steam&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Login as the steam user. ('''You will need to do this each time you connect to your server'''):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo su -l steam&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install Steam:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir ~/Steam &amp;amp;&amp;amp; cd ~/Steam &amp;amp;&amp;amp; curl -sqL &amp;quot;https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz&amp;quot; | tar zxvf -&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are different dedicated server versions for Pavlov Server - choose which server version you want to host (PC non-beta, PC Beta, Shack Live, or Shack RC)&lt;br /&gt;
(You will need to run this command each time there is a Pavlov Server update). &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;&lt;br /&gt;
To host '''PC Server (non-beta)''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''PC BETA''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta beta_server +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack Live''' (Quest):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To host '''Shack RC''' (Quest): &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +force_install_dir /home/steam/pavlovserver +login anonymous +app_update 622970 -beta shack_beta +exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that we've installed the server, all pavlov server versions should continue.  &amp;lt;br /&amp;gt;&lt;br /&gt;
Install a fresh copy of steamclient.so (May have to do this after each update):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
~/Steam/steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
mkdir -p ~/.steam/sdk64&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make the PavlovServer script executable. (You only need to do this once):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chmod +x ~/pavlovserver/PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Server Configuration ===&lt;br /&gt;
&lt;br /&gt;
Before starting the server we need to configure it. Start by creating some directories: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Logs&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer&lt;br /&gt;
mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mods/Blacklist/Whitelist (optional)  ====&lt;br /&gt;
&lt;br /&gt;
The following three files allow you to specify mods, banned players, and whitelist players.  These are optional, but go ahead and create them.  Populating the files is described later.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/blacklist.txt&lt;br /&gt;
touch /home/steam/pavlovserver/Pavlov/Saved/Config/whitelist.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Configuring Game.ini====&lt;br /&gt;
Create a new Game.ini file using following command to open an editor and copy/paste the following block into it then save it. Note not all of these options are required. For instance remove or comment out the Password=0000 line to make a public server with no pin. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[/Script/Pavlov.DedicatedServer]&lt;br /&gt;
bEnabled=true&lt;br /&gt;
ServerName=&amp;quot;My_private_idaho&amp;quot;&lt;br /&gt;
MaxPlayers=10     #Set this to 10 for Shack. 24 is the max for PC, setting it higher will not allow players to join. &lt;br /&gt;
ApiKey=&amp;quot;ABC123FALSEKEYDONTUSEME&amp;quot;&lt;br /&gt;
bSecured=true&lt;br /&gt;
bCustomServer=true &lt;br /&gt;
bVerboseLogging=false &lt;br /&gt;
bCompetitive=false #This only works for SND&lt;br /&gt;
bWhitelist=false &lt;br /&gt;
RefreshListTime=120 &lt;br /&gt;
LimitedAmmoType=0 &lt;br /&gt;
TickRate=90&lt;br /&gt;
TimeLimit=60&lt;br /&gt;
#Password=0000 &lt;br /&gt;
#BalanceTableURL=&amp;quot;vankruptgames/BalancingTable/main&amp;quot;&lt;br /&gt;
MapRotation=(MapId=&amp;quot;UGC1758245796&amp;quot;, GameMode=&amp;quot;GUN&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;datacenter&amp;quot;, GameMode=&amp;quot;SND&amp;quot;)&lt;br /&gt;
MapRotation=(MapId=&amp;quot;sand&amp;quot;, GameMode=&amp;quot;DM&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''bEnabled''' - whether the server appears in the server list (unconfirmed)&lt;br /&gt;
* '''ServerName''' - name it will be listed as. (approx 35 chars max)&lt;br /&gt;
* '''MaxPlayers''' - See suggested specs for limits. 10 standard (10 for shack), 20-24 is max recommended for large maps like Stalingrad or PUSH/RUSH modes, and servers allow a maximum of 24 players.&lt;br /&gt;
* '''ApiKey''' - Unique ApiKey required to register server with master server. Replace with your key&lt;br /&gt;
* '''bSecured''' - enabled Valve Anti-Cheat (VAC)&lt;br /&gt;
* '''bCustomServer''' - activates some new modding tools (save and http functions. Required to write to blacklist.txt for bans)&lt;br /&gt;
* '''bCompetitive''' - sets the server to competitive mode for SND. If removed the server will default to false&lt;br /&gt;
* '''bVerboseLogging''' - enables verbose logging, mostly detailed statistics.  Be prepared for significant increase in logging.&lt;br /&gt;
* '''bWhitelist''' - Only allow users in whitelist.txt to join&lt;br /&gt;
* '''RefreshListTime''' - sets how often the running server checks for updates in ban/whitelist/mod files&lt;br /&gt;
* '''LimitedAmmoType''' - sets limited ammo mode &lt;br /&gt;
0 = Unlimited&lt;br /&gt;
1 = Limited Generic&lt;br /&gt;
2 = Limited Specific&lt;br /&gt;
3 = Custom (for modders)&lt;br /&gt;
4 = Limited Special&lt;br /&gt;
5 = Boxless Mode&lt;br /&gt;
&lt;br /&gt;
* '''TimeLimit''' - sets time limit for each map&lt;br /&gt;
* '''TickRate''' - sets the server tickrate. (so far minimum stable seems around 50 and max around 120. Beware setting this changes weapon despawn time and breaks some game modes. Recommend not touching)&lt;br /&gt;
* '''Password''' - PIN number for server #FYI - this is now also changeable via rcon.&lt;br /&gt;
* '''BalanceTableURL''' - Points to a custom balance table from github. See https://github.com/vankruptgames/BalancingTable for instructions. This line isn't needed if you don't have one. &lt;br /&gt;
* '''MapRotation''' - you can add multiple of these. The MapId must be “UGC” followed by the map ID. you can find the map id in the URL of the steam workshop page.  When a match ends, the server will load the next map in the rotation.  You can also use RCON to switch to a map not included in rotation.&lt;br /&gt;
&lt;br /&gt;
Available game modes as of 09/06/2022: SND, TDM, DM, GUN, ZWV, WW2GUN, TANKTDM, KOTH, TTT, OITC, INFECTION, HIDE, PUSH, PH&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And for Shack only: CTF&lt;br /&gt;
&lt;br /&gt;
For maps running a Custom gamemode (CodZ, BR, Duel, etc.) it doesn't matter which gamemode you choose, as the map will automatically override it with the custom mode.&lt;br /&gt;
&lt;br /&gt;
UGC###### are for custom maps from Steam workshop (PC Only). Find the map you want in the workshop. This is the URL for Mirage (https://steamcommunity.com/sharedfiles/filedetails/?id=2670152485). The 10 numbers at the end of the URL are what you need, so UGC1661803933 would be the MapId for Mirage.&lt;br /&gt;
&lt;br /&gt;
==== Firewall/Port forwarding ====&lt;br /&gt;
Using the default settings there are two UDP ports (7777, 8177) that need to be allowed to access the server either by firewall setup or port forwarding. &lt;br /&gt;
&lt;br /&gt;
'''Ubuntu''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ufw status&lt;br /&gt;
sudo ufw allow 7777&lt;br /&gt;
sudo ufw allow 8177&lt;br /&gt;
sudo ufw allow 9100&lt;br /&gt;
sudo ufw status&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Rocky Linux''' firewall commands to check firewall and open ports:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=7777/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/tcp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=8177/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/udp&lt;br /&gt;
sudo firewall-cmd --zone=public --add-port=9100/tcp&lt;br /&gt;
sudo firewall-cmd --list-ports&lt;br /&gt;
firewall-cmd --runtime-to-permanent&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also need to allow Pings (ICMP) for the server's true latency to appear in the master list.&lt;br /&gt;
&lt;br /&gt;
If you are running multiple servers and have set additional ports (see http://wiki.pavlov-vr.com/index.php?title=Dedicated_server#Running_multiple_servers_on_one_host) then you need to allow access to the defined port plus the port 400 higher. So if you use 7000 as your port, then UDP 7000 and 7400 need to be open&lt;br /&gt;
&lt;br /&gt;
If you have setup rcon via RconSettings.txt (below) then that port also need to be allowed access via TCP&lt;br /&gt;
&lt;br /&gt;
If you are running Shack/Quest and want to have maps that are downloadable from your server, your server ports (ex. 7777 &amp;amp; 8177) must also be open via TCP&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== Shack Maps (Quest) ====&lt;br /&gt;
&lt;br /&gt;
If you try to use the steps above to add maps for Shack, youll run into issues very quickly. This is because Shack has no affiliation to Steam, and therefore cannot use Steam Workshop maps like above. In the future, these steps will apply to PC servers as well, allowing a server to hold the map itself, instead of offloading to Steam.&lt;br /&gt;
&lt;br /&gt;
To get started, first create the directory to hold the maps&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir -p /home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can use any number of methods to move the map files onto the server, but ill go over the two simplest, starting with a GUI approach&lt;br /&gt;
&lt;br /&gt;
Download and install CyberDuck onto your &amp;quot;home&amp;quot; PC (Whatever PC you use for access to the server, but not the server itsself): https://cyberduck.io/&lt;br /&gt;
&lt;br /&gt;
Next, download and unzip your map of choice from https://www.pavlovquest.com/ , https://pavlovhorde.com/mapsList, or look in #shack-map-showcase channel in the discord server.  I'm going to use Cheeto's WW2 Items test (http://www.mediafire.com/file/emyt9bs1z9u9ykw/SVR_Cheeto_Items.zip/file ) for this example, you do what you like&lt;br /&gt;
&lt;br /&gt;
In the top left corner, open a connection, set the connection type to SFTP, and fill in the rest of the information. User will be root, password is whatever you set the root pw as (toor in Ubuntu by default)&lt;br /&gt;
&lt;br /&gt;
In the directory dropdown (itll say /root) go back to /&lt;br /&gt;
&lt;br /&gt;
Follow the directories until we arrive back at our &amp;quot;maps&amp;quot; folder &amp;lt;pre&amp;gt;/home/steam/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Drag and drop the unzipped map folder into the main window, in this case itll be SVR_Cheeto_Items&lt;br /&gt;
&lt;br /&gt;
Hit Allow&lt;br /&gt;
&lt;br /&gt;
Youll now see a folder named SVR_Cheeto_Items, and within it should be nothing but 3 files. If there is another folder in it, move this folder to the maps directory, otherwise the server wont work. The 3 files (2 .PAK one .JSON) should be in home/steam/pavlovserver/Pavlov/Saved/maps/SVR_Cheeto_Items, no more, no less.&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
To play the map, you can either use RCON switch map command, or to add the map to your servers automatic map rotation list, add the map's folder name to your Game.ini. This replaces the MapID section, so for our example it would be &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And thats all! Disconnect CyberDuck from your server before playing, otherwise youll have difficulty joining.&lt;br /&gt;
&lt;br /&gt;
-----------&lt;br /&gt;
&lt;br /&gt;
==== Adding Shack Maps over Command Line Interface ====&lt;br /&gt;
&lt;br /&gt;
Pavlov Shack servers load maps at pavlovserver start.  '''YOU MUST RESTART THE GAME SERVER TO USE THE MAPS.'''&lt;br /&gt;
&lt;br /&gt;
A bit more complicated, but adding maps over CLI has its benefits&lt;br /&gt;
&lt;br /&gt;
First, CD to the maps directory you made above&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/pavlovserver/Pavlov/Saved/maps&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Download the map files from whatever you use to upload them. To do this, you can either use curl or wget&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O insertURLhere&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;'''If you download your map from Google Drive''', make sure that your .zip folder is shared to anyone.&amp;lt;/p&amp;gt;&lt;br /&gt;
Then, get the file's url from the shared link. &amp;lt;p&amp;gt;Example : ''&amp;lt;nowiki&amp;gt;https://drive.google.com/file/d/19bI8gUHaN5tUrDvnadAacUnchQf6_k/view&amp;lt;/nowiki&amp;gt;''&amp;lt;/p&amp;gt; &amp;lt;p&amp;gt;will be ''19bI8gUHaN5tUrDvnadAacUnchQf6_k''&amp;lt;/p&amp;gt;&lt;br /&gt;
Edit &amp;quot;fileId&amp;quot; and &amp;quot;fileName&amp;quot; before you execute the command. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fileId=19bI8gUHaN5tUrDvnadAacUnchQf6_k&lt;br /&gt;
fileName=SVR_USER_MAPNAME&lt;br /&gt;
curl -sc /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;id=${fileId}&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
code=&amp;quot;$(awk '/_warning_/ {print $NF}' /tmp/cookie)&amp;quot;  &lt;br /&gt;
curl -Lb /tmp/cookie &amp;quot;https://drive.google.com/uc?export=download&amp;amp;confirm=${code}&amp;amp;id=${fileId}&amp;quot; -o ${fileName} &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To keep with the Items example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -O https://cdn.discordapp.com/attachments/744185280759857234/745027406695366788/SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, unzip the file. If this next step errors out, saying the command is unknown, switch back to the root user (su root), and install unzip (sudo apt install unzip), then return to the steam user, and continue.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;unzip SVR_Cheeto_Items.zip&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now finish like before by adding the map to your Game.ini&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;nano /home/steam/pavlovserver/Pavlov/Saved/Config/LinuxServer/Game.ini&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;MapRotation=(MapId=&amp;quot;SVR_Cheeto_Items&amp;quot;, GameMode=&amp;quot;TDM&amp;quot;)&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Admin/Moderator list (optional) ====&lt;br /&gt;
&lt;br /&gt;
The only working in-game admin menu is through Arctic VR server hosting (see below).  &lt;br /&gt;
&lt;br /&gt;
If you add moderators to your server, they will not be subject to vote kicks. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
nano ~/pavlovserver/Pavlov/Saved/Config/mods.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example Mod List:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
76541198397498572 #Optional Comment: Player name&lt;br /&gt;
76541198397498573 #Some Other Player&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== ArcticVR Admin Menu ====&lt;br /&gt;
&lt;br /&gt;
[[File:Arcticmenu.jpg|500px|link=https://www.arctic-vr.com/server-admin-menu]]&lt;br /&gt;
&lt;br /&gt;
Arctic-VR Offers an advanced In-Game Admin menu that is exclusive to their hosting service. Features include: &lt;br /&gt;
* Switch Maps+Modes&lt;br /&gt;
* Teleport Players to Players&lt;br /&gt;
* Change Player Skins&lt;br /&gt;
* Control Player Buying+Cash&lt;br /&gt;
* Spawn Items&lt;br /&gt;
* Clean up corpses + guns&lt;br /&gt;
* Spawn Bots&lt;br /&gt;
* Spawn Items for other players&lt;br /&gt;
* Control Teams + Balance/Shuffle Teams&lt;br /&gt;
* ResetSND&lt;br /&gt;
* And More&lt;br /&gt;
&lt;br /&gt;
You can read more about the ArcticVR admin menu on their website: https://www.arctic-vr.com/server-admin-menu&lt;br /&gt;
&lt;br /&gt;
==== Handy tools for finding steamIDs ==== &lt;br /&gt;
&lt;br /&gt;
Steam ID finder: https://steamidfinder.com/lookup/ or https://steamid.xyz/&lt;br /&gt;
&lt;br /&gt;
You want to enter in the steamID64 format. &lt;br /&gt;
&lt;br /&gt;
This tool can convert or lookup IDs:  https://steamid.io/&lt;br /&gt;
&lt;br /&gt;
If you are looking for a steamID of a player that has been on your server recently this is technique to find them:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
grep -i playername ~/pavlovserver/Pavlov/Saved/Logs/* | grep TicketValidation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure Rcon ===&lt;br /&gt;
To enable Rcon access create config file:&lt;br /&gt;
&amp;lt;pre&amp;gt; nano /home/steam/pavlovserver/Pavlov/Saved/Config/RconSettings.txt &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy in the following text - change password, and if desired the port:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Password=ChangeThisPassword&lt;br /&gt;
Port=9100&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You must specify a port for the Rcon server to use as well as a Password (use a different port per sever instance if running multiple server instances off the same hardware)&lt;br /&gt;
&lt;br /&gt;
=== Starting the server ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/pavlovserver &amp;amp;&amp;amp; ./PavlovServer.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That's it, your server will be automatically broadcast to the master server! :) &lt;br /&gt;
&lt;br /&gt;
Two handy tools to determine quickly if your server is broadcasting are [https://pablub.xyz/ Pablub] (PC only) and [https://pavlovhorde.com/ Horde] (Shack) and [https://pavlovhorde.com/pcServers Horde] (PC version)&lt;br /&gt;
&lt;br /&gt;
Note that when you close your terminal, the server will go down. See the &amp;quot;supervisors&amp;quot; section below for how to prevent this.&lt;br /&gt;
&lt;br /&gt;
=== Auto-updating the server ===&lt;br /&gt;
&lt;br /&gt;
Assuming you have followed this guide and used the default paths, users, and install instructions, you can paste the following into your terminal to auto-update your Pavlov server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; 'EOF' &amp;gt; $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
USER=&amp;quot;steam&amp;quot;&lt;br /&gt;
SERVICENAME=&amp;quot;pavlovserver.service&amp;quot;&lt;br /&gt;
INSTALLDIRNAME=&amp;quot;pavlovserver&amp;quot;&lt;br /&gt;
USERHOME=&amp;quot;/home/$USER&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Beginning Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl stop &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
sleep 5&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +force_install_dir &amp;quot;$USERHOME/$INSTALLDIRNAME&amp;quot; +app_update 622970 +exit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; &amp;quot;$USERHOME/Steam/steamcmd.sh&amp;quot; +login anonymous +app_update 1007 +quit&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/.steam/sdk64/steamclient.so&amp;quot;&lt;br /&gt;
sudo -iu &amp;quot;$USER&amp;quot; cp &amp;quot;$USERHOME/Steam/steamapps/common/Steamworks SDK Redist/linux64/steamclient.so&amp;quot; &amp;quot;$USERHOME/pavlovserver/Pavlov/Binaries/Linux/steamclient.so&amp;quot;&lt;br /&gt;
&lt;br /&gt;
systemctl start &amp;quot;$SERVICENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo -e &amp;quot;Ending Pavlov VR update run on $(date)\n\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
EOF&lt;br /&gt;
&lt;br /&gt;
chmod +x $HOME/pavlov_daily_update_and_restart.sh&lt;br /&gt;
mkdir $HOME/pavlov_update_logs &amp;amp;&amp;amp; touch $HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log&lt;br /&gt;
CRONLINE=&amp;quot;00 2 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
(sudo crontab -u root -l; echo &amp;quot;$CRONLINE&amp;quot; ) | sudo crontab -u root -&lt;br /&gt;
unset CRONLINE&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These commands will:&lt;br /&gt;
&lt;br /&gt;
1. Create a shell script in the &amp;quot;steam&amp;quot; user's home directory that automatically stops the Pavlov server, pulls any updates via steam, pull updates to the Steamworks SDK Redist, and copies the latest version of steamclient.so to the Pavlov server directory&lt;br /&gt;
&lt;br /&gt;
2. Make the shell script executable&lt;br /&gt;
&lt;br /&gt;
3. Create a new directory called &amp;quot;pavlov_update_logs&amp;quot; in the &amp;quot;steam&amp;quot; user's directory, and create a logfile inside that directory called &amp;quot;pavlov_daily_update_and_restart.sh.log&amp;quot;. You can check this logfile to see the output of the Pavlov and Steam SDK update commands.&lt;br /&gt;
&lt;br /&gt;
4. Create a crontab entry for the root user that runs this shell script automatically every day at 2:00AM local time&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the time that this script runs, edit the numbers &amp;quot;00 2&amp;quot; in the line that starts with &amp;quot;CRONLINE=&amp;quot;. In the example provided, 00 is the minutes column, and 2 is the hour column. For example, if you wanted the server to automatically update and restart at 4:17AM every day, change the line starting with &amp;quot;CRONLINE=&amp;quot; to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
CRONLINE=&amp;quot;17 4 * * * $HOME/pavlov_daily_update_and_restart.sh &amp;gt;&amp;gt;$HOME/pavlov_update_logs/pavlov_daily_update_and_restart.sh.log 2&amp;gt;&amp;amp;1&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the time is PM, use 24-hour time format, e.g. &amp;quot;32 18&amp;quot; for 6:32PM.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Supervising the server using systemd ===&lt;br /&gt;
&lt;br /&gt;
Running '''./PavlovServer.sh''' in your interactive shell is easy, but the server will shut down when you close your terminal. If you want to run the server in the background,&lt;br /&gt;
you'll want to run it under a supervisor. There are many options, ranging from the simple (nohup, screen or tmux), to the&lt;br /&gt;
more robust (supervisord, systemd).&lt;br /&gt;
&lt;br /&gt;
Systemd is running by default on Ubuntu Linux, so we'll use that here.&lt;br /&gt;
&lt;br /&gt;
To run the server as a systemd service, create the file '''/etc/systemd/system/pavlovserver.service''' (as root) by typing &lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
sudo nano /etc/systemd/system/pavlovserver.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy contents below into the file and save.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Pavlov VR dedicated server&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=simple&lt;br /&gt;
WorkingDirectory=/home/steam/pavlovserver&lt;br /&gt;
ExecStart=/home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
&lt;br /&gt;
RestartSec=1&lt;br /&gt;
Restart=always&lt;br /&gt;
User=steam&lt;br /&gt;
Group=steam&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy = multi-user.target&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you'd like your server to start as competitive without editing the game.ini, change the line &amp;quot;ExecStart=/home/steam/pavlovserver/PavlovServer.sh&amp;quot; to look like this below. Though it's much easier to just use the game.ini to enable competitive instead. &amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -COMPETITIVE=1&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Change the user or paths as appropriate. After saving the service file, to start, restart, stop, or monitor the server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl start pavlovserver&lt;br /&gt;
sudo systemctl restart pavlovserver&lt;br /&gt;
sudo systemctl stop pavlovserver&lt;br /&gt;
sudo systemctl status pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To view the logs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo journalctl -u pavlovserver&lt;br /&gt;
# to live-tail the logs&lt;br /&gt;
sudo journalctl -u pavlovserver -f&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to run the pavlov server as soon as your server boots (e.g. a VPS you turn on and off), add pavlov as a startup service:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo systemctl enable pavlovserver&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Advanced Server Administration ==&lt;br /&gt;
&lt;br /&gt;
=== Running multiple servers on one host ===&lt;br /&gt;
&lt;br /&gt;
* Pavlovserver is functionally single threaded (there are multiple threads, but vast majority of work occurs in the primary one). Make sure you have # of pavlovservers + 1 CPU available. More CPUs= more servers. Faster CPU = more players. &lt;br /&gt;
* Make multiple server installs by defining a separate install dir for each server.&lt;br /&gt;
* Run each server with a unique port. eg: '''./PavlovServer.sh -PORT=&amp;quot;Desired Port&amp;quot;'''&lt;br /&gt;
* The Server will use the Desired Port and the Port 400 above (Example: You choose 8200 as Port. So Port 8600 will be used as well)&lt;br /&gt;
* If you are using RCON, each server will need a unique port defined in RconSettings.txt &lt;br /&gt;
* Ensure the ports are forwarded and opened in your firewall &lt;br /&gt;
&lt;br /&gt;
To duplicate directories:&lt;br /&gt;
&lt;br /&gt;
be in the steam home folder&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cp -r pavlovserver pavlovserver1&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -PORT=[Desired Port]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting server in competitive mode ===&lt;br /&gt;
Competitive mode will prevent dead teammates from being able to see the match, to prevent ghosting.&lt;br /&gt;
You can either enable this via Game.ini (described in Game.ini file), or using the -COMPETITIVE=1 parameter.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/home/steam/pavlovserver1/PavlovServer.sh -COMPETITIVE=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Automated Rcon ===&lt;br /&gt;
here are some examples of scripts that interact with a Pavlov server &lt;br /&gt;
&lt;br /&gt;
=== Inspect players every 5 [https://github.com/JTWP-org/inspect-every-5-mins/blob/main/log/inspectPlayer-04-23-2023-21-50.demo.json (GitHub )] ===&lt;br /&gt;
This script will collect a large pool of data about the players on your server  the stats will be collected every 5 mins by default  &amp;lt;sup&amp;gt;(can be changed)&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sup&amp;gt;below is all the info that will be collected every 5 mins&amp;lt;/sup&amp;gt; &lt;br /&gt;
&lt;br /&gt;
   &amp;quot;PlayerInfo&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;PlayerName&amp;quot;: &amp;quot;Salted Cracker Jack&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;UniqueId&amp;quot;: &amp;quot;76561198210003277&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;KDA&amp;quot;: &amp;quot;27/0/18&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;Score&amp;quot;: &amp;quot;72&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;Dead&amp;quot;: false,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;Cash&amp;quot;: &amp;quot;13000&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
       &amp;quot;TeamId&amp;quot;: &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
   },&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Useful Linux Commands ===&lt;br /&gt;
&lt;br /&gt;
List files / folders in directory, print current working directory, &lt;br /&gt;
&amp;lt;pre&amp;gt;ls -la                                    #list files/directories along with authorities and ownership&lt;br /&gt;
pwd                                       #print working directory&lt;br /&gt;
sudo chown &amp;lt;owner&amp;gt; &amp;lt;file/directory&amp;gt;       #change owner of file/directory.  If root created something and you need to change it to steam&lt;br /&gt;
sudo chgrp &amp;lt;group&amp;gt; &amp;lt;file/directory&amp;gt;       #change group of file/directory.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check if pavlov is running by checking process status.  If the only row you see is the grep command, pavlov server is not started.&lt;br /&gt;
&amp;lt;pre&amp;gt; ps -ef | grep pav &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sample output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
steam      34044       1  0 16:52 ?        00:00:00 /bin/sh /home/steam/pavlovserver/PavlovServer.sh&lt;br /&gt;
steam      34066   34044 80 16:52 ?        00:00:04 /home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer&lt;br /&gt;
zombies+   34101   34013  0 16:52 pts/0    00:00:00 grep --color=auto pav&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Kill a process.  Note this command uses 34044, which is a process id from the command output above.&lt;br /&gt;
&amp;lt;pre&amp;gt; kill -9 34044           &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dump the log to the console so you can scroll through it:&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Search the log for a string - replace my_string with case-sensitive string&lt;br /&gt;
&amp;lt;pre&amp;gt; cat /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep my_string &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Default Map ID's ===&lt;br /&gt;
datacenter &lt;br /&gt;
&lt;br /&gt;
sand&lt;br /&gt;
&lt;br /&gt;
bridge&lt;br /&gt;
&lt;br /&gt;
containeryard&lt;br /&gt;
&lt;br /&gt;
siberia (Prison Break)&lt;br /&gt;
&lt;br /&gt;
hospital (Zombies map)&lt;br /&gt;
&lt;br /&gt;
killhouse&lt;br /&gt;
&lt;br /&gt;
range&lt;br /&gt;
&lt;br /&gt;
tutorial&lt;br /&gt;
&lt;br /&gt;
santorini&lt;br /&gt;
&lt;br /&gt;
station&lt;br /&gt;
&lt;br /&gt;
industry&lt;br /&gt;
&lt;br /&gt;
ogcontainers (Shack only)&lt;br /&gt;
&lt;br /&gt;
haguenau (Shack only)&lt;br /&gt;
&lt;br /&gt;
foundation (Shack only)&lt;br /&gt;
&lt;br /&gt;
stalingrad (PC only)&lt;br /&gt;
&lt;br /&gt;
stalingrad_night (PC only)&lt;br /&gt;
&lt;br /&gt;
santorini_night (PC only)&lt;br /&gt;
&lt;br /&gt;
sand_night (PC only)&lt;br /&gt;
&lt;br /&gt;
station_night (PC only)&lt;br /&gt;
&lt;br /&gt;
industry_night (PC only)&lt;br /&gt;
&lt;br /&gt;
bunker (PC only)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Automated server log backup ===&lt;br /&gt;
&lt;br /&gt;
here is how to setup a bash script to 1x a day compress all log files and save them to protect from auto deletion it will also post a discord webhook to confirm its working and saved the days logs &lt;br /&gt;
&lt;br /&gt;
https://github.com/JTWP-org/backUpLogs&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
To run the server without outputting the heartbeat:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;./PavlovServer.sh | sed '/heartbeat/d'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To monitor the logs (without heartbeat) from another terminal:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;tail -f -n10000 /home/steam/pavlovserver/Pavlov/Saved/Logs/Pavlov.log | grep -v 'Sending heartbeat to masterserver'&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Check your CPU Clock Speed with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lscpu | grep MHz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Server won't start ===&lt;br /&gt;
&lt;br /&gt;
Error message:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln: failed to create hard link '/home/steam/.steam/sdk64/steamclient.so': File exists&lt;br /&gt;
ln: failed to create hard link '/home/steam/pavlovserver/Pavlov/Binaries/Linux/steamclient.so': File exists&lt;br /&gt;
/home/steam/pavlovserver/Pavlov/Binaries/Linux/PavlovServer: error while loading shared libraries: libc++.so.1: cannot open shared object file: No such file or directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First two errors are harmless.  The third one is because libc++ step was skipped or failed.  Using sudo capable id (probably not steam id), [re]run this line: &lt;br /&gt;
&amp;lt;pre&amp;gt;sudo apt update &amp;amp;&amp;amp; sudo apt install -y gdb curl lib32gcc1 libc++-dev unzip &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Map wont load (kicks to datacenter) ===&lt;br /&gt;
&lt;br /&gt;
try deleting all the downloaded workshop maps with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/*&amp;lt;/pre&amp;gt; for all maps or&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo rm -rf /tmp/workshop/7777/content/555160/whatever-UGC&amp;lt;/pre&amp;gt; for specific map&lt;br /&gt;
&lt;br /&gt;
=== Map wont load when running in a container ===&lt;br /&gt;
The three typical container problems I have seen:&lt;br /&gt;
&lt;br /&gt;
1) Steam can't write to /tmp for some reason&lt;br /&gt;
&lt;br /&gt;
2) /tmp is actually tmpfs instead of real filesystem and a few gigs of maps runs you out of RAM &lt;br /&gt;
&lt;br /&gt;
3) Made worse by fact that pavlovserver unpacks downloads to ram, then writes to /tmp/workshop. Not enough RAM to do this, no map for you.&lt;br /&gt;
&lt;br /&gt;
=== Server stuck rotating forever ===&lt;br /&gt;
&lt;br /&gt;
Run these 2 commands, then restart your server:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;cd ~/Steam &amp;amp;&amp;amp; ./steamcmd.sh +login anonymous +app_update 1007 +quit&lt;br /&gt;
cp ~/Steam/steamapps/common/Steamworks\ SDK\ Redist/linux64/steamclient.so ~/.steam/sdk64/steamclient.so&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this doesn't fix it, double check that your server isn't running on the same port as another, by running this command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ps -ef | grep pav&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then if 2 servers are on the same port, you can fix it by editing the pavlovserver.service file, and making sure the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;ExecStart=/home/steam/pavlovserver/PavlovServer.sh -PORT=Number&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
has a unique number after the port for each server you're running.&lt;br /&gt;
&lt;br /&gt;
=== Server - ping 999 ===&lt;br /&gt;
Google Cloud Platform - Make sure your compute engine has a network tag and your network rules are applied to the tag.&lt;br /&gt;
Make sure you opened the specified ports.&lt;br /&gt;
&lt;br /&gt;
Network testing tools:&lt;br /&gt;
Test if your server will respond to ping from outside your network:&lt;br /&gt;
https://www.wormly.com/test-remote-ping&lt;br /&gt;
&lt;br /&gt;
Test if your ports are accessible via UDP (7777,8177,9100):&lt;br /&gt;
https://www.ipvoid.com/udp-port-scan/&lt;br /&gt;
&lt;br /&gt;
=== Can't connect to RCON ===&lt;br /&gt;
Check the file and group owner of RconSettings file.  It should be steam, or the ID used to run the pavlov server.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config &lt;br /&gt;
ls -la &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the owner/group are not steam, using root or an id with sudo authority, change them to steam, confirm they are now set properly, then restart the pavlov server.  (Note - if Rcon has wrong permissions, after fixing you should also to check the other config files like Game.ini, mods/blacklist/whitelist for the same issue.  If steam can't access these files, it could cause problems.).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /home/steam/pavlovserver/Pavlov/Saved/Config&lt;br /&gt;
sudo chown steam RconSettings.txt&lt;br /&gt;
sudo chgrp steam RconSettings.txt&lt;br /&gt;
ls -la &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PC ONLY - Map Download stops ===&lt;br /&gt;
&lt;br /&gt;
When downloading a large map from the steam workshop make sure your VPS/Dedi or Shared hosting provider (Otherwise known as a GSP's) has enough RAM assigned to store the map files in its tempfs (stored in ram)!&lt;br /&gt;
&lt;br /&gt;
This is less likely to happen on Dedicated servers and VPS with a decent amount of ram unless you are using docker with RAM limits! &lt;br /&gt;
&lt;br /&gt;
Most GSP's will be using docker or some other type of jailing method to limit system resource allocations and direct access to the host machine, if they are and you know what map you want to use make sure you order a service with enough ram to store your map. If in doubt contact your GSP's support team.&lt;br /&gt;
&lt;br /&gt;
=== Getting Help ===&lt;br /&gt;
&lt;br /&gt;
There's a #pc-custom-servers channel on the official Pavlov Discord - https://discord.gg/Pavlov-VR. Lots of helpful people there!&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=ItemIDs&amp;diff=523</id>
		<title>ItemIDs</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=ItemIDs&amp;diff=523"/>
		<updated>2023-05-25T22:35:55Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: how to use rcon to find custom item id and they can be spawned too&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a full list of items, vehicles, and skin IDs for Pavlov VR, for use in either map making or spawning items through Rcon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Weapons=&lt;br /&gt;
====Pistols====&lt;br /&gt;
: 1911&lt;br /&gt;
: 57&lt;br /&gt;
: cet9&lt;br /&gt;
: de&lt;br /&gt;
: goldengun&lt;br /&gt;
: luger&lt;br /&gt;
: m9&lt;br /&gt;
: revolver&lt;br /&gt;
: silentcet9&lt;br /&gt;
: sock&lt;br /&gt;
: tokarev&lt;br /&gt;
: webley&lt;br /&gt;
&lt;br /&gt;
====SMGs====&lt;br /&gt;
: ak&lt;br /&gt;
: ar9&lt;br /&gt;
: detectivesmg&lt;br /&gt;
: kross&lt;br /&gt;
: mp40&lt;br /&gt;
: mp5&lt;br /&gt;
: p90&lt;br /&gt;
: ppsh&lt;br /&gt;
: skorpion&lt;br /&gt;
: smg&lt;br /&gt;
: sten&lt;br /&gt;
: thompson&lt;br /&gt;
: uzi&lt;br /&gt;
&lt;br /&gt;
====Shotguns====&lt;br /&gt;
: autoshotgun&lt;br /&gt;
: drumshotgun&lt;br /&gt;
: sawedoff&lt;br /&gt;
: shotgun&lt;br /&gt;
: trenchgun&lt;br /&gt;
&lt;br /&gt;
====Rifles====&lt;br /&gt;
: ak12&lt;br /&gt;
: ak47&lt;br /&gt;
: akshorty&lt;br /&gt;
: ar&lt;br /&gt;
: aug&lt;br /&gt;
: autosniper&lt;br /&gt;
: g43&lt;br /&gt;
: galul&lt;br /&gt;
: m16&lt;br /&gt;
: m1garand&lt;br /&gt;
: sks&lt;br /&gt;
: stg44&lt;br /&gt;
: svt40&lt;br /&gt;
: vanas&lt;br /&gt;
&lt;br /&gt;
====LMGs====&lt;br /&gt;
: bar&lt;br /&gt;
: bren&lt;br /&gt;
: dp27&lt;br /&gt;
: lmga&lt;br /&gt;
: mg42&lt;br /&gt;
: pkm&lt;br /&gt;
: tankmg (Old MG42)&lt;br /&gt;
&lt;br /&gt;
====Snipers====&lt;br /&gt;
: antitank&lt;br /&gt;
: awp&lt;br /&gt;
: hunting&lt;br /&gt;
: kar98&lt;br /&gt;
: leeenfield&lt;br /&gt;
: mosin&lt;br /&gt;
: scur&lt;br /&gt;
: springfield&lt;br /&gt;
: vzz&lt;br /&gt;
&lt;br /&gt;
====Rocket Launchers====&lt;br /&gt;
: rl_m1a1&lt;br /&gt;
: rl_panzer&lt;br /&gt;
: rl_piat&lt;br /&gt;
: rl_rpg&lt;br /&gt;
: tankturret (Old M1A1 rocket)&lt;br /&gt;
&lt;br /&gt;
====Knives====&lt;br /&gt;
: knife&lt;br /&gt;
: tttknife&lt;br /&gt;
: ww2knife&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
: flaregun&lt;br /&gt;
: newtonlauncher&lt;br /&gt;
: taser&lt;br /&gt;
: tranqgun&lt;br /&gt;
&lt;br /&gt;
=Items=&lt;br /&gt;
&lt;br /&gt;
====Attachments====&lt;br /&gt;
: acog&lt;br /&gt;
: bayonet_kar98&lt;br /&gt;
: bayonet_leeenfield&lt;br /&gt;
: bayonet_m1garand&lt;br /&gt;
: bayonet_mosin&lt;br /&gt;
: bayonet_springfield&lt;br /&gt;
: bayonet_trenchgun&lt;br /&gt;
: canted_reddot&lt;br /&gt;
: flashlight_rifle&lt;br /&gt;
: grip_angled&lt;br /&gt;
: grip_vertical&lt;br /&gt;
: holo&lt;br /&gt;
: laser_pistol&lt;br /&gt;
: laser_rifle&lt;br /&gt;
: reddot&lt;br /&gt;
: reddot_pistol&lt;br /&gt;
: scope&lt;br /&gt;
: scope_kar98&lt;br /&gt;
: scope_leeenfield&lt;br /&gt;
: scope_mosin&lt;br /&gt;
: scope_springfield&lt;br /&gt;
: supp_pistol&lt;br /&gt;
: supp_rifle&lt;br /&gt;
&lt;br /&gt;
====Meds====&lt;br /&gt;
: adrenaline&lt;br /&gt;
: bandage&lt;br /&gt;
: medkit&lt;br /&gt;
: painkillers&lt;br /&gt;
: syringe&lt;br /&gt;
: ww2bandage&lt;br /&gt;
: ww2medkit&lt;br /&gt;
: ww2painkillers&lt;br /&gt;
: ww2syringe&lt;br /&gt;
&lt;br /&gt;
====Grenades====&lt;br /&gt;
: flash&lt;br /&gt;
: flash_aurora&lt;br /&gt;
: flash_ru&lt;br /&gt;
: grenade&lt;br /&gt;
: grenade_aurora&lt;br /&gt;
: grenade_dis&lt;br /&gt;
: grenade_ger&lt;br /&gt;
: grenade_ru&lt;br /&gt;
: grenade_svt&lt;br /&gt;
: grenade_us&lt;br /&gt;
: smoke&lt;br /&gt;
: smoke_ger&lt;br /&gt;
: smoke_ru&lt;br /&gt;
: smoke_svt&lt;br /&gt;
: smoke_us&lt;br /&gt;
&lt;br /&gt;
====Mines====&lt;br /&gt;
: antipersonnelmine&lt;br /&gt;
: antitankmine&lt;br /&gt;
: tripalarm&lt;br /&gt;
&lt;br /&gt;
====Ammo====&lt;br /&gt;
: ammo_pistol&lt;br /&gt;
: ammo_rifle&lt;br /&gt;
: ammo_shotgun&lt;br /&gt;
: ammo_smg&lt;br /&gt;
: ammo_sniper&lt;br /&gt;
: ammo_special&lt;br /&gt;
: ammocrate&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
: armour&lt;br /&gt;
: ballisticsshield&lt;br /&gt;
: boltcutters&lt;br /&gt;
: cloakdisrupter&lt;br /&gt;
: crowbar&lt;br /&gt;
: dnascanner&lt;br /&gt;
: handcuffs&lt;br /&gt;
: healthstation&lt;br /&gt;
: kevlarhelmet&lt;br /&gt;
: keycard&lt;br /&gt;
: lockpick&lt;br /&gt;
: monocular&lt;br /&gt;
: pickaxe&lt;br /&gt;
: pipe&lt;br /&gt;
: pliers&lt;br /&gt;
: pushBomb&lt;br /&gt;
: repairtool&lt;br /&gt;
: skinhelmet_ger&lt;br /&gt;
: skinhelmet_svt&lt;br /&gt;
: skinhelmet_us&lt;br /&gt;
: snowball&lt;br /&gt;
: teleporter&lt;br /&gt;
: tttc4&lt;br /&gt;
&lt;br /&gt;
=Skins=&lt;br /&gt;
[[File:T_Portrait_HDNSoldier_Face.png|frameless|32x32px]] aurora &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Clown_Face.png|frameless|32x32px]] clown&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Cop_Face.png|frameless|32x32px]] cop&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Farmer_Face.png|frameless|32x32px]] farmer&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Ger_Face.png|frameless|32x32px]] german&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Hidden_Face.png|frameless|32x32px]] kevin&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Naked_Face.png|frameless|32x32px]] naked&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_NATOv2_Face.png|frameless|32x32px]] nato&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Prisoner_Face.png|frameless|32x32px]] prisoner&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Rusv2_Face.png|frameless|32x32px]] russian&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Svt_Face.png|frameless|32x32px]] soviet&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_US_Face.png|frameless|32x32px]] us&lt;br /&gt;
&lt;br /&gt;
=Vehicles=&lt;br /&gt;
[[File:ATV.png|57x57px]] atv&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Kubelwagen.png|57x57px]] kubel&amp;lt;br /&amp;gt;&lt;br /&gt;
motorcycle (Shack only)&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Panzer4.png|57x57px]] panzer&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Sherman.png|57x57px]] sherman&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T34.png|57x57px]] t34&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Tiger.png|57x57px]] tiger&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Truck.png|57x57px]] truck&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Willys.png|57x57px]] willys&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Willys_Soviet.png|57x57px]] willys_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=TTT Roles (Case Sensitive)=&lt;br /&gt;
[[File:T_InnocentIcon.png|frameless|20x20px]] Innocent&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_TraitorIcon.png|frameless|20x20px]] Traitor&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_DetectiveIcon.png|frameless|20x20px]] Detective&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_MercenaryIcon.png|frameless|20x20px]] Mercenary&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_GlitchIcon.png|frameless|20x20px]] Glitch&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_AssassinIcon.png|frameless|20x20px]] Assassin&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_JesterIcon.png|frameless|20x20px]] Jester&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_SurvivalistIcon.png|frameless|20x20px]] Survivalist&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_SheriffIcon.png|frameless|20x20px]] Sheriff&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_TankIcon.png|frameless|20x20px]] Tank&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_LonwWolfIcon.png|frameless|20x20px]] LoneWolf&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;u&amp;gt;Custom items ? (map specific)&amp;lt;/u&amp;gt; =&lt;br /&gt;
Spawning custom items can be done like any of the base game items you will just need the item id and use the rcon command &amp;lt;code&amp;gt;ITEMLIST&amp;lt;/code&amp;gt; when the map is loaded &amp;lt;sub&amp;gt;( it may show some as there is a max to the items it can list  and the custom items will be listed with the default ones)&amp;lt;/sub&amp;gt; &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Making_Skins&amp;diff=522</id>
		<title>Making Skins</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Making_Skins&amp;diff=522"/>
		<updated>2023-05-24T22:33:43Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Creating Skins - Beginner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: Making custom skins is not officially supported. There has been some drama in the past about users getting banned for messing with the game files. With an official skin shop planned at being released at some time in the future it is very possible that these methods will not be recomended in the future. &lt;br /&gt;
&lt;br /&gt;
== Creating Skins - Beginner ==&lt;br /&gt;
(the most common way ) When creating skins for your Pavlov Map you will need a few things.&lt;br /&gt;
&lt;br /&gt;
You will need:&lt;br /&gt;
&lt;br /&gt;
* [https://www.substance3d.com/ Adobe Substance Painter 3D] &lt;br /&gt;
* (Alternatives) [https://quixel.com/mixer/ Quixel Mixer], [https://www.blender.org/download/ Blender] or [https://substance3d.adobe.com/education/ Substance Painter Student License] &lt;br /&gt;
&lt;br /&gt;
* Your weapon model with bake maps from [https://discord.gg/TFkKrVhE3A Pavlov Artists]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you have those things you can find a tutorial for [https://youtu.be/NP7XnnIvkOs Adobe Substance 3D], or you can find one for your alternative '''(We strongly do not encourage you pirate or fraud for a version of Adobe Substance as it puts you at risk)'''&lt;br /&gt;
&lt;br /&gt;
If you are looking to get custom weapons then you can find how to here: [[Custom Guns]]&lt;br /&gt;
&lt;br /&gt;
== Problems with Gun Skin Making ==&lt;br /&gt;
Common problems with Gun Skin Making are:&lt;br /&gt;
&lt;br /&gt;
* Skin showing up as grey checkerboard&lt;br /&gt;
* Skin not working at all or in different place&lt;br /&gt;
&lt;br /&gt;
* Lighting or skin flickering problems&lt;br /&gt;
&lt;br /&gt;
===== Skin showing up as a grey checkerboard: =====&lt;br /&gt;
Make sure skeletal mesh is checked on the mat editor. If that doesn't work then it is mostly caused from you not &lt;br /&gt;
&lt;br /&gt;
using the custom materials in [https://ptb.discord.com/channels/1018963448383680553/1020750094443741317 Pavlov Artist's modkit] or your material isn't set up correctly, make sure you follow the tutorial and install the custom materials modkit in the project files.&lt;br /&gt;
&lt;br /&gt;
You will also need to correctly install M_PavlovGunMaster and create a material instance so you can mix your ORM, Occlusion and Base Colour etc.&lt;br /&gt;
&lt;br /&gt;
===== Skin not working at all or in different place: =====&lt;br /&gt;
Two things: Your skin requires the switch slots to be ticked or you haven't touched your skin box zone which is the outline box surrounding your skinbox blueprint in the editor. &lt;br /&gt;
&lt;br /&gt;
Mostly rifles and not handguns or throwables use switch slots according to Chalk (Pavlov Artists founder) &lt;br /&gt;
&lt;br /&gt;
If you do not touch your skinbox zone then it will not apply the skin. If you want a constant skin then make sure the skin box zone covers the spawns or the whole map with scaling.&lt;br /&gt;
&lt;br /&gt;
===== Lighting or skin flickering problems =====&lt;br /&gt;
You haven't set up your sphere reflection or built the light, but if you have then you haven't setup the skinbox correctly.&lt;br /&gt;
&lt;br /&gt;
== Creating Character Skins ==&lt;br /&gt;
Pretty much your doing the same as you do with guns using the character models found in the resource channel of Pavlov Artists. I would stick to to the normal character textures.&lt;br /&gt;
&lt;br /&gt;
But if you want for an example an all gold NATO skin then you can make one, just expect a few issues a long the way.&lt;br /&gt;
&lt;br /&gt;
a big problem with trying to edit the default skins or vehicles is the gore and damage will break the skin the first time they are shot so u would need to find a way to disable that  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if you are looking to change the models of them, you can here: [[Changing the character model]]&lt;br /&gt;
&lt;br /&gt;
== Personal Skins ==&lt;br /&gt;
In order to make a personal skin you will need to have it built into a map because as of now there is no skin support so they must be built into the map  however if u wanted to go that route  someone already made some logic that can help you with that,  [https://drive.google.com/file/d/1FtDn79igDXZfMCXRvF3mIVPHiv1wU2I9/view?usp=share_link THW Reaper's skinbox] (CustomPlayers Skinbox) it uses player ids (names/steamids) to assign personal skins, as of now it works. &lt;br /&gt;
&lt;br /&gt;
If it breaks in the future contact TWH Reaper or SmallDvrkOne.&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=ItemIDs&amp;diff=404</id>
		<title>ItemIDs</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=ItemIDs&amp;diff=404"/>
		<updated>2023-05-03T09:04:36Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Weapons */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a full list of items, vehicles, and skin IDs for Pavlov VR, for use in either map making or spawning items through Rcon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
1911&amp;lt;br /&amp;gt;&lt;br /&gt;
57&amp;lt;br /&amp;gt;&lt;br /&gt;
AK12&amp;lt;br /&amp;gt;&lt;br /&gt;
AK47&amp;lt;br /&amp;gt;&lt;br /&gt;
AR&amp;lt;br /&amp;gt;&lt;br /&gt;
AUG&amp;lt;br /&amp;gt;&lt;br /&gt;
AntiTank&amp;lt;br /&amp;gt;&lt;br /&gt;
AutoShotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
AutoSniper&amp;lt;br /&amp;gt;&lt;br /&gt;
DE&amp;lt;br /&amp;gt;&lt;br /&gt;
DrumShotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
G43&amp;lt;br /&amp;gt;&lt;br /&gt;
LMGA&amp;lt;br /&amp;gt;&lt;br /&gt;
RL_M1A1&amp;lt;br /&amp;gt;&lt;br /&gt;
RL_PIAT&amp;lt;br /&amp;gt;&lt;br /&gt;
Revolver&amp;lt;br /&amp;gt;&lt;br /&gt;
Tokarev&amp;lt;br /&amp;gt;&lt;br /&gt;
ak&amp;lt;br /&amp;gt;&lt;br /&gt;
akshorty&amp;lt;br /&amp;gt;&lt;br /&gt;
ar9&amp;lt;br /&amp;gt;&lt;br /&gt;
awp&amp;lt;br /&amp;gt;&lt;br /&gt;
bar&amp;lt;br /&amp;gt;&lt;br /&gt;
bren&amp;lt;br /&amp;gt;&lt;br /&gt;
cet9&amp;lt;br /&amp;gt;&lt;br /&gt;
detectivesmg&amp;lt;br /&amp;gt;&lt;br /&gt;
dp27&amp;lt;br /&amp;gt;&lt;br /&gt;
flaregun&amp;lt;br /&amp;gt;&lt;br /&gt;
galul&amp;lt;br /&amp;gt;&lt;br /&gt;
goldengun&amp;lt;br /&amp;gt;&lt;br /&gt;
hunting&amp;lt;br /&amp;gt;&lt;br /&gt;
kar98&amp;lt;br /&amp;gt;&lt;br /&gt;
kross&amp;lt;br /&amp;gt;&lt;br /&gt;
leeenfield&amp;lt;br /&amp;gt;&lt;br /&gt;
luger&amp;lt;br /&amp;gt;&lt;br /&gt;
m16&amp;lt;br /&amp;gt;&lt;br /&gt;
m1garand&amp;lt;br /&amp;gt;&lt;br /&gt;
m9&amp;lt;br /&amp;gt;&lt;br /&gt;
mg42&amp;lt;br /&amp;gt;&lt;br /&gt;
mosin&amp;lt;br /&amp;gt;&lt;br /&gt;
mp40&amp;lt;br /&amp;gt;&lt;br /&gt;
mp5&amp;lt;br /&amp;gt;&lt;br /&gt;
newtonlauncher&amp;lt;br /&amp;gt;&lt;br /&gt;
p90&amp;lt;br /&amp;gt;&lt;br /&gt;
ppsh&amp;lt;br /&amp;gt;&lt;br /&gt;
rl_panzer&amp;lt;br /&amp;gt;&lt;br /&gt;
rl_rpg&amp;lt;br /&amp;gt;&lt;br /&gt;
sawedoff&amp;lt;br /&amp;gt;&lt;br /&gt;
scur&amp;lt;br /&amp;gt;&lt;br /&gt;
shotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
silentcet9&amp;lt;br /&amp;gt;&lt;br /&gt;
skorpion (Shack only)&amp;lt;br /&amp;gt;&lt;br /&gt;
sks&amp;lt;br /&amp;gt;&lt;br /&gt;
smg&amp;lt;br /&amp;gt;&lt;br /&gt;
sock&amp;lt;br /&amp;gt;&lt;br /&gt;
springfield&amp;lt;br /&amp;gt;&lt;br /&gt;
sten&amp;lt;br /&amp;gt;&lt;br /&gt;
stg44&amp;lt;br /&amp;gt;&lt;br /&gt;
svt40&amp;lt;br /&amp;gt;&lt;br /&gt;
tankmg (Old MG42)&amp;lt;br /&amp;gt;&lt;br /&gt;
tankturret (Old M1A1 rocket)&amp;lt;br /&amp;gt;&lt;br /&gt;
taser&amp;lt;br /&amp;gt;&lt;br /&gt;
thompson&amp;lt;br /&amp;gt;&lt;br /&gt;
tranqgun&amp;lt;br /&amp;gt;&lt;br /&gt;
trenchgun&amp;lt;br /&amp;gt;&lt;br /&gt;
uzi&amp;lt;br /&amp;gt;&lt;br /&gt;
vanas&amp;lt;br /&amp;gt;&lt;br /&gt;
vzz&amp;lt;br /&amp;gt;&lt;br /&gt;
webley&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Items/Grenades==&lt;br /&gt;
Armour&amp;lt;br /&amp;gt;&lt;br /&gt;
BallisticsShield&amp;lt;br /&amp;gt;&lt;br /&gt;
Canted_Reddot &amp;lt;br /&amp;gt;&lt;br /&gt;
Flashlight_Rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
Grenade&amp;lt;br /&amp;gt;&lt;br /&gt;
Grip_Angled&amp;lt;br /&amp;gt;&lt;br /&gt;
Grip_Vertical&amp;lt;br /&amp;gt;&lt;br /&gt;
Holo&amp;lt;br /&amp;gt;&lt;br /&gt;
Knife&amp;lt;br /&amp;gt;&lt;br /&gt;
Laser_Pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
Laser_Rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
Painkillers&amp;lt;br /&amp;gt;&lt;br /&gt;
Pliers&amp;lt;br /&amp;gt;&lt;br /&gt;
PushBomb&amp;lt;br /&amp;gt;&lt;br /&gt;
Scope&amp;lt;br /&amp;gt;&lt;br /&gt;
Smoke&amp;lt;br /&amp;gt;&lt;br /&gt;
Syringe&amp;lt;br /&amp;gt;&lt;br /&gt;
acog&amp;lt;br /&amp;gt;&lt;br /&gt;
adrenaline&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_shotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_smg&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_sniper&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_special&amp;lt;br /&amp;gt;&lt;br /&gt;
ammocrate&amp;lt;br /&amp;gt;&lt;br /&gt;
antipersonnelmine&amp;lt;br /&amp;gt;&lt;br /&gt;
antitankmine&amp;lt;br /&amp;gt;&lt;br /&gt;
bandage &amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_kar98&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_leeenfield&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_m1garand&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_mosin&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_springfield&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_trenchgun&amp;lt;br /&amp;gt;&lt;br /&gt;
boltcutters&amp;lt;br /&amp;gt;&lt;br /&gt;
cloakdisrupter&amp;lt;br /&amp;gt;&lt;br /&gt;
crowbar&amp;lt;br /&amp;gt;&lt;br /&gt;
dnascanner&amp;lt;br /&amp;gt;&lt;br /&gt;
flash&amp;lt;br /&amp;gt;&lt;br /&gt;
flash_aurora&amp;lt;br /&amp;gt;&lt;br /&gt;
flash_ru&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_dis&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_ger&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_aurora&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_ru&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_us&amp;lt;br /&amp;gt;&lt;br /&gt;
handcuffs&amp;lt;br /&amp;gt;&lt;br /&gt;
healthstation&amp;lt;br /&amp;gt;&lt;br /&gt;
kevlarhelmet&amp;lt;br /&amp;gt;&lt;br /&gt;
keycard&amp;lt;br /&amp;gt;&lt;br /&gt;
lockpick&amp;lt;br /&amp;gt;&lt;br /&gt;
medkit&amp;lt;br /&amp;gt;&lt;br /&gt;
monocular&amp;lt;br /&amp;gt;&lt;br /&gt;
pickaxe&amp;lt;br /&amp;gt;&lt;br /&gt;
pipe&amp;lt;br /&amp;gt;&lt;br /&gt;
reddot&amp;lt;br /&amp;gt;&lt;br /&gt;
reddot_pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
repairtool&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_kar98&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_leeenfield&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_mosin&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_springfield&amp;lt;br /&amp;gt;&lt;br /&gt;
skinhelmet_ger&amp;lt;br /&amp;gt;&lt;br /&gt;
skinhelmet_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
skinhelmet_us&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_ger&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_ru&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_us&amp;lt;br /&amp;gt;&lt;br /&gt;
snowball&amp;lt;br /&amp;gt;&lt;br /&gt;
supp_pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
supp_rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
teleporter&amp;lt;br /&amp;gt;&lt;br /&gt;
tripalarm &amp;lt;br /&amp;gt;&lt;br /&gt;
tttc4&amp;lt;br /&amp;gt;&lt;br /&gt;
tttknife&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2bandage&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2knife&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2medkit&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2painkillers&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2syringe&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Skins==&lt;br /&gt;
[[File:T_Portrait_HDNSoldier_Face.png|frameless|32x32px]] aurora &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Clown_Face.png|frameless|32x32px]] clown&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Cop_Face.png|frameless|32x32px]] cop&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Farmer_Face.png|frameless|32x32px]] farmer&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Ger_Face.png|frameless|32x32px]] german&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Hidden_Face.png|frameless|32x32px]] kevin&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Naked_Face.png|frameless|32x32px]] naked&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_NATOv2_Face.png|frameless|32x32px]] nato&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Prisoner_Face.png|frameless|32x32px]] prisoner&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Rusv2_Face.png|frameless|32x32px]] russian&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Svt_Face.png|frameless|32x32px]] soviet&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_US_Face.png|frameless|32x32px]] us&lt;br /&gt;
&lt;br /&gt;
==Vehicles==&lt;br /&gt;
[[File:ATV.png|57x57px]] atv&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Kubelwagen.png|57x57px]] kubel&amp;lt;br /&amp;gt;&lt;br /&gt;
motorcycle (Shack only)&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Panzer4.png|57x57px]] panzer&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Sherman.png|57x57px]] sherman&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T34.png|57x57px]] t34&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Tiger.png|57x57px]] tiger&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Truck.png|57x57px]] truck&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Willys.png|57x57px]] willys&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Willys_Soviet.png|57x57px]] willys_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TTT Roles (Case Sensitive)==&lt;br /&gt;
[[File:T_InnocentIcon.png|frameless|20x20px]] Innocent&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_TraitorIcon.png|frameless|20x20px]] Traitor&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_DetectiveIcon.png|frameless|20x20px]] Detective&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_MercenaryIcon.png|frameless|20x20px]] Mercenary&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_GlitchIcon.png|frameless|20x20px]] Glitch&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_AssassinIcon.png|frameless|20x20px]] Assassin&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_JesterIcon.png|frameless|20x20px]] Jester&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_SurvivalistIcon.png|frameless|20x20px]] Survivalist&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_SheriffIcon.png|frameless|20x20px]] Sheriff&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_TankIcon.png|frameless|20x20px]] Tank&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_LonwWolfIcon.png|frameless|20x20px]] LoneWolf&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=ItemIDs&amp;diff=403</id>
		<title>ItemIDs</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=ItemIDs&amp;diff=403"/>
		<updated>2023-05-03T09:02:29Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Weapons */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here is a full list of items, vehicles, and skin IDs for Pavlov VR, for use in either map making or spawning items through Rcon:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Weapons ==&lt;br /&gt;
[[File:T GunThumb 1911.png|thumb]]&lt;br /&gt;
'''[[:File:T_GunThumb_1911.png]]'''1911&amp;lt;br /&amp;gt;&lt;br /&gt;
57&amp;lt;br /&amp;gt;&lt;br /&gt;
AK12&amp;lt;br /&amp;gt;&lt;br /&gt;
AK47&amp;lt;br /&amp;gt;&lt;br /&gt;
[[AR]]&amp;lt;br /&amp;gt;&lt;br /&gt;
AUG&amp;lt;br /&amp;gt;&lt;br /&gt;
AntiTank&amp;lt;br /&amp;gt;&lt;br /&gt;
AutoShotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
AutoSniper&amp;lt;br /&amp;gt;&lt;br /&gt;
DE&amp;lt;br /&amp;gt;&lt;br /&gt;
DrumShotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
G43&amp;lt;br /&amp;gt;&lt;br /&gt;
LMGA&amp;lt;br /&amp;gt;&lt;br /&gt;
RL_M1A1&amp;lt;br /&amp;gt;&lt;br /&gt;
RL_PIAT&amp;lt;br /&amp;gt;&lt;br /&gt;
Revolver&amp;lt;br /&amp;gt;&lt;br /&gt;
Tokarev&amp;lt;br /&amp;gt;&lt;br /&gt;
ak&amp;lt;br /&amp;gt;&lt;br /&gt;
akshorty&amp;lt;br /&amp;gt;&lt;br /&gt;
ar9&amp;lt;br /&amp;gt;&lt;br /&gt;
awp&amp;lt;br /&amp;gt;&lt;br /&gt;
bar&amp;lt;br /&amp;gt;&lt;br /&gt;
bren&amp;lt;br /&amp;gt;&lt;br /&gt;
cet9&amp;lt;br /&amp;gt;&lt;br /&gt;
detectivesmg&amp;lt;br /&amp;gt;&lt;br /&gt;
dp27&amp;lt;br /&amp;gt;&lt;br /&gt;
flaregun&amp;lt;br /&amp;gt;&lt;br /&gt;
galul&amp;lt;br /&amp;gt;&lt;br /&gt;
goldengun&amp;lt;br /&amp;gt;&lt;br /&gt;
hunting&amp;lt;br /&amp;gt;&lt;br /&gt;
kar98&amp;lt;br /&amp;gt;&lt;br /&gt;
kross&amp;lt;br /&amp;gt;&lt;br /&gt;
leeenfield&amp;lt;br /&amp;gt;&lt;br /&gt;
luger&amp;lt;br /&amp;gt;&lt;br /&gt;
m16&amp;lt;br /&amp;gt;&lt;br /&gt;
m1garand&amp;lt;br /&amp;gt;&lt;br /&gt;
m9&amp;lt;br /&amp;gt;&lt;br /&gt;
mg42&amp;lt;br /&amp;gt;&lt;br /&gt;
mosin&amp;lt;br /&amp;gt;&lt;br /&gt;
mp40&amp;lt;br /&amp;gt;&lt;br /&gt;
mp5&amp;lt;br /&amp;gt;&lt;br /&gt;
newtonlauncher&amp;lt;br /&amp;gt;&lt;br /&gt;
p90&amp;lt;br /&amp;gt;&lt;br /&gt;
ppsh&amp;lt;br /&amp;gt;&lt;br /&gt;
rl_panzer&amp;lt;br /&amp;gt;&lt;br /&gt;
rl_rpg&amp;lt;br /&amp;gt;&lt;br /&gt;
sawedoff&amp;lt;br /&amp;gt;&lt;br /&gt;
scur&amp;lt;br /&amp;gt;&lt;br /&gt;
shotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
silentcet9&amp;lt;br /&amp;gt;&lt;br /&gt;
skorpion (Shack only)&amp;lt;br /&amp;gt;&lt;br /&gt;
sks&amp;lt;br /&amp;gt;&lt;br /&gt;
smg&amp;lt;br /&amp;gt;&lt;br /&gt;
sock&amp;lt;br /&amp;gt;&lt;br /&gt;
springfield&amp;lt;br /&amp;gt;&lt;br /&gt;
sten&amp;lt;br /&amp;gt;&lt;br /&gt;
stg44&amp;lt;br /&amp;gt;&lt;br /&gt;
svt40&amp;lt;br /&amp;gt;&lt;br /&gt;
tankmg (Old MG42)&amp;lt;br /&amp;gt;&lt;br /&gt;
tankturret (Old M1A1 rocket)&amp;lt;br /&amp;gt;&lt;br /&gt;
taser&amp;lt;br /&amp;gt;&lt;br /&gt;
thompson&amp;lt;br /&amp;gt;&lt;br /&gt;
tranqgun&amp;lt;br /&amp;gt;&lt;br /&gt;
trenchgun&amp;lt;br /&amp;gt;&lt;br /&gt;
uzi&amp;lt;br /&amp;gt;&lt;br /&gt;
vanas&amp;lt;br /&amp;gt;&lt;br /&gt;
vzz&amp;lt;br /&amp;gt;&lt;br /&gt;
webley&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Items/Grenades==&lt;br /&gt;
Armour&amp;lt;br /&amp;gt;&lt;br /&gt;
BallisticsShield&amp;lt;br /&amp;gt;&lt;br /&gt;
Canted_Reddot &amp;lt;br /&amp;gt;&lt;br /&gt;
Flashlight_Rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
Grenade&amp;lt;br /&amp;gt;&lt;br /&gt;
Grip_Angled&amp;lt;br /&amp;gt;&lt;br /&gt;
Grip_Vertical&amp;lt;br /&amp;gt;&lt;br /&gt;
Holo&amp;lt;br /&amp;gt;&lt;br /&gt;
Knife&amp;lt;br /&amp;gt;&lt;br /&gt;
Laser_Pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
Laser_Rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
Painkillers&amp;lt;br /&amp;gt;&lt;br /&gt;
Pliers&amp;lt;br /&amp;gt;&lt;br /&gt;
PushBomb&amp;lt;br /&amp;gt;&lt;br /&gt;
Scope&amp;lt;br /&amp;gt;&lt;br /&gt;
Smoke&amp;lt;br /&amp;gt;&lt;br /&gt;
Syringe&amp;lt;br /&amp;gt;&lt;br /&gt;
acog&amp;lt;br /&amp;gt;&lt;br /&gt;
adrenaline&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_shotgun&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_smg&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_sniper&amp;lt;br /&amp;gt;&lt;br /&gt;
ammo_special&amp;lt;br /&amp;gt;&lt;br /&gt;
ammocrate&amp;lt;br /&amp;gt;&lt;br /&gt;
antipersonnelmine&amp;lt;br /&amp;gt;&lt;br /&gt;
antitankmine&amp;lt;br /&amp;gt;&lt;br /&gt;
bandage &amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_kar98&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_leeenfield&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_m1garand&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_mosin&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_springfield&amp;lt;br /&amp;gt;&lt;br /&gt;
bayonet_trenchgun&amp;lt;br /&amp;gt;&lt;br /&gt;
boltcutters&amp;lt;br /&amp;gt;&lt;br /&gt;
cloakdisrupter&amp;lt;br /&amp;gt;&lt;br /&gt;
crowbar&amp;lt;br /&amp;gt;&lt;br /&gt;
dnascanner&amp;lt;br /&amp;gt;&lt;br /&gt;
flash&amp;lt;br /&amp;gt;&lt;br /&gt;
flash_aurora&amp;lt;br /&amp;gt;&lt;br /&gt;
flash_ru&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_dis&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_ger&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_aurora&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_ru&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
grenade_us&amp;lt;br /&amp;gt;&lt;br /&gt;
handcuffs&amp;lt;br /&amp;gt;&lt;br /&gt;
healthstation&amp;lt;br /&amp;gt;&lt;br /&gt;
kevlarhelmet&amp;lt;br /&amp;gt;&lt;br /&gt;
keycard&amp;lt;br /&amp;gt;&lt;br /&gt;
lockpick&amp;lt;br /&amp;gt;&lt;br /&gt;
medkit&amp;lt;br /&amp;gt;&lt;br /&gt;
monocular&amp;lt;br /&amp;gt;&lt;br /&gt;
pickaxe&amp;lt;br /&amp;gt;&lt;br /&gt;
pipe&amp;lt;br /&amp;gt;&lt;br /&gt;
reddot&amp;lt;br /&amp;gt;&lt;br /&gt;
reddot_pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
repairtool&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_kar98&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_leeenfield&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_mosin&amp;lt;br /&amp;gt;&lt;br /&gt;
scope_springfield&amp;lt;br /&amp;gt;&lt;br /&gt;
skinhelmet_ger&amp;lt;br /&amp;gt;&lt;br /&gt;
skinhelmet_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
skinhelmet_us&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_ger&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_ru&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
smoke_us&amp;lt;br /&amp;gt;&lt;br /&gt;
snowball&amp;lt;br /&amp;gt;&lt;br /&gt;
supp_pistol&amp;lt;br /&amp;gt;&lt;br /&gt;
supp_rifle&amp;lt;br /&amp;gt;&lt;br /&gt;
teleporter&amp;lt;br /&amp;gt;&lt;br /&gt;
tripalarm &amp;lt;br /&amp;gt;&lt;br /&gt;
tttc4&amp;lt;br /&amp;gt;&lt;br /&gt;
tttknife&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2bandage&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2knife&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2medkit&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2painkillers&amp;lt;br /&amp;gt;&lt;br /&gt;
ww2syringe&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Skins==&lt;br /&gt;
[[File:T_Portrait_HDNSoldier_Face.png|frameless|32x32px]] aurora &amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Clown_Face.png|frameless|32x32px]] clown&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Cop_Face.png|frameless|32x32px]] cop&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Farmer_Face.png|frameless|32x32px]] farmer&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Ger_Face.png|frameless|32x32px]] german&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Hidden_Face.png|frameless|32x32px]] kevin&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Naked_Face.png|frameless|32x32px]] naked&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_NATOv2_Face.png|frameless|32x32px]] nato&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Prisoner_Face.png|frameless|32x32px]] prisoner&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Rusv2_Face.png|frameless|32x32px]] russian&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_Svt_Face.png|frameless|32x32px]] soviet&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_Portrait_US_Face.png|frameless|32x32px]] us&lt;br /&gt;
&lt;br /&gt;
==Vehicles==&lt;br /&gt;
[[File:ATV.png|57x57px]] atv&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Kubelwagen.png|57x57px]] kubel&amp;lt;br /&amp;gt;&lt;br /&gt;
motorcycle (Shack only)&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Panzer4.png|57x57px]] panzer&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Sherman.png|57x57px]] sherman&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T34.png|57x57px]] t34&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Tiger.png|57x57px]] tiger&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Truck.png|57x57px]] truck&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Willys.png|57x57px]] willys&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:Willys_Soviet.png|57x57px]] willys_svt&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==TTT Roles (Case Sensitive)==&lt;br /&gt;
[[File:T_InnocentIcon.png|frameless|20x20px]] Innocent&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_TraitorIcon.png|frameless|20x20px]] Traitor&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_DetectiveIcon.png|frameless|20x20px]] Detective&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_MercenaryIcon.png|frameless|20x20px]] Mercenary&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_GlitchIcon.png|frameless|20x20px]] Glitch&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_AssassinIcon.png|frameless|20x20px]] Assassin&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_JesterIcon.png|frameless|20x20px]] Jester&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_SurvivalistIcon.png|frameless|20x20px]] Survivalist&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_SheriffIcon.png|frameless|20x20px]] Sheriff&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_TankIcon.png|frameless|20x20px]] Tank&amp;lt;br /&amp;gt;&lt;br /&gt;
[[File:T_LonwWolfIcon.png|frameless|20x20px]] LoneWolf&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=File:T_GunThumb_1911.png&amp;diff=402</id>
		<title>File:T GunThumb 1911.png</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=File:T_GunThumb_1911.png&amp;diff=402"/>
		<updated>2023-05-03T09:00:02Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1911&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Game_Settings&amp;diff=401</id>
		<title>Game Settings</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Game_Settings&amp;diff=401"/>
		<updated>2023-05-03T08:54:00Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: added how to open settings from outside game&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Capsule-game}}&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
'''Startup Behavior:''' This will, when the game starts up, allow the option to start at the main menu, either of the shooting ranges, or the killhouse.&lt;br /&gt;
&lt;br /&gt;
'''bHaptic Suit:''' Enables bHaptic Suit events. (Goes as fast as your real time speed) &lt;br /&gt;
&lt;br /&gt;
'''ForceTube Haptics:''' Enables ForceTube haptic events. (Adds more &amp;quot;realistic&amp;quot; functions, like pressing buttons in shooting range as soon hands come into contact) Assists with mag hitting making it easier.&lt;br /&gt;
&lt;br /&gt;
'''Left Eye Rendering:''' This makes that the game will render the video for the left eye instead of the right. This can be nifty for wanting to record or stream gameplay.&lt;br /&gt;
&lt;br /&gt;
== Player ==&lt;br /&gt;
&lt;br /&gt;
'''Free Spectating:''' Flies in a smooth motion while spectating.&lt;br /&gt;
&lt;br /&gt;
'''Arm Kill Feed:''' Switches if the Kill Feed is on the scoreboard or the non-dominant arm.&lt;br /&gt;
&lt;br /&gt;
'''Hide Ammo Count:''' Hides ammo counter in TTTv2, Hide, ect.&lt;br /&gt;
&lt;br /&gt;
'''Virtual stock:''' Simulates physical gun stock.&lt;br /&gt;
&lt;br /&gt;
'''Vignette Effects:''' Enables on-screen effects. (Blood when getting damaged, sweat when taking adrenaline)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Input ==&lt;br /&gt;
&lt;br /&gt;
'''Dominant Hand:''' Selects which hand to spawn guns into.&lt;br /&gt;
&lt;br /&gt;
'''Input Vector:''' Selects to move from head, dominant or non-dominant hand.&lt;br /&gt;
&lt;br /&gt;
'''Inventory Lock:''' Locks inventory if looking down.&lt;br /&gt;
&lt;br /&gt;
'''Auto Sprint:''' Automatically sprint when moving.&lt;br /&gt;
&lt;br /&gt;
'''Swap Locomotion Hand:''' Switches hand used for movement into dominant hand.&lt;br /&gt;
&lt;br /&gt;
'''Artificial Turn:''' Enables Snap Turn.&lt;br /&gt;
&lt;br /&gt;
'''Smooth Turn:''' Switches Snap Turn to Smooth turn. Must have ''Artificial Turn'' enabled to function.&lt;br /&gt;
&lt;br /&gt;
== Audio ==&lt;br /&gt;
'''Ambisonics:''' An enhanced way of playing spatial audio at the price of higher CPU usage.&lt;br /&gt;
&lt;br /&gt;
'''Audio Quality:''' Overall quality of gun sounds, firing, and anything else you may hear.&lt;br /&gt;
&lt;br /&gt;
'''Realtime Reverb:''' Enhanced reverb based on geometry around you.&lt;br /&gt;
&lt;br /&gt;
'''Audio Thread:''' May increase audio performance if enabled. Not recommended for CPUs with fewer than six cores.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
'''Anti-Aliasing:''' A process that smooths out jagged edges of small and/or far away objects to improve overall image clarity. The higher this is set to the more it will tax on performance.&lt;br /&gt;
&lt;br /&gt;
'''Texture Quality:''' The resolution of item, player, and map textures. It is not recommended to use a setting that exceeds the amount of VRAM on your GPU.&lt;br /&gt;
&lt;br /&gt;
'''Effects Quality:''' Overall quality of explosions, muzzle flash, and other effects. The higher this setting is set to, the more likely you are to receive frame drops where there is a lot of action.&lt;br /&gt;
&lt;br /&gt;
'''Post Processing (Beta Only):''' The only known post processing effect right now is the double vision effect caused by flashbangs. &lt;br /&gt;
&lt;br /&gt;
'''Resolution Scale:''' Overall render resolution of the scene. Turning this down will result in a significant boost in performance at the expense of image quality and clarity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
In the event you need to change a setting and cant launch the game there is a text file with them &lt;br /&gt;
&lt;br /&gt;
like if you changed a setting and its crashing on launch or your audio source is buried in a long list and u cant select it . &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
to do it you press the '''windows key and R''' at the same time  then  in the small box that opens u enter &amp;lt;blockquote&amp;gt;%LocalAppData%\Pavlov\Saved\Config\WindowsNoEditor&amp;lt;/blockquote&amp;gt;then press enter and it will open a folder  inside that folder u will see '''''GameUserSettings.ini'''''&lt;br /&gt;
&lt;br /&gt;
go ahead and open that with a text editor and inside that u will have a text version of the ingame settings edit what u needed / wanted to then save and close the file &lt;br /&gt;
&lt;br /&gt;
here is what one looks like &amp;lt;blockquote&amp;gt;[/Script/Pavlov.PavlovGameUserSettings]&lt;br /&gt;
&lt;br /&gt;
bSmoothTurn=True&lt;br /&gt;
&lt;br /&gt;
PlayerCrouchHeight=0.000000&lt;br /&gt;
&lt;br /&gt;
bAutoUngrip=False&lt;br /&gt;
&lt;br /&gt;
bLegacyGrip=False&lt;br /&gt;
&lt;br /&gt;
bSnapTurnEnabled=True&lt;br /&gt;
&lt;br /&gt;
bMountFriendly=False&lt;br /&gt;
&lt;br /&gt;
PrimaryRegion=America&lt;br /&gt;
&lt;br /&gt;
bHideFullServers=False&lt;br /&gt;
&lt;br /&gt;
bHideEmptyServers=True&lt;br /&gt;
&lt;br /&gt;
bHidePinLockedServers=True&lt;br /&gt;
&lt;br /&gt;
ServerSearchType=ShowCommunityServer&lt;br /&gt;
&lt;br /&gt;
ServerSortType=PingAscending&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org Castlewars Official&amp;quot;,ServerIdentifier=&amp;quot;66.59.211.184:10000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org PrisonBreak Official&amp;quot;,ServerIdentifier=&amp;quot;66.59.211.184:11000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org MAP Escape From Pavlov&amp;quot;,ServerIdentifier=&amp;quot;66.59.211.184:12000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org PUSH USA EAST&amp;quot;,ServerIdentifier=&amp;quot;66.59.211.184:13000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org Joseph\'s TDM [game.jtwp.org For Leaderboard]&amp;quot;,ServerIdentifier=&amp;quot;15.204.9.216:7777&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org Castlewars GAME.JTWP.ORG for stats  USA EAST&amp;quot;,ServerIdentifier=&amp;quot;23.139.82.34:10000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org Pirates of Pavlov GAME.JTWP.ORG for stats USA EAST&amp;quot;,ServerIdentifier=&amp;quot;23.139.82.34:18000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org Pistol Playground GAME.JTWP.ORG for stats USA EAST&amp;quot;,ServerIdentifier=&amp;quot;23.139.82.34:11000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org PrisonBreak Official GAME.JTWP.ORG for stats  USA EAST&amp;quot;,ServerIdentifier=&amp;quot;23.139.82.34:17000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
FavoriteServers=(ServerName=&amp;quot;JTWP.org Escape From Pavlov (Passive Income 400$ a hour)&amp;quot;,ServerIdentifier=&amp;quot;23.139.82.34:12000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
RegionFilters=Europe&lt;br /&gt;
&lt;br /&gt;
RegionFilters=AsiaPacific&lt;br /&gt;
&lt;br /&gt;
bForceNoPostProcess=True&lt;br /&gt;
&lt;br /&gt;
bAutoSwapHands=False&lt;br /&gt;
&lt;br /&gt;
bLeftEyeRendering=False&lt;br /&gt;
&lt;br /&gt;
GripModeVive=Click&lt;br /&gt;
&lt;br /&gt;
GripModeOculus=Hold&lt;br /&gt;
&lt;br /&gt;
MainHandAction=None&lt;br /&gt;
&lt;br /&gt;
OffHandAction=None&lt;br /&gt;
&lt;br /&gt;
bAutoSprint=True&lt;br /&gt;
&lt;br /&gt;
bLiteFootStepHaptics=True&lt;br /&gt;
&lt;br /&gt;
bLockInventory=True&lt;br /&gt;
&lt;br /&gt;
bHeadLocomotion=False&lt;br /&gt;
&lt;br /&gt;
bFreeSpectating=True&lt;br /&gt;
&lt;br /&gt;
bInvertTouchpad=False&lt;br /&gt;
&lt;br /&gt;
bArmKillfeed=True&lt;br /&gt;
&lt;br /&gt;
VoiceDevice=Default Device&lt;br /&gt;
&lt;br /&gt;
bRealTimeReverb=True&lt;br /&gt;
&lt;br /&gt;
bUseAudioThread=False&lt;br /&gt;
&lt;br /&gt;
bNoAmbisonics=False&lt;br /&gt;
&lt;br /&gt;
bSwapMenuScoreboard=False&lt;br /&gt;
&lt;br /&gt;
GripMode=Auto&lt;br /&gt;
&lt;br /&gt;
SmoothLocomotionMode=Offhand&lt;br /&gt;
&lt;br /&gt;
GoreLevel=Gruesome&lt;br /&gt;
&lt;br /&gt;
GrabForceThreashold=0.250000&lt;br /&gt;
&lt;br /&gt;
bUseGrabForce=True&lt;br /&gt;
&lt;br /&gt;
StartUpMap=&lt;br /&gt;
&lt;br /&gt;
bForceTubeHaptics=False&lt;br /&gt;
&lt;br /&gt;
bHapticsSuit=False&lt;br /&gt;
&lt;br /&gt;
bUseAdvancedVehicleInput=True&lt;br /&gt;
&lt;br /&gt;
bHideAmmoCounter=False&lt;br /&gt;
&lt;br /&gt;
bMicMuted=True&lt;br /&gt;
&lt;br /&gt;
bOnScreenEffects=True&lt;br /&gt;
&lt;br /&gt;
PavlovVersion=1&lt;br /&gt;
&lt;br /&gt;
bUseVSync=False&lt;br /&gt;
&lt;br /&gt;
bUseDynamicResolution=False&lt;br /&gt;
&lt;br /&gt;
ResolutionSizeX=1280&lt;br /&gt;
&lt;br /&gt;
ResolutionSizeY=720&lt;br /&gt;
&lt;br /&gt;
LastUserConfirmedResolutionSizeX=1280&lt;br /&gt;
&lt;br /&gt;
LastUserConfirmedResolutionSizeY=720&lt;br /&gt;
&lt;br /&gt;
WindowPosX=-1&lt;br /&gt;
&lt;br /&gt;
WindowPosY=-1&lt;br /&gt;
&lt;br /&gt;
FullscreenMode=1&lt;br /&gt;
&lt;br /&gt;
LastConfirmedFullscreenMode=1&lt;br /&gt;
&lt;br /&gt;
PreferredFullscreenMode=1&lt;br /&gt;
&lt;br /&gt;
Version=5&lt;br /&gt;
&lt;br /&gt;
AudioQualityLevel=0&lt;br /&gt;
&lt;br /&gt;
LastConfirmedAudioQualityLevel=0&lt;br /&gt;
&lt;br /&gt;
FrameRateLimit=0.000000&lt;br /&gt;
&lt;br /&gt;
DesiredScreenWidth=1280&lt;br /&gt;
&lt;br /&gt;
DesiredScreenHeight=720&lt;br /&gt;
&lt;br /&gt;
LastUserConfirmedDesiredScreenWidth=1280&lt;br /&gt;
&lt;br /&gt;
LastUserConfirmedDesiredScreenHeight=720&lt;br /&gt;
&lt;br /&gt;
LastRecommendedScreenWidth=-1.000000&lt;br /&gt;
&lt;br /&gt;
LastRecommendedScreenHeight=-1.000000&lt;br /&gt;
&lt;br /&gt;
LastCPUBenchmarkResult=-1.000000&lt;br /&gt;
&lt;br /&gt;
LastGPUBenchmarkResult=-1.000000&lt;br /&gt;
&lt;br /&gt;
LastGPUBenchmarkMultiplier=1.000000&lt;br /&gt;
&lt;br /&gt;
bUseHDRDisplayOutput=False&lt;br /&gt;
&lt;br /&gt;
HDRDisplayOutputNits=1000&lt;br /&gt;
&lt;br /&gt;
GMFiltersV2=PUSH&lt;br /&gt;
&lt;br /&gt;
[/Script/Engine.GameUserSettings]&lt;br /&gt;
&lt;br /&gt;
bUseDesiredScreenHeight=False&lt;br /&gt;
&lt;br /&gt;
[ShaderPipelineCache.CacheFile]&lt;br /&gt;
&lt;br /&gt;
LastOpened=Pavlov&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
	<entry>
		<id>http://pavlovwiki.com/index.php?title=Making_Skins&amp;diff=390</id>
		<title>Making Skins</title>
		<link rel="alternate" type="text/html" href="http://pavlovwiki.com/index.php?title=Making_Skins&amp;diff=390"/>
		<updated>2023-05-01T22:01:54Z</updated>

		<summary type="html">&lt;p&gt;SaltedCrackerJack: /* Creating Character Skins */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating Skins - Beginner ==&lt;br /&gt;
When creating skins for your Pavlov Map you will need a few things.&lt;br /&gt;
&lt;br /&gt;
You will need:&lt;br /&gt;
&lt;br /&gt;
* [https://www.substance3d.com/ Adobe Substance Painter 3D] &lt;br /&gt;
* (Alternatives) [https://quixel.com/mixer/ Quixel Mixer], [https://www.blender.org/download/ Blender] or [https://substance3d.adobe.com/education/ Substance Painter Student License] &lt;br /&gt;
&lt;br /&gt;
* Your weapon model with bake maps from [https://discord.gg/TFkKrVhE3A Pavlov Artists]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now you have those things you can find a tutorial for [https://youtu.be/NP7XnnIvkOs Adobe Substance 3D], or you can find one for your alternative '''(We strongly do not encourage you pirate or fraud for a version of Adobe Substance as it puts you at risk)'''&lt;br /&gt;
&lt;br /&gt;
If you are looking to get custom weapons then you can find how to here: [[Custom Guns]]&lt;br /&gt;
&lt;br /&gt;
== Problems with Gun Skin Making ==&lt;br /&gt;
Common problems with Gun Skin Making are:&lt;br /&gt;
&lt;br /&gt;
* Skin showing up as grey checkerboard&lt;br /&gt;
* Skin not working at all or in different place&lt;br /&gt;
&lt;br /&gt;
* Lighting or skin flickering problems&lt;br /&gt;
&lt;br /&gt;
===== Skin showing up as a grey checkerboard: =====&lt;br /&gt;
Mostly caused from you not using the custom materials in Pavlov Artist's modkit or your material isn't set up correctly, make sure you follow the tutorial and install the custom materials modkit in the project files.&lt;br /&gt;
&lt;br /&gt;
You will also need to correctly install M_PavlovGunMaster and create a material instance so you can mix your ORM, Occlusion and Base Colour etc.&lt;br /&gt;
&lt;br /&gt;
===== Skin not working at all or in different place: =====&lt;br /&gt;
Two things: Your skin requires the switch slots to be ticked or you haven't touched your skin box zone which is the outline box surrounding your skinbox blueprint in the editor. &lt;br /&gt;
&lt;br /&gt;
Mostly rifles and not handguns or throwables use switch slots according to Chalk (Pavlov Artists founder) &lt;br /&gt;
&lt;br /&gt;
If you do not touch your skinbox zone then it will not apply the skin. If you want a constant skin then make sure the skin box zone covers the spawns or the whole map with scaling.&lt;br /&gt;
&lt;br /&gt;
===== Lighting or skin flickering problems =====&lt;br /&gt;
You haven't set up your sphere reflection or built the light, but if you have then you haven't setup the skinbox correctly.&lt;br /&gt;
&lt;br /&gt;
== Creating Character Skins ==&lt;br /&gt;
Pretty much your doing the same as you do with guns using the character models found in the resource channel of Pavlov Artists. I would stick to to the normal character textures.&lt;br /&gt;
&lt;br /&gt;
But if you want for an example an all gold NATO skin then you can make one, just expect a few issues a long the way.&lt;br /&gt;
&lt;br /&gt;
a big problem with trying to edit the default skins or vehicles is the gore and damage will break the skin the first time they are shot so u would need to find a way to disable that  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if you are looking to change the models of them, you can here: [[Changing the character model]]&lt;br /&gt;
&lt;br /&gt;
== Personal Skins ==&lt;br /&gt;
In order to make a personal skin you will need to have it built into a map because as of now there is no skin support so they must be built into the map  however if u wanted to go that route  someone already made some logic that can help you with that,  [https://drive.google.com/file/d/1FtDn79igDXZfMCXRvF3mIVPHiv1wU2I9/view?usp=share_link THW Reaper's skinbox] (CustomPlayers Skinbox) it uses player ids (names/steamids) to assign personal skins, as of now it works. &lt;br /&gt;
&lt;br /&gt;
If it breaks in the future contact TWH Reaper or SmallDvrkOne.&lt;/div&gt;</summary>
		<author><name>SaltedCrackerJack</name></author>
	</entry>
</feed>