Создание сервера на Linux

Тема в разделе "Linux", создана пользователем mangust, 16 фев 2011.

  1. mangust

    mangust Соучастник

    Всем доброго времени суток.

    Как уже писалось ранее, у нас был небольшой опыт в создании выделенного сервера для Killing Floor на windows платформе. После некоторых тестов было принято решение о переводе сервера на *nix платформу. Вот именно о создании выделенного сервера, Killing Floor, на данной платформе я и постараюсь рассказать.

    Для создания сервера использовался дистрибутив Debian Lenny. После установки Debian, в корне файловой системы, был создан каталог с именем "KFServer". Все дальнейшие действия будут производится в этой папке.

    Первым делом нам необходим пакет "hldsupdatetool.bin", который можно скачать по адресу http://storefront.steampowered.com выполнив следующую команду:
    Код:
    wget http://storefront.steampowered.com/download/hldsupdatetool.bin
    
    После того, как вы скачаете пакет, ему необходимо дать разрешение на исполнение. Для этого необходимо выполнить команду:
    Код:
    chmod +x hldsupdatetool.bin
    
    Следующим этапом запускаем hldsupdatetool.bin командой
    Код:
    ./hldsupdatetool
    , будет скачен пакет с именем "steam.bin". Осуществляем первый запуск steam без каких либо параметров
    Код:
    ./steam
    . Steam проведет свои необходимые тесты и закончит свою работу.

    После проведения первого запуска steam, запускаем его с параметрами -command update -game killingfloor -dir .
    Код:
    ./steam -command update -game killingfloor -dir .
    будет скачена последняя версия выделенного сервера Killing Floor.

    В каталоге "System" должен будет находится файл с именем "start" или что то такое, точно не помню, поскольку использовал уже готовый "bat" файл с сервера на windows, который назывался "start_KFS".

    После этого сервер готов к запуску но, он будет позволять подключаться только лицензионным steam клиентам. Следующим этапом нам необходимо сделать так, что бы наш сервер позволял подключаться, как лицензионным, так и ломанным steam клиентам. Для этого качаем эмулятор steam, Эмулятор steam, который был найден в интернете в свободном распространении. Пароль для архива "steamkf"

    В архиве содержится инструкция по установке эмулятора но, приведу ее вариант только для серверов Killing Floor:

    A)[Server Root]
    Корень папки с игровым сервером, не путайте с корнем операционной системы/локального диска.
    Вы можете определить ее по наличию следующих файлов:

    UT2.5(KF/RO):
    Файлов нет, но есть каталоги "maps","sounds","reslists","textures" и самое главное - "system".

    B)[Release Archive]
    Корень .7z/.rar файла, в котором поставляется данный продукт.


    C)
    %ТИП_ВАШЕЙ_ОС%
    Это подразумевает следующее:
    Для "Microsoft Windows" это будет "WIN32" папка.
    Для "Linux" и других *NiX-подобных ОС, с поддержкой исполняемых Linux ELF файлов(Например BSD'семейство) будет "LINUX".

    D) UT2.5 - Unreal Engine v2.5 был создан корпорацией Epic Games для Unreal Tournament 2004. Используется в некоторых новых сетевых играх, таких как Killing Floor(KF) и Red Orchestra(RO) от корпорации Tripwire Tech.

    №1 Установка системы инициализации

    Скопируйте файл [Release Archive]\%YOUR_OPERATING_SYSTEM_TYPE%\INIT\STEAM3(UT2.5) [steam_api.dll[Windows] /libsteam_api_linux.so[Linux]] в [Server Root]\system | [Server Root]/system.

    №2 Установка eSteamation SCI
    Скопируйте файл [Release Archive]\%ТИП_ВАШЕЙ_ОС%\SCI\[eST-SCI.dll/libeST_SCI.so] в каталог [Server Root]\system | [Server Root]/system.

    №3 Отмена колбэк VAC (папка в архиве uni-gmsrv-up-2.8-FiNAL)
    Скопируйте ugsp86.exe/ugsp_i686(Или ugsp64.exe/ugsp_amd64 если у вас x64 ОС) в папку [Server Root]\System | [Server Root]/System.
    Используйте OpenUGSP/VUP следующим образом(Приложение запускается через консоль, например "cmd" в Windows): ugsp86.exe -esteamation-prep engine.dll ./ugsp_i686 -esteamation-prep ucc-bin-real

    №4
    Создайте папку [Server Root]\cfg на сервере.
    ВАЖНО: Эта папка будет использоваться для конфигурационных файлов eSTEAMATiON, а также eST-SCI BINCACHE и используемых ею небольших кеш файлов оптимизации запуска движка и интеграции eST-SCI. Создайте эту папку, если вы не хотите ждать 30-ти секундной загрузки вашего игрового сервера, в случае рестарта ...

    №5
    1) Скопируйте 2 .cfg[Windows]/.conf[Linux] файла из [Release Archive]\%ТИП_ВАШЕЙ_ОС%\CFG\ в [Server Root]\cfg и отредактируйте их на свое усмотрение.
    ВАЖНО: Скопируйте rej-msgs.cfg | rej-msgs.conf если вы хотите использовать собственные сообщения отказа в доступе на сервер и впишите туда нужную вам информацию.

    2) При редактировании esteamation.cfg[Windows]/esteamation.conf[Linux] читайте секции параметров, отнеситесь к редактированию конфига очень осторожно.
    Доступные настройки описаны как на Русском, так и на Английском языках.

    №6
    Откройте ваш ФАЙЛ конфига esteamation.cfg[Windows]/esteamation.conf[Linux].
    Убедитесь, что опция ServerNeedsSTEAM2AuthenticationSubsystem имеет значение True

    №7
    1) Зайдите на сайт http://code.google.com/p/tzdata/ в вашем Web броузере и слейте последний доступный архив tzdata_%VER%.zip
    2) Откройте архив в вашем любимом архиваторе.
    3) Внутри архиве следуйте по дереву папкок: tzdata/xml
    4) Найдите там файл PST8PDT.xml и извлеките его в вашу папку cfg(Ту самую где хранится конфиг eSTEAMATiON).
    5) Вот и всё - Дальше eST уже всё сделает сам. Не забывайте периодически обновлять искомый файл так база TZ обновляется несколько раз в год

    Постарался изложить все как могу и умею...
    При написании данного поста были использованы материалы из файла конфигурации eSteamation
     
    Eletilohlor, Flame, Serega и ещё 1-му нравится это.
  2. F4TAL1ST

    F4TAL1ST ---

    Так-так-так! Всем, кто создает сервера, обратить внимание на пост, который указан выше. Хочу поблагодарить автора за проделанную работу, а также спросить мнения серверных гуру - действительно ли работает ТАКОЙ сервер, если ДА, то я с большой радостью прикреплю данный топ, в виде мануала :)
     
  3. mangust

    mangust Соучастник

    Спасибо большое за такую высокую оценку. Сервер собранный по такому прицепу работает на 83.219.139.97:7707 прошу в гости проверить работоспособность.
     
  4. mangust

    mangust Соучастник

    Прошу прощения но, есть очень важный вопрос с которым я не смог разобраться сам. Посоветуйте пожалуйста, как сделать что бы сервер автоматически перезапускался после остановки из-за ошибки?
     
  5. scar

    scar Бандит

    На английском написано поднятие сервера на Linux, в конце скрипт рестарта
    http://pastebin.com/ntLkHZZs
     
  6. mangust

    mangust Соучастник

    Спасибо большое, довольно познавательная статья. Очень понравилась информация, как запускать несколько серверов с различными ini файлами.
    По поводу проверки, работает сервер или нет, есть мысля сделать это все через cron. Как только будет положительный результат выложу как это все делалось.
     
  7. mangust

    mangust Соучастник

    Всем доброго времени суток. Закончили проработку вопроса авто запуска и автоматического мониторинга состояния сервера.

    Для автоматического старта сервера при запуске компьютера или его рестарте, по каким либо причинам, был установлен "screen" и напишем следующий скрипт и сохраним его под именем KFautostart (только для примера) в каталог /etc/init.d/:

    Код:
    #! /bin/sh
    PATH=/usr/bin:/usr/sbin:/bin:/sbin
    SCREEN_NAME="имя процесса которое ему будет присвоено"
    GAME_PATH="путь до папки system вашего сервера" (например: /home/KF1/system)
    start()
    {
    cd $GAME_PATH && screen -AmdS $SCREEN_NAME ./ucc-bin server [параметры запуска вашего сервера со всеми необходимыми данные]
    }
    stop()
    {
    PID=`ps fax | grep $SCREEN_NAME | grep SCREEN | awk '{ print $1 }'`
    kill $PID
    }
    restart()
    {
    stop
    start
    }
    case "$1" in
    start)
    start
    ;;
    stop)
    stop
    ;;
    restart)
    stop
    start
    ;;
    *)
    echo $"Usage: $0 {start|stop|restart}"
    exit 1
    esac
    exit 0 
    
    Даем ему разрешение на запуск, т.е. делаем его исполняемым. После этого набираем команду:

    Код:
    update-rc.d [имя скрипта] defaults
    Для автоматического мониторинга состояния сервера был использован планировщик "cron", для этого создаем папку с именем monitoring в коталоге "home" (это только для примера приведены такие названия каталогов). Пишем скрипт следующего содержания и сохраняем его под именем KFmonitiring:

    Код:
    #!/bin/bash
    cd /etc/init.d
    SCREEN_NAME="имя процесса которое было присвоено в скрипте авто запуска"
    PID=`ps fax | grep $SCREEN_NAME | grep SCREEN | awk '{print $1}'`
    if [ "${#PID}" == 0 ]; then echo ./KFautostart start; echo "Servert now start"; fi
    
    Пишем еще один скрипт следующего содержания и сохраняем его под именем KFmonitiring_crond в туже папку, что и KFmonitiring:

    Код:
    SHEL=/bin/bash
    MAILTO=root
    0-59 * * * * /home/monitoring/KFmonitiring
    
    В консоле пишем
    Код:
    crontab /home/monitoring/KFmonitoring
    Если все сделано правильно, cron будет проверять состояние сервера каждую минуту и в случае отсутствия такого сервера в системе будет его запускать.

    Выражаю отдельную благодарность "scar" за предоставленную ссылку на англоязычный ресурс.
     
    shiogorat нравится это.
  8. Flack

    Flack Солдат

    ..что-бы избежать геморроя с отвязкой сервера от stem, описанный топикстартером, могу дать измененный файл steamclient
    (правда, такой вариант не проверялся на работоспособность с лицензионной версией клиента)
     
  9. mangust

    mangust Соучастник

    Доброго времени суток. Выложи свой измененный steamclient. Посмотрим, проверим по возможности. О результатах проверки отпишемся.
     
  10. Ren

    Ren Новенький

    Я проблему автоподнятия решил проще:
    задание в cron +
    Код:
    #!/bin/sh
    #clear
    if [[ `screen -ls |grep имя_screen` ]]
    then 
    echo
    else
    Команда запуска или скрипт
    fi
    
    Такс, несколько вопросов по мануалу:
    1. папка с сервером в корне ФС?! Это прямо в / что ли?! Если так, то это более чем нерационально.
    2. почему выбран именно eSteamation, когда прекрасно работает RevEmu?

    И да, сервер KF отлично работает под Linux. Есть живые примеры под CentOS 5 и Ubuntu Server 10.10.
     
  11. Darwin

    Darwin Бандит

    Мангусту плюсую.
    Годное руководство.


    зы.
    Кто то поднимал сервак на центосе?
    Респектую этому человеку.
     
  12. mangust

    mangust Соучастник

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

    По поводу твоих вопросов:
    1. Папку с сервером каждый может положить куда ему угодно, в мануале приведен пример. Человек тоже должен иногда думать своей головой а не брать и использовать все готовое....
    2. Просто мне первым попался eSteamation, вот его и поставил. RevEmu был испробован на виртуальном сервере, работает но, не захотелось что либо менять....

    Наш сервак поднят на Debian.

    Darwin, спасибо.
     
  13. rush155

    rush155 Новенький

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

    Код:
    root@life:~/kf/system# ./ugsp_i686 -esteamation-prep ucc-bin-real
    Welcome to ViTYAN's Open Universal GameServer Patch(OpenUGSP) v2.8
    
    Currently supported game types: id Software Enemy Territory - Quake Wars,
                                    Valve Source 2007 Original (Protocols 9-14)(TF2/DOD:S),
                                    Valve Source 2007 U1 (Protocol 36)(L4D/L4D2),
                                    Valve Source(HL2:DM/CSS),
                                    Valve GoldSrc Classic Listen Engines,
                                    Valve SteamWorks GoldSrc(CS 1.6/TFC/OP/DOD1/HL1/HL:DM),
                                    Valve SteamClient,SteamUI,GameUI and Server Libs,
                                    Infinity Ward Call Of Duty 4,
                                    Epic Games Unreal Tournament 3,
                                    Unreal Engine 2.5 Based Games[LIMITED],
                                    eSTEAMATiON Preparation mode.
    
    Release date: 26.04.2010 08:27 PM
    Know who holds the power...
    
    Preparing to handle 1 file... Output to different destinations(-o) is DISABLED
    
    Loading file ucc-bin-real into memory...  SUCCEEDED
    Analyzing file format ... SUCCEEDED
    Destination Operating System: Unix-Like Operating System
    
    
    Trying to detect game type from binary:
    
    
    ===================================== UGSP ===================================
    
                                   Unreal Engine 2.5
    
    ===================================== ViTYAN =================================
    
    
    Performing job...
    
    
    Looking for STEAM3 Deny handler check ...
            Not Found
    
    
    Saving changes to file... DISABLED(Patching Failed)
    
    
    
    PATCHING OF FILE #1/1 HAS BEEN FAILED. CONTACT THE AUTHOR FOR FURTHER SUPPORT
    
    
    
    PATCHING OF ALL FILES HAS BEEN FAILED. CONTACT THE AUTHOR FOR FURTHER SUPPORT
     
  14. Flack

    Flack Солдат

    выкладываю steam_client по просьбам мемберов
     

    Вложения:

    Coolek нравится это.
  15. mangust

    mangust Соучастник

    Сегодня проверю.
     
  16. rush155

    rush155 Новенький

    Это от revEmu у меня такой уже стоит.
     
  17. HauS

    HauS Соучастник

    ничего не понял к сожелению =\

    вопрос это надо делать уже все на OC Linux?
     
  18. Flack

    Flack Солдат

    именно, собственно о нем и идет речь
     
  19. HauS

    HauS Соучастник

    блин беспонтово... у меня просто OC windows, нужно переделать под linux что бы взяли на хостинг =\ не подскажешь можно ли это сделать на windows?
     
  20. Flack

    Flack Солдат

    не надо ничего переделывать качаешь 1 файл кидаешь на хостинг (кстати, хостинг должен давать нормальный шелл а не FTP доступ, и скорость доступа - 1 Мбт/с на 4-6 чел - минимум, иначе - подлагивать может) и запускаешь его там как в мануале написано.