Установка игрового nosteam сервера Counter-Strike 1.6 на Linux Centos 7 через steamcmd

Всем привет, хочу рассказать всем, поделиться свои опытом установки выделенного сервера (dedicated server) старой, но тем не менее всё также как и в давние времена суперпопулярной сетевой игры Counter-Strike 1.6 на операционную систему Linux, а конкретно в моём случае – на Centos 7.

Когда-то раньше игровой сервер Counter-Strike 1.6 ставился на ОС Linux посредством утилиты hldsupdatetool, но с некоторых пор её сменила другая – steamcmd. Вот об установке сервера CS 1.6 с помощью steamcmd я и расскажу сегодня.

Итак, начнём.

Определяемся с местом, куда будем ставить наш сервер, и где он будет в дальнейшем находиться. Например — /games/hlds, создаём соответствующую папку.

Далее заходим в эту папку и скачиваем файл с утилитой steamcmd.

wget http://media.steampowered.com/client/steamcmd_linux.tar.gz

Скачиваем утилиту steamcmd
Фото №1 — Скачиваем утилиту steamcmd

Распаковываем скачанный архив —

tar xvzf имя файла

Распаковываем скачанный архив
Фото №2 — Распаковываем скачанный архив

Архив теперь можно удалить, запускаем появившийся файл steamcmd.sh

Запускаем steamcmd.sh
Фото №3 — Запускаем steamcmd.sh

И тут сразу же у меня вылезла ошибка, говорящая об отсутствии в ОС необходимых библиотек (выделено жёлтым на фото №3) —

[root@localhost hlds]# ./steamcmd.sh

./steamcmd.sh: /games/hlds/linux32/steamcmd: /lib/ld-linux.so.2: bad ELF interpreter: Нет такого файла или каталога

Решение данной проблемы простое —

yum -y install glibc.i686

yum -y install lib32gcc1

Устанавливаем необходимые библиотеки
Фото №4 — Устанавливаем необходимые библиотеки

Дожидаемся, пока процесс скачивания и установки библиотек закончится –

Библиотеки успешно установлены
Фото №5 — Библиотеки успешно установлены

Снова запускаем файл steamcmd.sh. теперь начинается процесс скачивания программы установки сервера HLDS.

Процесс скачивания программы установки сервера HLDS
Фото №6 — Процесс скачивания программы установки сервера HLDS

По окончании загрузки появляется строка авторизации на сервере steam. Входим на него под логином anonymous.

Steam>login anonymous

Авторизуемся на сервере steam
Фото №7 — Авторизуемся на сервере steam

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

Steam>force_install_dir /games/hlds/server

Далее вводим следующую команду, в которой число «90» — это уже конкретно id, говорящий серверу steam, что мы хотим установить именно сервер Counter-Strike 1.6.

app_update 90 validate

Наш сервер Counter-Strike 1.6 успешно закачался
Фото №8 — Наш сервер Counter-Strike 1.6 успешно закачался

Сервер начинает скачиваться, терпеливо ждём. Всего будет скачано около 700 с лишним мегабайт.

Размер скачанного сервера Counter-Strike 1.6
Фото №9 — Размер скачанного сервера Counter-Strike 1.6

Всё, сервер CS 1.6 скачан и установлен. Осталось совсем немного J — запустить его файлом hlds_run, убедиться, что он работает нормально и не падает. На ошибки, появляющиеся в консоли сервера, на данном этапе просто не обращаем внимание.

Запущенный Counter-Strike 1.6
Фото №10 — Запущенный Counter-Strike 1.6

Теперь начинается самое интересное – процесс допиливания сервера, то есть создание стартового скрипта сервера, его конфигурирование, установка различных аддонов и плагинов.

Для запуска сервера Counter-Strike 1.6 на Centos 7 весьма удобно использовать утилиту screen.

Screen — консольная утилита-мультиплексор, предоставляющая пользователю доступ к нескольким сессиям в рамках одной сессии.

Если данная утилита screen у вас не установлена, исправляем это упущение —

yum -y install screen

Далее мы, находясь в папке с сервером, создаём файл запуска сервера —

