Установка и запуск Procon Layer на GNU/Linux (Ubuntu)

#1
Information 
Ни для кого не секрет, что любой нормальный игровой сервер не может обойтись без тонкой настройки и полезных плагинов, работа которых осуществляется через Procon.
Procon — это графический интерфейс для протокола управления сервером RCON, который используется в играх на движке Frostbite (Battlefield 3/4/Hardline, MoH, BFBC2).
Чаще всего, Procon продается как отдельная услуга, которая стоит денег и работает как отдельный от игры сервис.
Поскольку Procon разрабатывается сообществом, разработка идет только под ОС Windows.

Рассмотрим вариант запуска своего Procon в режиме Layer, или так называемого "сервера Procon", который постоянно подключен к игровому серверу и позволяет управлять им в любое время из любого места.
Для примера, рассматривается установка и запуск в ОС Ubuntu Server 14.04.3 LTS, но использовать её можно и для запуска на других ОС, различия минимальны.

Что нам потребуется:
Этап 1 — подготовка
Для работы Procon под GNU/Linux нам необходимо наличие установленной системы Mono. Необходимая версия пакета: mono 2.6.x и выше.

Код:
Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-4ubuntu1.1)

Есть 2 варианта установки mono в Ubuntu Server/Debian:
  1. Установка мета-пакета mono-complete, который входит в состав репозитариев Ubuntu по умолчанию. Данный мета-пакет установит ПОЛНЫЙ набор системы mono, включая компоненты для графической среды и остальные не очень нужные в повседневной жизни вещи. Самый простой и надежный вариант, и самый ресурсоемкий.
  2. Установка только базовой части mono-runtime + необходимые компоненты. Экономит место на диске и не тянет за собой кучу зависимостей.
Установка mono-complete (полная):

Код:
sudo apt-get install mono-complete

Установка mono-runtime (только необходимое):

Код:
sudo apt-get install mono-runtime libmono2.0-cil libmono-winforms2.0-cil mono-mcs mono-2.0-service

mono-runtime, базовый набор системы mono
libmono2.0-cil libmono-winforms2.0-cil, необходимы для запуска и работы консольных приложений
mono-mcs, необходим для компиляции и работы плагинов
mono-2.0-service, необходим для запуска приложений в качестве сервиса (в фоне)
Все это можно установить по отдельности или собрать вручную (для любителей Gentoo и прочих).

Этап 2 — установка и запуск
Нам потребуется последняя версия Procon с официального сайта.
Загрузите её на ваш сервер (через FTP, или напрямую через wget), распакуйте архив в нужную вам директорию, например procon.

По всем правилам приличия, для каждого из сервисов необходимо создавать своего пользователя, от имени которого этот сервис будет запускаться. Мы пропустим данный шаг, который уже не раз описывался в интернете. Запуск от имени суперпользователя (root) является дурной практикой и не рекомендуется для запуска Procon.

Для запуска Procon необходимо выполнить всего одну команду (без учета команды перехода в директорию procon):

Код:
mono PRoCon.Console.exe

И если ответом будет:

Код:
Procon Frostbite
================
By executing this application you agree to the license available at:
        http://myrcon.com/licenses/myrcon.pdf
If you do not agree you must immediately exit this application.
================
This is a cut down version of PRoCon.exe to be used by GSPs and PRoCon Hosts.
Executing this file is the same as "PRoCon.exe -console 1"
No output is given.  This is as cut down as we're gunno get..

Executing procon...
Running... (Press any key to shutdown)

нажимаем любую клавишу и радуемся: оно запустилось и работает.

Теперь необходимо упростить задачу запуска, остановки и автоматического запуска Procon при старте системы.
Это делается с помощью скриптов запуска для init. Например, такой:
Данный скрипт запуска необходимо подключить к вашей системе инициализации, для Ubuntu Server это будет init.d (который используют apache2, mysql и прочие).
Файл нужно сделать исполняемым и положить в /etc/init.d/.

В содержимом скрипта редактируем 2 строки:
HOME=/home/procon2/ заменяем /home/procon2/ на путь, куда был установлен Procon (/home/vasya/procon/).
USER=root заменяем на пользователя, от имени которого будет производиться запуск/остановка, root НЕ рекомендуется (Как создать отдельного пользователя?).

Теперь можно легко запускать сервер Procon через команду вида sudo service procon start, запускаться оно будет в виде "сервиса", т.е. в фоновом режиме.

Этап 3 — настройка сервера Layer
Вся настройка Procon в GNU/Linux производится через редактирование конфигурационных файлов вручную.

После первого запуска, останавливаем сервер Procon и редактируем следующие файлы:
procon.cfg (находится в папке Configs), проверяем следующие строки:

procon.private.options.setLanguage, выставляем "au.loc" (устанавливаем язык)
procon.private.options.autoCheckDownloadUpdates, выставляем False (отключаем автоматическое обновление, от него Procon падает)
procon.private.options.autoApplyUpdates, выставляем False (отключаем автоматическое обновление, от него Procon падает)
procon.private.options.allowanonymoususagedata, выставляем False (отключаем сбор статистики, от него Procon падает)
procon.private.options.runPluginsInSandbox, выставляем False (выключаем безопасный режим для плагинов)

