Содержание
Установка выделенного сервера Half-Life
В этой статье описывается установка и конфигурирование выделенного сервера Half-Life (HLDS). Half-Life – это первая игра компании Valve Software's. Несмотря на то, что игра вышла в 1998 году, она до сих пор популярна среди онлайн игроков.
Запустив свой сервер, вы сможете играть сами или с друзьями. Half-Life нетребователен к ресурсам и достаточно быстро работает даже на старом оборудовании. На своём сервере вы вправе сами создавать список игровых карт, которые будут сменять друг друга, а также вы сможете вносить другие поправки в процесс игры (такие как, к примеру, установка пароля на сервер, что позволит контролировать, кто сможет заходить в игру). Half-Life Dedicated Server доступен для Linux со дня создания игры. Не смотря на то, что сама игра была портирована на Linux только сейчас. Half-Life стала доступна как первая коммерческая игра для нативного порта Steam клиента для Linux в начале 2013 года. Вместе с «free-to-play» Team Fortress 2 вы имеете две хорошие причины начать использовать игровую платформу Steam.
Выбор хост-машины для сервера
Программа Steam и игровой сервер являются 32-битными приложениями. По этой причине имеет смысл запускать их на 32-битном хосте Slackware. Если на вашем сервере установлена 64-битная версия дистрибутива Slackware, и вы не хотите устанавливать multilib, у вас есть два варианта решения этой задачи:
- Установить 32-битную Slackware в LXC контейнер. Slackware поддерживает LXC (система виртуализации на уровне операционной системы) «из коробки». Для примера посмотрите, как это делается в блоге Ponce.
- Установить 32-битную Slackware в виртуальную машину (используя, к примеру, QEMU или VirtualBox).
Для виртуальной 32-битной Slackware машины нет необходимости в полной установке. Вы можете установить минимальный вариант Slackware, который будет занимать менее 500Mb дискового пространства. Детальнее смотрите статью о минимальной установке Slackware «minimal Slackware».
Подготовка сервера
Сперва от имени пользователя «root» вы должны создать в системе аккаунт, под которым будет запускаться HLDS сервер. Запускать игровой сервер от пользователя «root» плохая идея. Всегда будьте начеку и ожидайте худшего, поэтому настраивайте ваши сервисы с наимболее низким уровнем привилегий, достаточным для функционирования.
# groupadd steam # useradd -g steam -m -d /home/steam -c "Steam server account" -s /bin/bash steam
Устанавливаем пароль для нового пользователя «steam»:
# passwd steam
В примере ниже я использую каталог «~/server» как «рабочую зону» HLDS, куда утилита SteamCMD скачает бинарники сервера, файлы игры, и где будет храниться сценарий запуска сервера. Идея в том что бы хранить скачанные файлы Steam раздельно что позволит избежать проблем в дальнейшем. Теперь продолжим под пользователем «steam»:
# su - steam
- Создаём каталог для хранения журналов работы (лог файлы), которая будет потом использоваться:
$ mkdir ~/server/logs
- Скачиваем и распаковываем архив, содержащий бинарник «steamcmd»
$ mkdir downloads $ cd downloads $ wget http://media.steampowered.com/client/steamcmd_linux.tar.gz
- Мы распакуем этот архив в раздельные подкаталоги в «рабочей зоне» на нашем сервере:
$ mkdir -p ~/server/steamcmd $ tar -C ~/server/steamcmd -xvf steamcmd_linux.tar.gz
Не распаковывайте содержимое инструмента для обновления в обычный каталог клиента Steam!
- Запускаем SteamCMD в первый раз:
$ cd ~/server/steamcmd $ ./steamcmd.sh
- Программа автоматически обновится и предоставит вам командную строку Steam>. Напишите команду «help» для справки по использованию консоли.
- Для скачивания файлов сервера Half-Life вы должны войти в ваш аккаунт Steam:
'Steam> login <username>'
- Введите ваш пароль. Затем проверьте ваш e-mail для получения кода доступа к Steam Guard, затем введите этот код (вам необходимо это проделать единожды для каждого компьютера где вы включаете Steam).
- Укажите каталог для установки сервера. В этой статье мы будем использовать подкаталог «hlds_l» в серверном рабочем каталоге (не внутри каталога, в котором находится steamcmd) – нам нужно ввести полный путь:
'Steam> force_install_dir /home/steam/server/hlds_l/'
- Устанавливаем или обновляем файлы HLDS сервера. Каждое приложение Steam имеет собственный «app_id» или «Steam Application ID», который будет одним из параметров. Вы можете найти AppId для необходимых игр тут: https://developer.valvesoftware.com/wiki/Steam_Application_IDs
'Steam> app_update <AppID>'
Для Half-Life Dedicated Server AppID «90». Мы хотим скачать, установить и проверить HLDS:
Steam> app_update 90 validate
- После загрузки и завершения обновления, напишите «quit» для правильного выхода из серверов Steam.
Steam> quit
Каталог «~steam/server/hlds_l» (конечно же вы в праве выбрать любое имя, какое захотите) заполнен бинарниками Half-Life Dedicated Server (hlds*), а также весь контент игры Half-Life размещён в подкаталоге «valve». В результате суммарное занимаемое место составит примерно 410MB. как
Запуск игрового сервера
Утилита SteamCMD установила бинарники hlds linux в подкаталог, указанный параметром «force_install_dir». В нашем случае это каталог «~steam/server/hlds_l». Файлы игры Half-Life были скачаны в подкаталог ниже «valve» (другие игры, такие как Counter Strike, будут иметь свои отдельные подкаталоги).
Вы можете запустить игровой сервер Half-Life напрямую, используя следующие команды:
$ cd ~/server/hlds_l $ ./hlds_run -game valve +maxplayers 4 +map crossfire +exec server.cfg
Если ваш сервер мульти-интерфейсный (имеет несколько сетевых подключений с разными IP адресами) или вы хотите запустить сервер не на стандартном порту, вы должны указать параметр запуска, к примеру, «+ip 192.168.1.1 +port 27015».
Проверьте файл «server.cfg» в каталоге «hlds_l/valve», этот файл определяет поведение HLDS сервера. Некоторые важные переменные «sv_» должны быть настроены следующим образом:
// Показывать мой контактный e-mail: sv_contact "alien@slackware.com" // Cообщаем что мы Европейский сервер: sv_region 3 // Имя сервера по умолчанию. Меняем на "Bob's Server", и т.д.: // hostname "Half-Life" hostname "Alien BOB's server" // Разрешаем клиентам качать от нас карты: sv_allowdownload 1 // Разрешаем клиентам загружать на сервер свои "decals": sv_allowupload 1 // Только для LAN (локальной сети): //sv_lan 1 // Используйте если клиенту необходим пароль для доступа к серверу: //sv_password "sesame"
Так как это игровой сервер, вам необязательно постоянно держать открытым терминал пока сервер запущен. Поэтому удобнее запустить сервер в сеансе «screen», используя стартовый сценарий, который будет записывать весь вывод в журнал:
$ cat <<EOT > /home/steam/server/start_hlds.sh #!/bin/bash cd server/hlds_l screen -A -mdLS hlds_valve -c /home/steam/.screenrc \ ./hlds_run -console -game valve -pingboost 2 -pidfile hlds.pid \ +sys_ticrate 1000 +sv_maxupdaterate 100 +ip 192.168.1.1 +port 27015 +maxplayers 4 +map crossfire +cpu 1 EOT $ chmod +x /home/steam/server/start_hlds.sh $ cat << EOT > /home/steam/.screenrc log on logfile /home/steam/server/logs/hlds_screen.log EOT
Теперь вы можете запустить сценарий, который запустит Half-Life Dedicated server в сеансе screen. Если вы хотите автоматически запускать сервер при загрузке Slackware, вы можете добавить строку в файл /etc/rc.d/rc.local:
# Start the Half-Life Dedicated Server: if [ -x /home/steam/server/start_hlds.sh ]; then echo "Starting the Half-Life Dedicated Server: ~steam/server/start_hlds.sh" su - steam -c "server/start_hlds.sh" fi
Автоматическое обновление игровых файлов
Это хорошая практика предоставить клиенту Steam обновляться самому. Вы можете использовать cron для запуска обновления раз в день.
Создать обрабатывающий сценарий, который будет обновлять игру/игры автоматически. Создайте файл «~/server/steamwrapper.sh», как в примере:
$ cat <<EOT > ~/server/steamwrapper.sh #!/bin/sh /home/steam/server/steamcmd/steamcmd.sh +runscript /home/steam/server/hlds_steamcmd_update.txt EOT $ chmod 755 ~/server/steamwrapper.sh
Сценарий runscript, который здесь использован, содержит команды, которые передаются в SteamCMD. Этот файл выглядит так:
// Обновление hlds (каталог valve, app_id 90) login my_user my_pass force_install_dir /home/steam/server/hlds_l app_update 90 validate exit
Затем сконфигурируем cron пользователя steam для запуска сценария раз в день. Запустим эту команду для открытия редактора crontab:
crontab -e -u steam
затем добавляем строку, которая запланирует обновление на каждый день в 03:55:
55 3 * * * /home/steam/server/steamwrapper.sh 2>&1 | tee -a /home/steam/server/logs/cron.log
Приятной игры!
Дополнительные карты для небольших серверов
Если вы играете в ближнем бою со своими друзьями на относительно малом сервере (менее 8 игроков), дополнительные хорошие карты можно найти здесь: http://alienbase.nl/half-life/. Убедитесь, что друзья, которые подключаются к вашему серверу, уже скачали дополнительные карты до того, как подключились к серверу. Это предотвратит долгую закачку карт с сервера. Время скачивания карты во время игры может занять целый цикл игры на этой карте! Дополнительные карты размещаются на сервер (и клиенте) в подкаталоге «maps» каталога «valve».