Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Введение

Нам понадобится:

  • сервер с процессором, диском и памятью, способными потянуть все игровые сервера
  • нормальный канал в интернет. Не dialup. Не ADSL.
  • установленный веб-сервер, в нашем случае — nginx
  • установленный sql-сервер, в нашем случае — mysql (mariadb)
  • возможность запускать задачи по расписанию (cron)
  • php с модулями
  • root доступ на отдельных этапах настройки
  • достаточно места на диске для:
    • игрового сервера — свыше шести гигабайт
    • логов (а их будет много и разных)
    • записей (replay)
    • sql баз данных
    • пользовательских карт, звуков, моделей и так далее.

Всё нижеследующее описывается применительно к отдельному серверу, физическому или виртуальному, с установленным и настроенным Linux, доступом в консоль. Во всех примерах у сервера ip адрес 192.0.2.0, у нашего клиентского компьютера 198.51.100.0

Игровому серверу для запуска и работы не нужны root полномочия, поэтому устанавливать и запускать всё будем из-под непривилегированного пользователя game. Заходим как root и добавляем пользователя:

32-bit libraries on 64-bit linux systems

Since SteamCMD is a 32-bit binary, 32-bit libraries are required.

The following error may occur:

steamcmd: error while loading shared libraries: libstdc  .so.6: cannot open shared object file: No such file or directory

The resolution depends on your distro:

Anonymous

To download most game servers, you can login anonymously.

login anonymous

Arch linux

Don’t forget to first enable the multilib repository.

pacman -S lib32-gcc-libs

Automating steamcmd

There are two ways to automate SteamCMD. (Replace steamcmd with ./steamcmd.sh on Linux/macOS.)

Command line

Append the commands to the command line prefixed with plus characters, e.g.:

steamcmd  login anonymous  force_install_dir ../csgo_ds  app_update 740  quit

To install a specific game mod for HL1, such as Counter-Strike: Condition Zero:

steamcmd  login anonymous  force_install_dir ../czero  app_set_config 90 mod czero  app_update 90  quit

For a game that requires logins, like Killing Floor:

Condenser

condenser is a bootstrapper for installing, configuring, & launching Steam dedicated server apps.

Creating a script

