Создание Killing Floor сервер на основе скрипта.

Тема в разделе "Linux", создана пользователем H1rako, 30 июн 2014.

Метки:
  1. H1rako

    H1rako Соучастник

    Шарился в просторах интернета и наткнулся на тему http://forums.tripwireinteractive.com/showthread.php?t=93089 на офф сайте. Внутры ссылка на статью http://danielgibbs.co.uk/scripts/kfserver/. В общем, ниже ее перевод.

    [hr]

    kfserver - это инструмент командной строки для быстрого и простого развертывания и управления выделеного сервера Killing Floor на Линукс.

    Текущая версия: 220614

    Содержание:
    • Основные возможности
    • Совместимость
    • Установка:
    • Подготовка ОС к установке
    • Установка сервера
    • Использование:
    • Запуск сервера
    • Обновление сервера
    • Проверка сервера
    • Запуск при загрузке ОС
    • Мониторинг сервера
    • Режим отладки
    • Данные о сервере
    • Режим консоли
    • Резервирование
    • WebAdmin
    • Сжатие карт
    • Автоматизация
    • Обновление сервера
    • Мониторинг сервера
    • Конфигурирование
    • Назначение параметров
    • Файл конфигурации
    • Порты по умолчанию
    • Запуск нескольких серверов
    • Запуск от ROOT
    • Полезные ссылки
    Основные возможности:
    • Установка сервера (SteamCMD)
    • Запуск / остановка / перезапуск сервера
    • Обновление сервера (SteamCMD)
    • Мониторинг сервера (включая мониторинг по электронной почте)
    • Backup сервера
    • Серверная консоль
    • Сжатие карт
    Совместимость:

    Скрипт создания и управления игровым сервером работает на следующих ОС:
    • Дистрибутивы на основе Debian (Ubuntu, Mint и т.д.).
    • Дистрибутивы на основе RedHay (CentOS, Fedora и т.д.).
    Так как скрипт написан на BASH и PYTHON, вероятнее всего будет работать и на других дистрибутивах

    Установка:
    Скрипт установки автоматически загружает и настраивает сервер Killing Floor в том числе включая веб-интерфейс и исправляя ошибку, показанную ниже.

    http://forums.tripwireinteractive.com/showpost.php?p=585435&postcount=13

    Подготовка ОС к установке:

    Перед установкой убедитесь, все ли зависимости у вас установлены.

    UBUNTU:

    Ubuntu x32

    apt-get install tmux ca-certificates lockfile-progs python

    Ubuntu x64


    apt-get install tmux ca-certificates lib32gcc1 lockfile-progs python

    RHEL 6 / CentOS 6:
    Примечание: Репозиторий EPEL или аналоги не требуется
    http://fedoraproject.org/wiki/EPEL

    RHEL 6 / CentOS 6 х32


    yum install wget nano tmux

    RHEL 6 / CentOS 6 х64


    yum install wget nano tmux glibc.i686 libstdc++.i686

    Установка:
    1. Создаем пользователя и заходим на него


    adduser kfserver
    passwd kfserver
    su - kfserver

    2. Скачиваем скрипт

    wget http://danielgibbs.co.uk/dl/kfserver

    3. Делаем его исполняемым

    chmod +x kfserver

    4. Добавляем логин и пароль от Steam в скрипт.
    Нужно ввести свои данные от аккаунта Steam, что бы аутентифицироваться в системе Steam через SteamCMD. Рекомендую создать отдельный профиль для сервера.
    http://store.steampowered.com/

    nano kfserver

    Код:
    # Steam login
    steamuser="username"
    steampass="password"
    
    5. Запускаем скрипт

    ./kfserver install

    Использование:
    Запуск сервера:
    Запуск:


    ./kfserver start

    Остановка:


    ./kfserver stop
    Перезапуск:

    ./kfserver restart
    Обновление сервера:
    Сервер может автоматически обновляться с помощью SteamCMD. Опция обновления будет останавливать сервер, запускать обновление через SteamCMD и запускать сервер.


    ./kfserver update

    Для перезапуска сервера при обновлении используют update-restart. Рекомендуется перезапускать сервер когда обновление завершено, что бы применить обновления.

    ./kfserver update-restart

    Проверка сервера:
    Можно использовать опцию проверки сервера при обновлении сервера.


    ./ksserver validate

    Для перезапуска сервера после проверки используйте следующую команду:

    ./kfserver validate-restart

    Запуск при загрузке ОС:
    Для запуска сервера при загрузке ОС добавьте следующую команду в файл rc.local


    nano /etc/rc.local

    Код:
    su - kfserver -c '/home/kfserver/kfserver start'
    
    Мониторинг сервера:
    Скрипт может контролировать сервер, что бы убедиться, что он он-лайн. Если сервер уйдет в офф-лайн, скрипт будет пытаться запустить его снова.


    ./kfserver monitor

    Примечание: Смотри раздел "Автоматизация" для автоматического запуска монитора.
    Плагин улучшенного мониторинга:
    Плагин добавляет функционал в стандартную систему мониторинга.

    gsquery.py скрипт-запрос серверу, что бы увидеть, отвечает ли он. Если не отвечает то сервер будет перезапущен.

    Это особенно полезно, если процесс сервера запущен, но сервер висит.

    Установка плагина:
    Скачайте скрипт плагина туда же, куда и скрипт управления сервером.

    wget http://danielgibbs.co.uk/dl/gsquery.py

    и сделайте его исполняемым

    chmod +x gsquery.py

    Для проверки запустите

    ./kfserver monitor

    и он покажет, что gsquery.py найден.

    Режим отладки:
    Используйте режим отладки если возникли проблемы с сервером. Отладка позволяет увидеть результаты прямо на Ваш терминал тем самым позволяя диагностировать любые проблемы с сервером.

    ./kfserver debug

    Данные о сервере:
    Если вам нужно увидеть все основные данные о сервере, можно использовать следующую команду:


    ./kfserver details

    Вам будут предоставлены следующие данные:
    • имя сервера
    • порты сервера
    • адрес WebAdmin
    • логин WebAdmin
    • пароль WebAdmin
    Это может быть полезно, если вы забыли пароль от WebAdmin.

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

    ./kfserver console

    Для выхода из консоли нажмите “CTRL+b d”.
    Примечание: при нажатии "CTRL+c” сервер будет остановлен.

    Резервирование:
    Резервирование позволяет вам создать полный GZIP архив всего сервера.

    Это сделано, что бы позволить вам сделать резервную копию сервера перед внесением изменений, во избежание проблем.


    ./kfserver backup

    Обратите внимание: это не предназначено для автоматического резервного копирования.

    WebAdmin:
    Вы можете получить доступ к вебинтерфейсу сервера и вносить свои изменения.

    http://127.0.0.1:8075

    Сжатие карт:
    используя данную функцию вы можете сжимать все карты в формат uz2 и их будут быстрее скачивать. Поместите все пользовательские карты в каталог с картами сервера. Запустите:

    ./kfserver map-compressor

    и начнется процесс сжимания. Директория сжатых карт по умолчанию - "Maps-Compressed" в домашней папке пользователя.

    Автоматизация:

    Вы можете использовать Cronjobs что бы автоматизировать процесс обновления и мониторинга сервера. Данный процесс можно запускать как от рута, так и от пользователя "kfserver".

    Обновление сервера:
    Обновление сервера каждый день в 5 утра
    Для рута:

    crontab -e

    Код:
    0       5       *       *       *  su - kfserver -c '/home/kfserver/kfserver update-restart' > /dev/null 2>&1
    
    Для пользователя kfserver:


    crontab -e

    Код:
    0       5       *       *       *  /home/kfserver/kfserver update-restart > /dev/null 2>&1
    
    Мониторинга сервера:
    Для рута:


    crontab -e

    Код:
    */5       *       *       *       *  su - kfserver -c '/home/kfserver/kfserver monitor' > /dev/null 2>&1
    
    Для пользователя kfserver:


    crontab -e

    Код:
    */5       *       *       *       *  /home/kfserver/kfserver monitor > /dev/null 2>&1
    
    Конфигурирование:
    ВНИМАНИЕ: Для более подробной информации смотри "Часто задаваемые вопросы" по ссылке ниже.
    http://danielgibbs.co.uk/scripts/faqs/
    Существуют и другие веб-сайты, которые могут предоставить помощь.

    Назначение параметров запуска сервера:
    Если вам нужно настроить параметры запуска сервера, нужно изменить переменную "PARMS" в разделе "Start Variables" в скрипте.


    parms="server ${defaultmap}?game=KFmod.KFGameType?VACSecured=true -nohomedir ini=${ini} log=${logfile}"

    Файл конфигурации:
    Сервер имеет свой собственный файл конфигурации, который позволит вам редактировать различные параметры.
    Что бы его найти воспользуйтесь командой


    ./kfserver details

    По умолчанию "/home/kfserver/serverfiles/System/kf-server.ini"

    Порты по умолчанию:

    7707 UDP (Game Port)
    7708 UDP (Query Port)
    7717 UDP (GameSpy Query Port)
    20560 UDP (Steam Port)
    28852 TCP/UDP (Master Server Port)
    8075 TCP (WebAdmin Port)

    Если GamePort изменен на 100, то меняем порты Query Port, GameSpy Query Port, Master Server port по аналогии. К примеру:


    7808 UDP (Game Port)
    7809 UDP (Query Port)
    7818 UDP (GameSpy Query Port)
    28952 TCP/UDP (Master Server Port)

    Порт для WebAdmin меняем на любой удобный, а порт от Steam не трогаем (незачем).

    Как правило это нужно для использования нескольких серверов на одной системе.
    В kf-server.ini можно изменить следующие значения:
    Игровой порт:

    Port=7707

    GameSpy порт:

    OldQueryPortNumber=7717

    WebAdmin порт:

    ListenPort=8075

    Остальные значения должны изменится автоматически.

    Запуск нескольких серверов:
    Можно запускать несколько экземпляров сервера. Есть несколько методов в зависимости от того, как вы хотите настроить сервер.

    Отдельная установка (просто):

    Повторите процесс установки с другим именем пользователя и изменив порты в скрипте.
    Создать пользователя kfserver2

    adduser kfserver2
    passwd kfserver2
    su - kfserver2

    и продолжить с шага "Установка".

    Запуск из одной папки (сложнее):

    Скопируйте и переименуйте скрипт:

    cp kfserver kfserver2

    Редактируйте kfserver2:

    nano kfserver2

    измените имя службы

    servicename="kf-server2"

    Измените порты сервера.

    Скопируйте и переименуйте файл конфигурации сервера:

    cp ./serversiles/System/kf-server.ini ./serversiles/System/kf-server2.ini

    Измените новый конфигурационный файл, как вам удобно.

    Запуск от рута:
    Скрипт не будет работать от рута и выдаст ошибку, если вы попробуете. Это сделано для безопасности и избежания проблем с правами доступа к файлам. Например, если вы запустите обновление с правами рута, то все измененные файлы будут принадлежать руту. Что значит пользователь kfserver не сможет их использовать.

    Полезные ресурсы:
    Полный список полезных ресурсов можно найти на странице часто задаваемых вопросов.
    http://danielgibbs.co.uk/scripts/faqs/

    [hr]

    На этом перевод окончен. От себя добавлю, что я опустил некоторые функции, так как там требовалось глубокое знание системы и использование сложных настроек, не связанных с сервером Killing Floor. Так же добавлю, что несоклько функций тестировал на Ubuntu 12.04.

    Вот и все, всем удачи!
     
    AkycTuk, Flame, ЛОХМАТЫЙ и 2 другим нравится это.
  2. H1rako

    H1rako Соучастник

    Если все нормально, прошу закрепить тему в шапке.
     
  3. BAHO

    BAHO Fresh Meat

    Проснутся - закрепят :)
     
    Killing-Shpilli и H1rako нравится это.
  4. H1rako

    H1rako Соучастник

    Ребята, активно комментируем, мне важно знать ваше мнение =)
    Задавайте вопросы, попробую ответить.
     
  5. Proton

    Proton Игровой администратор

    Кто сейчас что может прокомментировать?
    На эту статью большинство смотрят как динозавр на космический корабль.
     
  6. H1rako

    H1rako Соучастник

    но тут же все предельно просто. Я тестил с английской версии статьи. А эту подогнал под наше понимание. Сделал несколько правок и не упомянул функцию "Email Notify". Сейчас начал баловаться с Cherokee и WebFS в замену HFS на Винде. Оба работают, но трудности настройки есть.
     
    Flame и ЛОХМАТЫЙ нравится это.
  7. H1rako

    H1rako Соучастник

    #!/bin/bash
    #Made by Alex Жив

    #mkdir ./log/addfiles для хранения логов
    #mkdir ./temp для временных файлов
    #mkdir ./webfs для хранения сжатых файлов (использую webfs для быстрого скачивания)
    #mkdir ./wget для скачивания файлов на сервер

    LOGS='/home/kfserver/log/addfiles'
    MHOME='/home/kfserver'
    UCC='/home/kfserver/serverfiles/System'

    ###############################################################################################

    rm -fv $MHOME/temp/* #удаление всего с папки temp

    ###############################################################################################

    #ukx - server animations
    #itf - server forsefeedback
    #ico - server help
    #pdf - server help
    #bmp - server help
    #ka - server karmadata
    #rom - server maps
    #uax - server sounds
    #ogg - server sounds
    #usx - server staticmeshes
    #u - server system
    #int - server system
    #upl - server system
    #ucl - server system
    #so - server system
    #ini - server system
    #utx - server textures
    #gif - server web images
    #jpg - server web images
    #htm - server web serveradmin
    #inc - server web serveradmin
    #css - server web serveradmin

    ###############################################################################################

    echo -n "============================== `date` ==============================" | tee -a $LOGS/*.log
    echo

    ###############################################################################################
    #Добавление файлов на сервер и в папку temp для следующего сжатия

    for WGETFILES in `find ./wget/ -type f`; do
    if [ "${WGETFILES##*.}" = "ukx" ]; then
    cp $WGETFILES $MHOME/serverfiles/Animations/
    cp $WGETFILES $MHOME/temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/ukx.log

    elif [ "${WGETFILES##*.}" = "itf" ]; then
    cp $WGETFILES ./serverfiles/ForceFeedBack/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/itf.log

    elif [ "${WGETFILES##*.}" = "ico" ]; then
    cp $WGETFILES ./serverfiles/Help/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/ico.log

    elif [ "${WGETFILES##*.}" = "pdf" ]; then
    cp $WGETFILES ./serverfiles/Help/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/pdf.log

    elif [ "${WGETFILES##*.}" = "bmp" ]; then
    cp $WGETFILES ./serverfiles/Help/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/bmp.log

    elif [ "${WGETFILES##*.}" = "ka" ]; then
    cp $WGETFILES ./serverfiles/KarmaData/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/ka.log

    elif [ "${WGETFILES##*.}" = "rom" ]; then
    cp $WGETFILES ./serverfiles/Maps/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/rom.log

    elif [ "${WGETFILES##*.}" = "uax" ]; then
    cp $WGETFILES ./serverfiles/Sounds/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/uax.log

    elif [ "${WGETFILES##*.}" = "ogg" ]; then
    cp $WGETFILES ./serverfiles/Sounds/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/ogg.log

    elif [ "${WGETFILES##*.}" = "usx" ]; then
    cp $WGETFILES ./serverfiles/StaticMeshes/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/usx.log

    elif [ "${WGETFILES##*.}" = "u" ]; then
    cp $WGETFILES ./serverfiles/System/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/u.log

    elif [ "${WGETFILES##*.}" = "int" ]; then
    cp $WGETFILES ./serverfiles/System/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/int.log

    elif [ "${WGETFILES##*.}" = "upl" ]; then
    cp $WGETFILES ./serverfiles/System/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/upl.log

    elif [ "${WGETFILES##*.}" = "ucl" ]; then
    cp $WGETFILES ./serverfiles/System/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/ucl.log

    elif [ "${WGETFILES##*.}" = "so" ]; then
    cp $WGETFILES ./serverfiles/System/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/so.log

    elif [ "${WGETFILES##*.}" = "ini" ]; then
    cp $WGETFILES ./serverfiles/System/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/ini.log

    elif [ "${WGETFILES##*.}" = "utx" ]; then
    cp $WGETFILES ./serverfiles/Textures/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/utx.log

    elif [ "${WGETFILES##*.}" = "gif" ]; then
    cp $WGETFILES ./serverfiles/Web/images/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/gif.log

    elif [ "${WGETFILES##*.}" = "jpg" ]; then
    cp $WGETFILES ./serverfiles/Web/images/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/jpg.log

    elif [ "${WGETFILES##*.}" = "htm" ]; then
    cp $WGETFILES ./serverfiles/Web/ServerAdmin/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/htm.log

    elif [ "${WGETFILES##*.}" = "inc" ]; then
    cp $WGETFILES ./serverfiles/Web/ServerAdmin/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/inc.log

    elif [ "${WGETFILES##*.}" = "css" ]; then
    cp $WGETFILES ./serverfiles/Web/ServerAdmin/
    cp $WGETFILES ./temp/
    echo [INFO] Files added: $WGETFILES | tee -a $LOGS/css.log

    fi
    done

    ###############################################################################################
    #Само сжатие
    cd $MHOME/serverfiles/System/
    for FILES in `ls "${HOME}/temp"` ; do
    ./ucc-bin compress $MHOME/temp/${FILES} --nohomedir
    done

    ###############################################################################################
    #Перенос файлов на файловый сервер
    mv -fv $MHOME/temp/*.uz2 $MHOME/webfs
    #Очистка папки temp
    rm -fv $MHOME/temp/*
    Закончил баловство. На скорую руку сделал скриптец для добавления файлов на сервер, сжатия и добавления файлов в каталог файлового сервера с ведением логов. Мне он заменяет полностью команду ./kfserver map-compressor :happy:

    Кстати, в ./kfserver map-compressor не работает перенос файлов в каталог Maps-compressed. что бы заработал надо убрать все кавычки в строке

    mv -fv "${filesdir}/Maps/*.uz2" "${compressedmapsdir}"

    превратив ее в
    Код:
    mv -fv ${filesdir}/Maps/*.uz2 ${compressedmapsdir}
    
     
    ЛОХМАТЫЙ и Flame нравится это.