Теперь нам нужно добавить в список свой игровой сервер, делается это двумя строчками:

procon.private.servers.name "85.14.234.211" 47200 "Server name"
procon.private.servers.add "85.14.234.211" 47200 "rconpassword"

где 85.14.234.211 это IP вашего игрового сервера, 47200 это query (НЕ игровой) порт вашего сервера, Server name имя вашего сервера, которое будет отображаться в Procon.
Важная часть это rconpassword, пароль администратора RCON для вашего игрового сервера.
Все эти реквизиты должны быть в панели управления вашего хостера (или у вас в почте).

Теперь необходимо провести настройку Layer для нашего сервера.
Вариантов опять два: можно попробовать запустить Procon после редактирования конфига, он должен автоматически создать папку с конфигами для вашего сервера. Но, такое может и не произойти, поэтому придется действовать вручную:

проверям в папке Configs наличие папки вида 85.14.234.211_47200. Если её нет, создаем. Шаблон для имени это IP_ПОРТ, и никак иначе.
В этой папке, должен быть файл вида 85.14.234.211_47200.cfg. Если его нет, создаем. Шаблон для имени это IP_ПОРТ.cfg, и никак иначе.

Проверяем содержимое файла:

Код:
/////////////////////////////////////////////
// This config will be overwritten by procon.
/////////////////////////////////////////////
procon.protected.layer.enable True 27260 "0.0.0.0" "PRoCon[%servername%]"
procon.protected.playerlist.settings true 2 0,4939024 0,5
procon.protected.chat.settings False False True 0 0
procon.protected.events.captures False 200 False
procon.protected.lists.settings False
procon.protected.console.settings True True True True True True
procon.protected.timezone_UTCoffset 0

Строка procon.protected.layer.enable True 27260 "0.0.0.0" "PRoCon[%servername%]" отвечает за настройки Layer, можно поменять порт (27260), IP ("0.0.0.0"), имя ("PRoCon[%servername%]").

Добавляем дежурную учетку для соединения с сервером, к примеру Test:

Код:
procon.protected.layer.setPrivileges "Test" 3972679

у нее будут полные права доступа, и она всегда будет использована для соединения с игровым сервером, но под ней можно и работать.

Теперь, необходимо добавить информацию о пользователе "Test" в файл accounts.cfg (лежит в папке Configs):

Код:
/////////////////////////////////////////////
// This config will be overwritten by procon.
/////////////////////////////////////////////
procon.public.accounts.create "Test" "Password"

где "Password" это пароль для подключения к Procon.
Запускаем Procon.

Проверка подключения
Пробуем подключиться к нашему серверу Procon Layer:
В качестве адреса для подключения используется IP/хост вашей VPS/VDS (где установлен Procon), порт по умолчанию 27260, имя пользователя Test, пароль Password.
Если всё настроено верно, подключение пройдет успешно, можно пользоваться.

Возможные проблемы
  • Некоторые плагины могут не работать вовсе из-за сильной привязки к .NET, которая еще не реализована в Mono.
  • Функции некоторых плагинов могут не работать, либо работать нестабильно вызывая падения Procon. Причина выше.
  • Любые автоматические обновления не будут работать. Поэтому, первым делом их нужно отключать.
  • Все обновления производятся вручную, заменой файлов.

Используемые источники
[HowTo] Run a PRoCon Layer (1.4.0.6) with Linux+mono
[HowTo] Run a PRoCon Layer (1.4.0.6) with Linux+mono #87
 1 ×
Ответить

#2
Диагностика проблем с плагинами
Как было указано выше, некоторые плагины могут не работать при запуске Porocon Layer на Mono, но будет полезным узнать причины такого поведения.
Проще всего диагностировать работу плагинов, это включение логирования событий в Procon.

Делается это просто:
открываем редактором файл procon.cfg (находится в папке Configs), проверяем следующие строки:
procon.private.options.pluginLogging, выставляем True. Готово, теперь все события касательно плагинов будут записываться в лог, который будет падать в папку Logs, далее папка с IP_ПОРТ вашего сервера, файл вида 20150930_plugin.log, где 20150930 это дата создания лога. Логи ведутся ежедневные, т.е. на каждый день свой лог. Довольно удобно, особенно если настроить ротацию логов через logrotate.

Возможные решения при проблемах с плагинами
  • Плагин не запускается.
    Скорее всего не установлен необходимый компонент Mono. Решается проблема установкой полного набора через мета-пакет mono-complete (или ручной сборкой, зависит от дистрибутива).
  • Неверный путь до файла, в пути присутствуют запрещенные символы.
    Т.к. Procon изначально писался под Windows, а в ней как известно, немного другие стандарты кодировок и разрешенных символов, то в случае возникновения проблем с путями следует привести их в порядок. В некоторых случаях может понадобиться создание символических ссылок на один и тот же файл с разным регистром (GNU/Linux чувствителен в регистру).
  • В лог сыпятся многочисленные ошибки, но плагин работает.
    Необходимо отключить функции плагина, которые вызывают проблемы. Чаще всего это функции автоматического обновления плагинов или отправка статистики разработчику.
Ответить

Пользователи просматривают эту тему:
1 Гость(ей)