Запуск серверов с новым тулчейном под старыми дистрибутивами Linux

Тема в разделе "Игровые серверы", создана пользователем He||oween, 15 мар 2017.

  1. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Доброе утро, долгое время не мог оставлять сообщения на форуме.
    Runtime написан под Debian Ubuntu и пришлось править под Centos 7
    После установки Steam-Runtime не знаю что делать дальше для запуска сервера.
    Мой скрипт запуска. Правильно я вставил код в него или не так?
    #!/bin/sh
    ################################################################
    #
    #
    #steamrt=/home/steam-runtime-master/runtime
    export LD_LIBRARY_PATH="bin:$steamrt/usr/lib"
    LD="$steamrt/usr/lib/ld-linux.so.2"
    "$LD" ./srcds_linux "[email protected]"
    cd /home/tf2-4/
    $LD ./srcds_run -console -game tf +ip 111.222.333.444 -port 27015 +map pl_goldrush +maxplayers 32 -debug

    Скорее нет, так как выдает ошибку при запуске
    ./start-test.sh: line 8: 32356 Недопустимая инструкция "$LD" ./srcds_linux "[email protected]"
    ./srcds_run: error while loading shared libraries: ./srcds_run: invalid ELF header

    Еще момент который на Github описан не понятен, что с этим делать как и куда прописывать? Или может при установке runtime автоматом ставится?
    ~/.local/share/Steam$ STEAM_RUNTIME=~/rttest ./steam.sh
    Running Steam on ubuntu 14.04 64-bit
    STEAM_RUNTIME has been set by the user to: /home/username/rttest
  2. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Не совсем так. На самом деле Steam Runtime - это набор статически слинкованных библиотек, взятых из Ubuntu.

    Нужно убрать символ # перед переменной иначе вся строка считается комментарием.

    Размещать рантайм лучше всего в каталоге того же пользователя, от которого запускается сервер.

    Эту строку выкинуть.

    Кавычки перед "$LD" обязательны. К тому же, ЕМНИП, бинарник запуска выделенного сервера называется не srcds_run, а srcds_linux. Это нужно обязательно проверить.

    Также для запуска потребуется установить набор 32-битных библиотек. Под CentOS:
    Код:
    sudo yum install glibc.i686 libstdc++.i686
  3. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Поправил все, только если раскоментировать #steamrt=/home/steam-runtime-master/runtime
    выдает ошибку.
    ./start-test.sh: line 8: /home/steam-runtime-master/runtime/usr/lib/ld-linux.so.2: Нет такого файла или каталога

    ld-linux.so.2 лежит в папке /usr/lib/

    Сервера до обновления работали несколько лет. Пакеты все установлены. проблемы только от runtime
  4. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Нужно проверить правильность пути. В примере Valve вместо usr/lib/ld-linux.so.2 используется usr/lib32/ld-linux.so.2.

    Это системная библиотека. Для запуска сервера необходима та, что находится внутри Steam Runtime.
  5. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Нет там ни в корне, ни в других подпапках.
    Даже по ссылке https://github.com/ValveSoftware/steam-runtime нет там этого файла.
  6. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Разумеется. Нужно внимательно следовать инструкции, которая там присутствует. В данном репозитории находятся скрипты для сборки Steam Runtime на сервере. Нужно воспользоваться ими для его получения.
  7. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Там нет инструкции, а то что есть на англ. сложно разобрать, поэтому в поддержку и обратился.
    Для установки нужно скачать папку https://github.com/ValveSoftware/steam-runtime и запустить setup_chroot.sh
    Куча пакетов установлена была после запуска, только все устанавливается в систему, а в папке runtime ничего не изменилось.
    Или еще что-то нужно скачать и запустить? Надеюсь что не буду послан по ссылке с фразой "читай и разбирайся самостоятельно".
  8. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Код:
    usage: build-runtime.py [-h] [-r RUNTIME] [-b] [-d] [--source] [--symbols]
    [--repo REPO] [-v]
    
    optional arguments:
    -h, --help show this help message and exit
    -r RUNTIME, --runtime RUNTIME
    specify runtime path
    -b, --beta build beta runtime
    -d, --debug build debug runtime
    --source include sources
    --symbols include debugging symbols
    --repo REPO source repository
    -v, --verbose verbose
    Нет. Запускать нужно build-runtime.py с параметром -r ПУТЬ. В указанном каталоге появится собранный из исходников Steam Runtime.
  9. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    у меня Linux Centos 7
    выдает
    Traceback (most recent call last):
    File "./build-runtime.py", line 13, in <module>
    from debian import deb822
    ImportError: No module named debian
  10. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Это нормально, т.к. данный скрипт следует запускать внутри создаваемого другим скриптом (setup_chroot.sh) chroot откружения.
  11. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    нужно прописать что-то в setup_chroot.sh?
    В первые строки?

    SCRIPT=$(readlink -f "$0")
    SCRIPTNAME=$(basename "$SCRIPT")
    LOGFILE=/tmp/${SCRIPTNAME%.*}-$(uname -i).log
    CHROOT_PREFIX="steamrt_scout_"
    CHROOT_DIR="/var/chroots"
    BETA_ARG=""
    COLOR_OFF="\033[0m"
    COLOR_ON="\033[1;93m"
  12. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Как оказалось, этот скрипт предназначен исключительно для Debian/SteamOS и для других дистрибутивов не нужен вообще.

    Для CentOS необходимо сначала установить пакеты python-debian и dpkg, затем использовать скрипт build-runtime.py с параметром -r ПУТЬ, как написано выше. Steam Runtime будет скачан и установлен в указанный каталог. Только что проверил, правда не в CentOS, а в Fedora - работает нормально.
  13. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    значит setup_chroot.sh запускать не нужно для Centos?
    пакеты python-debian и dpkg установил.
    запустил build-runtime.py -r /home/runtime

    В папке /home/runtime закочались
    ../amd64/
    ../i386/

    внутри каждой есть папки
    ../etc
    ../installed
    ../lib
    ../selinux
    ../usr

    В загруженных папках нет файла ld-linux.so.2
    на которой ссылается команда в строке запуска игрового сервера.
    LD="$steamrt/usr/lib/ld-linux.so.2"

    Мой скрипт запуска сервера
    #!/bin/sh
    ################################################################
    #
    #
    steamrt=/home/
    export LD_LIBRARY_PATH="bin:$steamrt/usr/lib"
    LD="$steamrt/usr/lib/ld-linux.so.2"
    cd /home/tf2-4/
    "$LD" ./srcds_run -console -game tf +ip 111.222.333.444 -port 27015 +map pl_goldrush +maxplayers 32 -debug
    Выдает такую ошибку
    ./start-test.sh: line 8: /home/runtime/usr/lib/ld-linux.so.2: Нет такого файла или каталога

    Если в строке запуска оставить так
    steamrt=/
    чтобы ссылался на системную папку /usr/lib/ там есть файл ld-linux.so.2
    ты выдает
    ./srcds_run: error while loading shared libraries: ./srcds_run: invalid ELF header
  14. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Если вдруг чего-то нет, то можно загрузить соответствующий пакет из репозиториев Ubuntu 12.04 (Steam Runtime использует именно эту версию), а затем распаковать DEB-пакет и из data.tar.gz достать нужные библиотеки (скрипт build-runtime.py делает то же самое).

    Нужна версия из Steam Runtime.
  15. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Последнее редактирование: 23 апр 2017
  16. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    Должен был быть весь на самом деле.

    Нужно качать i386 (32-битную) версию:
    Код:
    http://security.ubuntu.com/ubuntu/pool/main/e/eglibc/libc6_2.15-0ubuntu10.18_i386.deb
    Если распаковать утилитой ar, внутри три файла: control.tar.gz, data.tar.gz и debian-binary:
    Код:
    [[email protected] downloads]$ ar vx libc6_2.15-0ubuntu10.18_i386.deb
    x - debian-binary
    x - control.tar.gz
    x - data.tar.gz
  17. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Все скачал, разархивировал в папку runtime/i386/
    steamrt=/home/runtime/
    export LD_LIBRARY_PATH="bin:$steamrt/usr/lib/"
    LD="$steamrt/i386/lib/ld-linux.so.2"
    cd /home/tf2-4/
    "$LD" ./srcds_run -console -game tf
    все-равно пишет ./srcds_run: error while loading shared libraries: ./srcds_run: invalid ELF header
  18. V1TSK

    V1TSK EasyCoding Team

    Сообщения:
    22.263
    На Reddit пишут, что запускать сервер следует исключительно через скрипт run.sh, т.е. так:
    Код:
    run.sh srcds_run -console -game tf
    Данный скрипт должен быть размещён в каталоге с рантаймом. Всё остальное уже не требуется, скрипт сделает всё автоматически.

    Также пишут, что для запуска выделенного сервера TF2 после последнего обновления достаточно сделать:
    Код:
    sudo yum update
    sudo yum install libstdc++.so.6 libcurl.i686
    sudo ln -s libcurl.so.4 /usr/lib/libcurl-gnutls.so.4
    После этого запускать сервер можно как обычно (старым способом без каких-либо рантаймов).
  19. Oleg.1984

    Oleg.1984 Новичок

    Сообщения:
    10
    Спасибо!
    По факту установил пакеты python-debian и dpkg
    и сделал так sudo ln -s libcurl.so.4 /usr/lib/libcurl-gnutls.so.4
    Главное без всяких runtime =)
  20. Alice.bnd

    Alice.bnd И всея админ

    Сообщения:
    256
    Советую wrench для запуска и администрирования серверов.