[root@localhost server]# touch hlds_runme

[root@localhost server]# chmod 755 hlds_runme

Теперь заходим в него для редактирования и вписываем примерно такую строку:

./hlds_run -game cstrike +sv_lan 0 +port 27015 +exec /games/hlds/server/cstrike/server.cfg +map de_dust2 +maxplayers 32

Скажу немного о стартовых параметрах, указанных в этой строке —

-game cstrike – тип вашей игры, counter-strike 1.6 соответственно.

+sv_lan 0 – если данный параметр выставить на 1, значит сервер будет предназначен только для игры по локальной сети, если на 0 – значит наш сервер устанавливается для игры в сети Интернет. При этом на сервер не получится войти никому из игроков с nosteam-клиентом, то есть с пиратской версией игрового клиента. Чтобы исправить этот неприятный момент, надо ставить утилиту dproto (о ней — ниже).

+port 27015 – порт, на котором будет висеть наш сервер.

+exec /hlds/server/cstrike/server.cfg – конфигурационный файл, в котором хранится множество различных параметров, влияющих на работу и свойства игры сервера и который будет загружаться при запуске самого сервера.

Итак – запустили наш сервер созданным файлом hlds_runme, видим примерно следующую информацию —

Protocol version 48

Exe version 1.1.2.7/Stdio (cstrike)

Exe build: 13:12:29 Aug 29 2013 (6153)

STEAM Auth Server

exec /games/hlds/server/cstrike/server.cfg: invalid path.

Server IP address 127.0.0.1:27015

Значит всё нормально. Проблема в том, что так запускать сервер неудобно, ибо он будет постоянно висеть в консоли и мешаться. Этак ненароком мы ещё и выключим потом простым нажатием пары клавиш…

Вот здесь-то нам и пригодится та самая screen. В файле запуска hlds_runme дописываем в начале —

screen -A -m -d -S hlds,

в итоге получается:

screen -A -m -d -S hlds ./hlds_run -game cstrike +sv_lan 0 +port 27015 +exec /games/hlds/server/cstrike/server.cfg +map de_dust2 +maxplayers 32

Теперь наш сервер запускается так же, как и раньше, и сразу прячется в свой screen (экран). Вызвать его после запуска можно командой

screen –x (это при том, что у вас на данный момент запущен на ОС только один скрин, если два и более – при наборе этой же команды выдастся список скринов, которые можно просмотреть). Но в нашем случае он один, и при наборе этой команды мы попадаем в консоль управления своего counter-strike сервера. Посмотрели на работу сервера, сделали, что хотели – набрали

Ctrl+a+d

и ваш сервер снова «спрятался» обратно в скрин, работая там себе тихонько в фоне. Если появится необходимость остановить сервер – зашли так же в его скрин, нажали ctrl+c, готово, сервер будет остановлен.

Теперь я расскажу об установке основных аддонов к игровому серверу Counter-Strike 1.6, без которых в наше время «голый» сервер будет просто неинтересен среднестатистическому игроку. Это связка metamod+amxmodx+dproto.

Осуществляется эта установка в следующем порядке.

Сперва скачиваем metamod – это основа, на которую уже будут ложиться все остальные надстройки и аддоны Counter-Strike.

Качаем последнюю версию тут — http://metamod.org

Amxmodx. Качаем тут http://www.amxmodx.org/ — нам понадобятся архивы под названием AMX Mod X Base для линуха и CounterStrike Addon

Dproto. Качаем, например, тут — http://amxmodmenu.ru/shield/3014-dproto-09534.html

Теперь устанавливаем всё скачанное.

Для этого создаем папку addons в папке cstrike сервера, в ней создаём папку metamod. Кидаем в нее содержимое скачанного архива metamod и здесь же рядом создаём файл plugins.ini.

Далее — в папке cstrike находим и открываем файл liblist.gam, в нём находим внизу строку gamedll_linux, и в ней в кавычки вбиваем путь к библиотеке из скачанного архива metamod —

addons/metamod/metamod_i386.so