1. Put your SteamCMD commands in a text file. (You may add comments which start with //.) Example:

2. Run SteamCMD with the runscript option, referring to the file you created previously. Example:

steamcmd  runscript csgo_ds.txt

Cross-platform installation

It is possible to choose the platform for which SteamCMD should download files, even if it isn’t the platform it is currently running on. This is done using the @sSteamCmdForcePlatformType variable. (Yes, those are two “s”es at the beginning of the variable name.) For example, to download the Windows CSGO dedicated server on Linux, you can run the following command:

./steamcmd.sh [email protected] windows  login anonymous  force_install_dir ../csgo_ds  app_update 740 validate  quit

or use the following script:

@ShutdownOnFailedCommand 1
@NoPromptForPassword 1
@sSteamCmdForcePlatformType windows
login anonymous
force_install_dir ../csgo_ds
app_update 740 validate
quit

The supported values are windows, macos and linux.

Debian based distributions (ubuntu, mint, etc.)

sudo apt-get install lib32stdc  6

With Debian 7 “Wheezy” you may encounter this error:

The following packages have unmet dependencies: ia32-libs : Depends: ia32-libs-multiarch but it is not installable
E: Unable to correct problems, you have held broken packages.

To fix this, do the following:

 dpkg --add-architecture i386
 apt-get update
 apt-get install lib32gcc1

Docker

If your server is running Docker, you can simply use:

docker run -it --name=steamcmd cm2network/steamcmd bash

steamcmd.sh location: /home/steam/steamcmd

Downloading an app

1. Start SteamCMD and log in.

2. Set your app install directory. (Note: use forward slashes for Linux/macOS and backslashes for Windows.)

force_install_dir <path>

e.g. a directory named cs_go inside the current directory:

force_install_dir ./cs_go/

For Windows: force_install_dir c:cs_go

3. Install or update the app using the app_update command (supplying a Steam Application ID). Please check here for the dedicated server list: Dedicated server list. To also validate the app, add validate to the command.

To download a beta branch, use the -beta <betaname> option – for example, the HLDS beta branch is named beta and the SrcDS beta branch is named prerelease. Some beta branches are protected by a password; to be able to download from them, also add the -betapassword <password> option.

app_update <app_id> [-beta <betaname>] [-betapassword <password>] [validate]

HLDS is a special case: the App ID is always 90 and a mod must be chosen first. This is done by setting the app config option mod to the requested value.

app_set_config <app_id> <option_name> <option_value>
Example: Install and validate the Counter Strike: Global Offensive dedicated server:
app_update 740 validate
Example: Install and validate HLDS with Team Fortress Classic:
app_set_config 90 mod tfc
app_update 90 validate
Example: Install and validate beta version of HLDS (Half-Life):
app_update 90 -beta beta validate
Example: install and validate beta version of the Counter Strike: Source dedicated server:
app_update 232330 -beta prerelease validate
Example: install and validate a private beta version of the Natural Selection 2 dedicated server (name alpha, password natsel):
[beta name] is the name of the private beta branch
[beta code] is the password for the private beta branch
app_update 4940 -beta alpha -betapassword natsel validate

3. Once finished, type quit to properly log off of the Steam servers.

quit

Features

  • Installer
  • Updater
  • Monitor
  • Alerts
  • Server Details
  • Backups
  • Console

Getting a linux 64-bit steamclient.so on a windows machine

WSL does not play nicely with 32-bit files. If you need the steamclient.so 64-bit file you can simply run the following command:

You will then find the file here:

.steamappscommonSteamworks SDK Redistlinux64

Linux/macos

Open a terminal and start SteamCMD.

If you installed it using the package from repositories:

cd ~
steamcmd

If you installed it manually:

cd ~/Steam
./steamcmd.sh

Linuxgsm

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

Login failure: no connection

On linux servers, you may experience a “Login Failure: No Connection” error. This is related to missing iptables rules. You will want something along these lines:

iptables -A INPUT -p udp -m udp --sport 27000:27030 --dport 1025:65355 -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 4380 --dport 1025:65355 -j ACCEPT

Macos

1. Open Terminal.app and create a directory for SteamCMD.

mkdir ~/Steam && cd ~/Steam

2. Download and extract SteamCMD for macOS.

Manually

1. Before you begin, you must first install the dependencies required to run SteamCMD:

Ubuntu/Debian (x86-64)

sudo apt-get install lib32gcc1

RedHat/CentOS (x86-64)

yum install glibc.i686 libstdc  .i686

Package from repositories

1. It’s recommended to install the SteamCMD package from your distribution repositories, if available:

Ubuntu/Debian

sudo apt install steamcmd

RedHat/CentOS

yum install steamcmd

Arch Linux

Red hat based distributions (rhel, fedora, centos, etc.)

yum install glibc.i686 libstdc  .i686

Running steamcmd

On first run, SteamCMD will automatically update and enter you into a Steam> prompt. Type help for more information.

Steam community :: guide :: создание сервера unturned | часть 0 | steamcmd

Для начало, что это такое и зачем оно нам нужно?

SteamCMD – это утилита, консоль Стима без красивого и вообще обычного интерфейса. С помощью него можно легко обновить и скачать любые игры или специальные сервера – Dedicated – это версия игры сделанная и направленная специально для работы сервера*, а не обычной игры (клиента*) из Стима.

*Клиент – компьютер обычного игрока, сам игрок.
*Сервер – компьютер, который обрабатывает запросы клиентов, благодаря ему вы можете играть вместе.

Почему именно SteamCMD?

SteamCMD работает не только в ОС* Windows, но и в Linux, Mac OS, например вы купили на месяц VPS*, а там Linux без GUI* и обычный Steam туда не поставишь, а вот SteamCMD… Запросто!

:/>  Обновления Windows 10 за июнь 2021 года: что нового и что улучшено » MSReview

*VPS – Арендованный хостинг с ОС или без неё, но настроенный на полный доступ к неограниченной системе, то есть можно поднять (создать/запустить) сразу и сайт, и игру (игры), и файловый сервер, а не только, например, один сервер по Unturned.
*ОС – Операционная система, тупо система.
*GUI (Graphics User Interface) – Графический интерфейс, все что не похожее на командную строку (терминал).

Скриншот самого SteamCMD:
Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

§

Steam community :: guide :: установка, настройка и запуск выделенного сервера (dedicated server) [windows]

Способ установки, обновления сервера через программу WindowsGSM

Первым делом что вам потребуется сделать, так это скачать программу под названием WindowsGSM. Это программа с удобным графическим интерфейсом, которая используется для скачивания и обновления выделенного сервера для различных мультиплеерных игр.

Скачать данную утилиту можно по ссылке ниже:
https://windowsgsm.com

Программа для полного функционирования требует наличие установленного в системе .NET Framework 4.7.2.

Скачать .NET Framework 4.7.2 можно по ссылке ниже:
https://dotnet.microsoft.com/download/dotnet-framework/thank-you/net472-offline-installer

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Далее вам потребуется создать на диске C: (или любой другой диск, например диск D:) папку WindowsGSM (или любое другое название, но обязательно латинскими буквами алфавита без каких-либо дополнительных символов, кроме цифр). Далее нужно переместить (вырезать) файл WindowsGSM.exe в папку WindowsGSM.

В конечном итоге у вас должен получится такой результат:

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Далее вам потребуется запустить файл WindowsGSM.exe.

При запуске данного файла операционная система Windows через фильтр SmartScreen может оповещать вас каждый раз о том, что якобы файл WindowsGSM.exe является подозрительным и вредоносным. ЭТО НЕ ТАК. Автор руководства сам пользуется довольно долгое время данной программой. В том числе, вы можете посмотреть исходный код данной программы по ссылке https://github.com/WindowsGSM/WindowsGSM , чтобы лично убедиться в отсутствии каких-либо подозрительных кусков кода (если конечно у вас есть понимание того, как анализировать код программы).

После запуска файла WindowsGSM.exe, вам потребуется в окне оповещения фильтра SmartScreen нажать на надпись «Подробнее». После этого нажмите на кнопку «Выполнить в любом случае».

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

После чего операционная система Windows опять может запросить разрешение на запуск файла WindowsGSM.exe, но уже от Службы контроля учетных записей (UAC). Просто согласитесь на внесение изменений на вашем устройстве нажатием кнопки «Да».

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

После всех действий у вас должно появиться окно с программой WindowsGSM.

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Для того чтобы скачать выделенный сервер (dedicated server) для игры Mordhau вам потребуется в окне программы WindowsGSM нажать на меню «Servers», затем нажать на пункт меню «Install GameServer».

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

В открывшемся меню, вам потребуется выбрать «Mordhau Dedicated Server» в поле «Game Server». Вы можете указать желаемое название сервера в программе WindowsGSM в поле «Server Name». Далее вам потребуется нажать на кнопку «Install» для начала скачивания и установки сервера.

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Дождитесь конца установки сервера в программе WindowsGSM.

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

В конечном итоге у вас должен получится такой результат:

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Дальнейшее обновление сервера до последней версии происходит вручную или автоматически.

Чтобы обновить сервер вручную, вам потребуется в окне программы WindowsGSM выбрать нужный сервер, затем нажать на меню «Actions» и после этого нажать на пункт меню «Update». В этом пункте меню следует нажать на пункт «Update» или «Update Validate».

Пункт «Update» служит для полного скачивания всех файлов сервера. Пункт «Update Validate» служит для частичного скачивания файлов сервера, которые были обновлены.

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Далее, вам потребуется согласиться на обновление сервера нажатием кнопки «Да».

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

После этого программа WindowsGSM начнет процесс обновления сервера, но перед этим сервер будет выключен автоматически.

Чтобы сервер обновить автоматически, вам потребуется в окне программы WindowsGSM выбрать нужный сервер, затем нажать на кнопку «Auto Update».

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

После этого программа будет опрашивать Steam сервера на наличие обновленных файлов сервера раз в 30 минут по-умолчанию.

Быстрый переход в папку с файлами сервера

Если вам нужно быстро перейти в папку с файлами сервера, то для этого нужно в окне программы WindowsGSM выбрать нужный сервер, затем нажать на меню «Browse» и после этого нажать на пункт меню «Server Files».

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

Папка с файлами сервера должна открыться.

Steam Community :: Guide :: Установка, настройка и запуск выделенного сервера (Dedicated Server) [Windows]

§

Steamcmd autoupdater

Install and automatically update any game server

Steamcmd guardian 1.2

The following script was tested on Debian Wheezy.

Steamps

SteamPS is a PowerShell module that can be used to update servers, fetch server information. It also presents a workflow to update game servers.

Supported servers

A list of known servers that use SteamCMD to install is available on the Dedicated Servers List page. Note that any extra commands listed need to be executed before the app_update line.

Unable to locate a running instance of steam

You may get the following error when starting a server with Linux:

[S_API FAIL] SteamAPI_Init() failed; unable to locate a running instance of Steam, or a local steamclient.dll.

Resolve the issue by linking steamclient.so to the ~/.steam/sdk32/steamclient.so directory:

ln -s steamcmd/linux32/steamclient.so ~/.steam/sdk32/steamclient.so

Validate

validate

Validate is a command that will check all the server files to make sure they match the SteamCMD files. This command is useful if you think that files may be missing or corrupted.

It is recommended you use this command only on initial installation and if there are server issues.

Windows

1. Create a folder for SteamCMD.

For example

C:steamcmd

With a steam account

Some servers require you to login with a Steam Account.

Автоматическое

В простейшем случае обновление игровых серверов мы можем отдать на откуп им самим — включив в параметры запуска обоих серверов строку:

-autoupdateбудут автоматически устанавливаться обновления сервера. Требует наличия двух следующих параметров

-steam_dirпуть к каталогу где лежат файлы steam.sh и steamcmd.sh

-steamcmd_scriptскрипт для обновления, ищется в “-steam_dir”, но можно указать с абсолютным путём

На самом деле, эта триада параметров перед каждым (пере)запуском сервера всего лишь выполняет ./srcds_run runscript ~/cfg/tf2_update

В каталоге ~/cfg создаём файл tf2_update — в нём укажем команды для автоматического обновления сервера. Эти команды в сущности повторяют те, которые мы указывали в командной строке при инсталляции игрового сервера.

Пояснения по командам:

@ShutdownOnFailedCommandруководство Valve рекомендует устанавливать эту переменную в “0” при обновлении нескольких игровых серверов.

Обновление серверов

Обычно процедуре обновления серверов посвящают всего десяток строчек, и, положа руку на сердце, для большинства конфигураций этого достаточно, но в нашем случае уделим этому вопросу целый раздел.

Время от времени Valve выпускает обновления как для клиентов, так и для серверов, и обновлённые клиенты зачастую отказываются подключаться к необновлённым серверам:

Периодическое обновление

Мы можем зайти с другой стороны — регулярно по cron запускать steamcmd.sh с командами установки обновлений (да, “по-живому”), анализировать результаты и при успешном обновлении инициировать перезапуск игровых серверов.

Так, при запуске ~/Steam/steamcmd.sh runscript ~/cfg/tf2_update и при отсутствии обновлений сервера, steamcmd.sh порадует нас сообщением:

   ...
   Connecting anonymously to Steam Public...Logged in OK
   Waiting for license info...OK
   Success! App '232250' already up to date.

При наличии обновлений, после автоматического скачивания и в случае успешной установки:

   ...
   Update state (0x61) downloading, progress: 99.63 (3616706682 / 3630011517)
   Update state (0x81) committing, progress: 100.00 (606937472 / 606937472)
   Success! App '232250' fully installed.

Вот на “fully installed” и будем проверять. Реализовываем. Создаём скрипт ~/update.sh:

Да, установку обновлений можно запускать, как указывая параметры в командной строке steamcmd.sh — ” login anonymous force_install_dir ~/tf2/ app_update 232250 quit”, так и с помощью ранее созданного файлика tf2_update — ” runscript ~/cfg/tf2_update”

:/>  Как сделать скриншот экрана на компьютере на windows 10: сочетание клавиш, программа для скриншотов.

Скрипт минималистичен и жесток, поэтому в таком виде его использовать не будем. А вот после окончательной настройки запуска игровых серверов, как в разделе “Автозапуск игровых серверов”, с использованием tmux в скриптах запуска и настройки sudo, можно предварительно предупреждать пользователей о грядущем рестарте, да и выполнять его цивилизованнее. Тогда скрипт примет более приемлемый вид:

Вместо “say”, если уже установлен SourceMod можно использовать его варианты команд.

Такой вариант обновления активируем через наш crontab файл, не забывая сделать сам скрипт исполняемым:

   $ chmod 744 ~/update.sh
   $ crontab -e

Прописываем запуск каждые полчаса:

Настройка перенаправления логов cron в лог, доступный пользователю game описано в разделе “Логи”

Практика

В нашем примере мы будем настраивать два игровых сервера:

  • первый — публичный, с официальными картами, без модификаций.
  • второй — приватный, с пользовательскими картами, ботами, меняющими игровой процесс модификациями. Но с включённым Valve Anti-Cheat, конечно.

Создадим каталог для хранения файлов с настройками серверов. Заодно сделаем каталог для логов. На данный момент у нас уже есть логи клиента Steam, поэтому сразу же сделаем туда ссылку:

   $ mkdir ~/cfg
   $ mkdir ~/log
   $ ln -s ~/Steam/logs ~/log/steam

Мы по возможности все файлы настроек будем создавать в ~/cfg и символьными ссылками раскладывать в соответствующие каталоги сервера. Такое размещение позволит заметно упростить процедуру резервного копирования и восстановления сервера, и уменьшить смешивание настроек разных серверов, хотя полностью избежать этого не удастся.

Настройки можно условно сгруппировать в три категории:

  1. Параметры, которые должны быть указаны только в командной строке запуска сервера. Пример — maxplayers и sv_pure при значении равном двум
  2. Параметры, которые необходимо указывать до загрузки карт — либо в autoexec.cfg, либо в подключаемых в командной строке exec file.cfg. Пример — mapcyclefile, motdfile, tv_enable, да много их
  3. Все остальные, которые можно указывать в server.cfg и прочих файлах.

Но в командной строке сервера очень много не укажешь как из-за ограничения по максимальной длине, так и из соображений безопасности — при отсутствии должным образом закрученных гаек, другие пользователи на вашем Linux сервере с доступом в шелл могут видеть процессы и командные строки друг друга — cat /proc/<id>/cmdline с такими деликатными параметрами, как rcon_password, tf_serveridentity<…>, sv_setsteamaccount, sv_password и так далее.

Таким образом мы для начала будем использовать всего-навсего пять файлов для наших настроек — общие настройки для обоих серверов в файле autoexec.cfg, индивидуальные настройки первого сервера — autoexec1.cfg и server1.cfg, второго — autoexec2.cfg и server2.cfg.

Целесообразность разделения индивидуальных настроек по двум файлам диктуется как вышеприведённым делением параметров на три категории, так и необходимостью использования файлов (типа server.cfg), которые выполняются при каждой смене карты — для восстановления параметров, изменённых в индивидуальных файлах настроек карт, либо вручную в консоли, либо по cron’у, либо иным способом. Ведь файлы типа autoexec.cfg выполняются лишь при старте игрового сервера.

Сетевые настройки

При запущенном сервере без параметров (как мы делали это в самом начале), если в другом окне терминала запустить netstat -lpn | grep srcds, то мы увидим:

   tcp     0      0 192.0.2.0:27015    0.0.0.0:*     LISTEN      3456/./srcds_linux
   udp     0      0 192.0.2.0:27005    0.0.0.0:*                 3456/./srcds_linux
   udp     0      0 192.0.2.0:27015    0.0.0.0:*                 3456/./srcds_linux
   udp     0      0 192.0.2.0:27020    0.0.0.0:*                 3456/./srcds_linux
   udp     0      0 192.0.2.0:26901    0.0.0.0:*                 3456/./srcds_linux

Каждый игровой сервер использует свои порты. Они могут задаваться следующими параметрами при запуске srcds:

UDP/27005 clientport — Game client port

UDP/27015-port — The port the server advertises to clients

TCP/27015порт для удалённой консоли, RCON, номер задаётся параметром -port, но использует протокол TCP. Если управление игровым сервером планируется осуществлять исключительно посредством терминального доступа с помощью ssh (а лучше — настроить и забыть), то этот порт с протоколом TCP (не UDP!) можно закрыть, либо вовсе не открыть на файерволе.

UDP/27020-tv_port — SourceTV port (описан в соответствующем разделе “SourceTV”)

UDP/26901-steamport — Steam/VAC connection port

Таким образом, для ручной установки этих же портов, используемых по умолчанию, мы в строке запуска первого сервера укажем “-port 27015 -steamport 26900 clientport 27005 tv_port 27020”. Порт 26900 — это не ошибка, в действительности сервер будет использовать порт на единичку выше.

Для второго сервера надо указать другие значения. В интернете есть советы, что номера портов в подобных мультисерверных конфигурациях лучше увеличивать не последовательно, а через один (27015 -> 27017 -> 27019 и так далее). Но в нашем случае будем увеличивать последовательно. Вроде и так работает.

Тогда второй сервер будем запускать с параметрами “-port 27016 -steamport 26901 clientport 27006 tv_port 27021”.

Конечно, можно порты не указывать вовсе, ни для первого сервера, ни для второго. В таком случае сервер, стартовавший первым будет использовать порты по умолчанию, а стартовавший вторым немножко ругнётся в логах:

   WARNING: Port 27015 was unavailable - bound to port 27016 instead
   WARNING: Port 27005 was unavailable - bound to port 27006 instead
   WARNING: Port 27020 was unavailable - bound to port 27021 instead
   Network: IP 192.0.2.0, mode MP, dedicated Yes, ports 27016 SV / 27006 CL

и будет использовать следующие по порядку. Но всё же мы будем явно указывать номера портов в командной строке, да ещё припечатаем их параметром -strictportbind (описание будет ниже).

Естественно, ничто не запрещает использовать другие номера портов, хоть “-port 50000 clientport 50001 tv_port 50002 -steamport 50003”, и при этом сервер будет виден через ISteamApps/GetServersAtAddress интерфейс и к нему в принципе можно будет подсоединиться и играть. Но в нашем примере мы будем более традиционны.

Скрипты запуска сервера

В обычных условиях нам придётся иметь дело с двумя скриптами-обёртками:

  1. с консольным клиентом Steam — ~/Steam/steamcmd.sh, который запускает программу linux32/steamcmd. В явном виде используется нами для установки и регулярных обновлений игровых серверов;
  2. с собственно, самим игровым сервером — ~/tf2/srcds_run, который запускает лежащий тут же srcds_linux, а тот уже игру.

Для настройки и отладки, когда приходится часто запускать/останавливать сервера, мы создадим скрипты для запуска — ~/start1.sh и ~/start2.sh. Потом их расширим и переделаем для автозапуска. Для первого сервера, ~/start1.sh:

Пояснения по параметрам (начинаются с “-“) и консольным переменным (начинаются с ” “):

-portпорт для игры. Для первого сервера — 27015. При использовании иных портов, как у нас, необходимо не забыть их открыть на файерволе

-steamportпорт для VAC (Valve Anti-Cheat). В действительности будет использоваться на единичку выше. То есть указав 26900, в действительности будет 26901

clientportпорт для подключения игроков

tv_portпорт для SourceTV. Если принципиально не будем пользоваться, то можно вместо tv_port указать параметр -nohltv

-strictportbindесли вышеуказанные порты заняты, то сервер не будет автоматически выбирать следующие свободные, а будет завершаться с ошибкой “ERROR: Port 27015 was unavailable — quitting due to “-strictportbind” command-line flag!”. Будет повод почитать логи и найти ошибку.

-ipip адрес, на котором будет сервер. Можно указать какой-то конкретный, либо 0.0.0.0 — все интерфейсы. Мы параметр не устанавливаем, так как на нашем сервере только один сетевой интерфейс, с внешним ip

-gameзапускаемая игра. У нас — “tf” — Team Fortress 2.

maxplayersмаксимальное количество игровых слотов на сервере. Этот параметр указывается только в командной строке. Значение по умолчанию — 24, может быть увеличено до 32. Для Mann vs. Machine должно быть 32

-pidfileуказывает файл для хранения PID сервера.

-ugcpathкаталог для скачиваемого контента из Steam Workshop. По умолчанию — ~/tf2/steamapps/workshop. Можно указывать как абсолютный путь так и относительный, от каталога ~/tf2/tf. Так как считается, что использование одного workshop каталога для нескольких игровых серверов не поддерживается и может вызвать проблемы, то для каждого сервера указываем свой.

:/>  ERR PROXY CONNECTION FAILED на телефоне Android. Как исправить?

sv_pureпредназначение этой переменной — уменьшить возможность мошенничества игроков, которые могут у себя на локальном компьютере заменить игровые файлы на читерские (прозрачные текстуры, трассеры у выстрелов, текстуры игроков и так далее).

Этот параметр может принимать значения -1, 0, 1, 2. При установке значения sv_pure от 0 и выше, при подключении к нашему серверу игрока, на его компьютере будет осуществляться проверка целостности ключевых файлов его инсталляции игры (контрольная сумма, цифровая подпись), что, очевидно, несколько замедляет подключение игроков.

Критерии проверки описаны в pure_server_full.txt, pure_server_minimal.txt и pure_server_whitelist_example.txt из ~/tf2/tf/cfg/. Для установки максимального уровня — sv_pure 2, параметр должен указываться в командной строке srcds_run, чтобы он смог отработать ещё до того, как сервер при запуске начнёт загружать свои .vpk файлы.

execимя файла, который будет выполняться при старте сервера сразу после autoexec.cfg. Может указываться несколько раз.

servercfgfileимя файла, который будет использоваться вместо server.cfg — как при запуске сервера, так и при каждой смене карт

mapимя карты (без расширения). Можно не указывать здесь, но тогда необходимо указать в файле autoexec.cfg (не server.cfg !). Если не задать карту вообще, то сервер войдёт в ступор. Бывают рекомендации указывать этот параметр последним в командной строке. Но мы его не используем, начальную карту будем указывать в autoexec.cfg

Другие параметры командной строки можно посмотреть в Valve Developer Community wiki

Копируем скрипт в ~/start2.sh, корректируем CMDLINE (увеличиваем на единичку номера портов и подправляем имена файлов), сохраняем.

Делаем скрипты исполняемыми

   $ chmod u x ~/start{1,2}.sh

Можно запустить первый сервер (из-под пользователя game, не root !), сразу посмотреть что-как. Наблюдаем за последовательностью отработки файлов конфигурации:

Теория

Исторически, за годы развития, сложились различные возможности по конфигурированию сервера.

По умолчанию сервер использует несколько основных файлов с настройками, которые ищет в ~/tf2/tf/cfg/: autoexec.cfg — выполняется единожды при старте сервера, server.cfg — при запуске любой карты, <имя_карты>.cfg — при запуске соответствующей карты.

Так же, при запуске сервера, в его командной строке можно указать параметр servercfgfile my.cfg — при этом сервер отныне будет использовать не server.cfg а my.cfg, и несколько параметров вида exec file1.cfg exec file2.cfg exec file3.cfg — эти файлы будет выполнены единожды при старте сервера, сразу после autoexec.cfg.

Вдобавок, ещё до проверки основного каталога, сервер при запуске ищет в ~/tf2/tf/custom файлы с расширением .vpk и структуры каталогов вида my_dir/cfg/, my_dir/maps/, my_dir/materials/ и тому подобное и найденные там файлы использует вместо одноимённых стандартных.

Но и это не всё. В обновлении Team Fortress 2 от 14 мая 2021 года появился новый параметр командной строки -insert_search_path. Он служит для добавления пользовательской структуры каталогов (аналогично custom/), но с возможностью указания абсолютного пути, то есть не обязательно внутри серверного каталога ~/tf2/tf/.

Раньше для это приходилось исхитряться, а сейчас достаточно в командной строке srcds_run указать -insert_search_path /var/dir1 и этот каталог будет использоваться как поисковый путь (/var/dir1/maps, /var/dir1/cfg, …) до путей в custom/ и до основного каталога с файлами конфигураций ~/tf2/tf/cfg/.

То есть, если у нас есть несколько файлов server.cfg в разных каталогах:

   ~/tf2/tf/cfg/server.cfg
   ~/tf2/tf/custom/my_files/cfg/server.cfg
   ~/tf2/tf/custom/another/cfg/server.cfg
   /var/dir1/cfg/server.cfg

и в командной строке сервера мы вдобавок укажем -insert_search_path /var/dir1, то при запуске сервера и выполнении в консоли и скриптах команд вида exec server.cfg, этот файл сначала будет искаться в /var/dir1/cfg, затем в custom/another/cfg/, далее в custom/my_files/cfg/ (каталоги в custom/ перебираются по алфавиту) и напоследок в основном cfg/.

Это относится не только к server.cfg, но и к motd.txt, картам и пр. Подробнее про поисковые пути можно почитать (и поковырять настройки) в ~/tf2/tf/gameinfo.txt — там есть и про настройки путей в зависимости от системного языка, не освещённые здесь и много всего интересного.

Посмотреть очерёдность перебора поисковых путей очень просто — достаточно в консоли запущенного сервера ввести команду path:

   path
   ---------------
   Paths:
   "maps/cp_cloak.bsp" "GAME" (map)
   "/home/game/tf2/bin/" "EXECUTABLE_PATH"
   "/home/game/tf2/" "BASE_PATH"
   "/var/dir1/" "GAME"
   "/var/dir1/" "MOD"
   "/home/game/tf2/tf/custom/another/" "GAME"
   "/home/game/tf2/tf/custom/another/" "MOD"
   "/home/game/tf2/tf/custom/my_files/" "GAME"
   "/home/game/tf2/tf/custom/my_files/" "MOD"
   и так далеее, далее, далее

Так же не забываем про файлы настроек вида <имя карты>.cfg. Кроме того есть replay.cfg, sourcemod.cfg, ммм… да тысячи их!

Такой зоопарк позволяет при настройке индивидуальных конфигураций для серверов выстрелить себе в ногу разнообразными способами. А так как srcds — молодой, динамически развивающийся сервер, то он может доставить немало весёлых часов в поисках ответа на вопрос “А почему ВНЕЗАПНО у игроков перестали скачиваться пользовательские карты. Даже через slow download, не говоря уж о fast… Два года всё было нормально…”

Из всего предложенного богатства выбора, мы остановимся на указании файлов конфигурации в exec и servercfgfile в параметрах запуска.

Необходимо учитывать, что любые комплектные файлы, установленные при инсталляции в ~/tf2 могут быть изменены при очередном обновлении сервера, в том числе и файлы в ~/tf2/tf/cfg. Поэтому мы не будем напрямую задействовать имеющиеся файлы конфигурации, а станем создавать, пусть даже и на их основе, но свои.

То есть вместо использования уже существующего, комплектного файла со списком карт для ротации, например, mapcyclefile mapcycle_quickplay_cp.txt, пусть даже на данный момент он нас полностью устраивает, мы скопируем его в свой mapcycle.txt и будем подключать его.

Изменённые либо удалённые нами комплектные файлы (не только конфигурации, а любые) могут быть возвращены в своё исходное состояние путём запуска обновления игрового сервера с параметром “validate” — steamcmd.sh login anonymous force_install_dir ~/tf2/ app_update 232250 validate quit. Тогда, даже если как такового нового обновления для нас нет, будет осуществлена проверка контрольных сумм всех комплектных файлов, и, при несовпадении, изменённые файлы будут скачаны заново.

Только проверка

В некоторых случаях может потребоваться лишь проверить наличие обновлений, не устанавливая их прямо сейчас.

Установка клиента steam и сервера team fortress 2

Нашу цель по установке и настройке одновременной работы нескольких игровых серверов можно достичь разными способами. В простейшем случае — создавая отдельные экземпляры серверов, каждый в своём каталоге. Это, ценой неэффективного использования дискового пространства (если файловая система или хранилище данных не используют дедупликацию) и повышенного расхода траффика на скачивание одинаковых обновлений даёт возможность независимой настройки, обновления и управления серверами, хотя при использовании одного ip адреса всеми игровыми серверами всё же придётся им использовать разные порты.

Если у нас 64-битный дистрибутив Linux, то необходимо установить дополнительные библиотеки совместимости (из-под пользователя root). Какие именно — гуглится по фразе steamcmd x64 ВАШ_ДИСТРИБУТИВ. Для Ubuntu 13.10 x64, например, apt-get install lib32gcc1, для ArchLinux — pacman -S lib32-gcc-libs (при включённом репозитории multilib в /etc/pacman.conf), для CentOS — yum install glibc.i686 libstdc .i686 и так далее.

Если их не устанавливать, будут выдаваться ошибка вида:

   ./steamcmd.sh: line 29: /home/game/Steam/linux32/steamcmd: No such file or directory

либо

   ./steamcmd.sh: /home/game/Steam/linux32/steamcmd: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

Устанавливать клиента Steam будем в одноимённый каталог в домашней директории пользователя game, а саму игру в каталог tf2. Предполагается, что в /etc/fstab раздел с /home монтируется без noexec и там достаточно свободного места.

Создаём каталоги для наших серверов и переходим в первый:

   $ mkdir ~/Steam
   $ mkdir ~/tf2
   $ cd ~/Steam

Скачиваем консольный клиент Steam, распаковываем архив.

Оставьте комментарий

Adblock
detector