Дальше ставим amxmodx — создаем папку addons/amxmodx, кидаем в нее содержимое двух скачанных архивов amxmodx. В созданном ранее файле metamod/plugins.ini прописываем путь до библиотеки amxmodx –

linux addons/amxmodx/dlls/amxmodx_mm_i386.so

Создаем папку dproto в папке addons. Закидываем туда файл «dproto_i386.so» из скачанного ранее архива dproto, закидываем файл «dproto.cfg» в папку «cstrike».

В файле metamod/plugins.ini добавляем строку –

linux addons/dproto/dproto_i386.so

Ну и до кучи можно сразу же скачать и установить statsme – это популярная внутриигровая статистика Counter-Strike 1.6.

Качаем, например, отсюда –

http://makeserver.ru/mody/1188-statsme-2.7.1-samaja-luchshaja-versija..html

Затем создаем папку addons/statsme, копируем в неё скачанное, а в файле metamod/plugins.ini добавляем строку —

linux addons/statsme/dlls/statsme_mm.dll

В принципе всё, сервер в его первичном виде готов к использованию. Теперь вы можете запускать и останавливать его, пользуясь ранее созданным файлом hlds_runme. Пример запущенного сервера с установленными аддонами приведён на картинке ниже –

Запущенный Counter-Strike 1.6 с аддонами
Фото №11 — Запущенный Counter-Strike 1.6 с аддонами

Но всё же такой способ запуска сервера Counter-Strike тоже не очень удобен хотя бы потому, что при случайной или намеренной перезагрузке вашей ОС Linux, он не запустится автоматически.

Чтобы решить эту проблему, я поступил следующим образом. В директории /etc/init.d создал файлик hlds_start –

touch hlds_start

со следующим содержимым:

#!/bin/sh
#
# chkconfig: 2345 95 20
# description: StartHLDS
# Script is starting/stoping HLDS Server
# processname: HLDS
TITLE=’Dedicated Server’
LONGNAME=’Counter-Strike 1.6′
NAME=’Dedicated-HLDSServer’
DAEMON=’hlds_run’
UPDATER=’/usr/hlds’
STEAM=’/games/hlds/server’
USER=’root’
IP=’192.168.1.60′
PORT=’27015′
MAP=’de_dust2_2x2′
GAME=’cstrike’
SIZE=’24’
HIGHPRIORITY=1
OPTS=»-binary ./hlds_linux -game $GAME -port $PORT +ip $IP +maxplayers $SIZE +map $MAP +sv_lan 0 -pidfile $STEAM/$GAME/$NAME.pid»
CURRENT_USER=$(/usr/bin/whoami)
if [ «$CURRENT_USER» = «$USER» ]; then
INTERFACE=»/usr/bin/screen -A -m -d -S $NAME»
else
INTERFACE=»sudo -u $USER /usr/bin/screen -A -m -d -S $NAME»
fi
service_start() {
if [ -f $STEAM/$GAME/$NAME.pid ] || [ -f $STEAM/$GAME/$NAME-screen.pid ]; then
if [ «$(ps -p `cat $STEAM/$GAME/$NAME.pid` | wc -l)» -gt 1 ]; then
echo -e «Cannot start $TITLE. Server is already running.»
else
if [ «$(ps -p `cat $STEAM/$GAME/$NAME.pid` | wc -l)» -gt 1 ]; then
kill -9 `cat $STEAM/$GAME/$NAME-screen.pid`
echo «Killing process ID $id»
echo «Removing $TITLE screen pid file»
rm -rf $STEAM/$GAME/$NAME-screen.pid
break
fi
if [ -f $STEAM/$GAME/$NAME-screen.pid ]; then
rm -rf $STEAM/$GAME/$NAME-screen.pid
fi
echo «Removing $TITLE pid file»
rm -rf $STEAM/$GAME/$NAME.pid
screen -wipe 1> /dev/null 2> /dev/null
service_start
fi
else
if [ -x $STEAM/$DAEMON ]; then
echo «Starting $TITLE — $LONGNAME»
echo «Server IP: $IP»
echo «Server port: $PORT»
echo «Server size: $SIZE players»
cd $STEAM
$INTERFACE $STEAM/$DAEMON $OPTS
sleep 1
ps -ef | grep SCREEN | grep «$NAME» | grep -v grep | awk ‘{ print $2}’ > $STEAM/$GAME/$NAME-screen.pid
echo «$TITLE screen process ID written to $STEAM/$GAME/$NAME-screen.pid»
echo «$TITLE server process ID written to $STEAM/$GAME/$NAME.pid»
echo «$TITLE started.»
chmod 666 $STEAM/$GAME/*.pid #1> /dev/null 2> /dev/null
chown $USER $STEAM/$GAME/*.pid #1> /dev/null 2> /dev/null
sleep 2
if [ $HIGHPRIORITY = 1 ]; then
renice -20 `cat $STEAM/$GAME/$NAME.pid` >/dev/null 2>&1
fi
fi
fi
}
service_stop() {
if [ -f $STEAM/$GAME/$NAME.pid ] || [ -f $STEAM/$GAME/$NAME-screen.pid ]; then
echo «Stopping $TITLE — $LONGNAME.»
for id in `cat $STEAM/$GAME/$NAME-screen.pid`
do kill -9 $id
echo «Killing process ID $id»
echo «Removing $TITLE screen pid file»
rm -rf $STEAM/$GAME/$NAME-screen.pid
break
done
echo «Removing $TITLE pid file»
rm -rf $STEAM/$GAME/$NAME.pid
screen -wipe 1> /dev/null 2> /dev/null
echo «$TITLE stopped.»
else
echo -e «Cannot stop $TITLE. Server is not running.»
fi
}
service_clear() {
echo «Removing all Service pid files.»
rm -rf $STEAM/$GAME/*.pid 1> /dev/null 2> /dev/null
}
service_update() {
echo «Stopping and Clearing all Service files.»
service_stop
sleep 2
service_clear
sleep 2
echo «Updating Steam Updater»
cd $UPDATER
./steam 1> /dev/null 2> /dev/null
echo «Updating Game Files»
./steam -command update -game $GAME -dir . 1> /dev/null 2> /dev/null
sleep 2
service_start
}
case «$1» in
‘start’)
service_start
;;
‘stop’)
service_stop
;;
‘restart’)
service_stop
sleep 1
service_start
;;
‘clear’)
service_clear
;;
‘update’)
service_update
;;
*)
echo «Usage $0 start|stop|restart|clear|update»
esac

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

Во-вторых, ни в коем случае не удаляйте кусок кода в начале скрипта, вот он —

#!/bin/sh

#

# chkconfig: 2345 95 20

# description: Some description

# What your script does (not sure if this is necessary though)

# processname: myscript

После создания файла hlds_start и редактирования его основных переменных, проверяем его работу, то есть просто запускаем его (из MC, например), и получаем сообщение следующего вида –

Пример запуска стартового скрипта сервера Counter-Strike 1.6
Фото №12 — Пример запуска стартового скрипта сервера Counter-Strike 1.6

Изучив список доступных команд, набираем start и получаем –

Игровой сервер Counter-Strike 1.6 успешно запущен
Фото №13 — Игровой сервер Counter-Strike 1.6 успешно запущен

Всё, сервер Counter-Strike 1.6 стартовал, а в папке cstrike/ появились pid-файлы с соответствующими названиями и номерами процессов сервера и screen’a.

Зайти в управление вашим сервером вы можете всё также, как и раньше, набрав команду

screen –x

Теперь помещаем данный скрипт в автозагрузку вашего сервера Linux.

chkconfig hlds_start on

Вот если бы того самого текста в заголовке скрипта, о котором я сказал выше, не было бы, мы бы получили в ответ —

не поддерживает chkconfig

Перезагружаем вашу ОС Linux, и убеждаемся, что сервер Counter-Strike 1.6 тоже запустился! Всё, готово!

P.S.: настройка конфига сервера из папки cstrike/server.cfg, amxmodx и описание её основных параметров, установка всяческих плагинов для amxmodx и т.п. мелочи – это всё отдельная история, всё в кучу собирать не буду, может быть опишу это позже, в отдельной статье.

comments powered by HyperComments