Counter-Strike 1.6
Вход
Установка HLDS CS 1.6 с нуля
Taraizer — 23 Январь, 2009 - 16:44
I. Статья ориентированна на человека имеющего начальные навыки
работы с юникс системами.
II. Я не претендую на то что это библия установки CS DS, хотя попытаюсь
наставить на путь истинный.
III. Данная статья довольна сыра, вней могут встречаться ошибки и некоторые
несоответствия. Уж простите. Старался как мог.
IV. Я не несу никакой ответственности за данную публикацию.
Если в результате ваших экспериментов вы свалите знакомому админу сервак и он
вас будет долго бить фэйсом об кэйс
сервака - корпус можете не приносить, править не буду!!!
Ставим Контру 1.6 с нуля. С абсолютного нуля!!! Нулее не бывает.
На юникс машину (я юзаю FreeBSD 5.2.1).
STEP BY STEP ))
I Установка HDLS (cstrike mod).
Сразу оговорим один момент - будем ставит и запускать контру
из под любого юзера КРОМЕ рута!!!
Иначе создастся
/usr/compat/linux/usr/steam
В нее будут улетать логи и будут складываьбся какието файлы.
1. Актуально для FreeBSD. (если linux - пропускаем)
Ставим из портов библиотеки совместимости с linux
/usr/ports/emulators/linux_base-8
без них нифига работать не будет.
Провим /etc/rc.conf
Добавляем строку
linux_enable="YES"
2. Качаем HLDS файлик hlds_l_1120_full.bin (размер 440 мегов),
Half-Life Dedicated Server v1.1.2.0 for Linux.
Нашел в осле, думаю есть не только там если поискать.
Да, обязательно чекаем md5 - у меня при передачи по фтп возникли
траблы, когда качал
с виндовой машины на юниксовый сервак, т к что проверка очень помогла найти баг
))
3. Распаковываем
В консоле:
mkdir /usr/steam
chmod 700 hlds_l_1120_full.bin
./hlds_l_1120_full.bin
На вопрос естно онвечаем "yes".
cd /usr/steam
tar zxvf hlds_l_1120_full.tgz
4. Надо бы проапдейтится . . .
Читаем файл 3) из п. 2. если все итак понятно - переходим к
следующему
пункту. Те кто в танке - читаем дальше. Правда я не воткнул одного - нафига
файл 2) из п. 2 нужен, когда файлик steam (который из него разворачивется)
имеется в файле 1) из п.2.
Создаем аккаунт
Идем туда где лежит steam (/usr/steam/hlds_l например)
Если он вдруг не выполняемый - chmod ему )) (см. п.3)
Запускае апдейттулзу с опцией "-create":
Как по учебнику:
./steam -create
После запуска видим чето типа этого:
Checking bootstrapper version ...
Getting version 9 of Steam HLDS Update Tool
Downloading. . . . . . . . . . .
Steam Linux Client updated, please retry the command
----
ВНИМАНИЕ ГРАБЛИ: если попробовать запустить тоже самое еще раз - steam
будет глючить и выдавать следующие:
Checking bootstrapper version ...
Creating Account
AuthenticationServerRSAPublicKey failed signature verifcation
Чтобы такого небыло - ижем в домашний каталог юзера из под
которого
работаем и дропаем папку .steam.
----
Опа, апдейт тул проапдейтился ))) Мде маленькое НО!!!
Пробуем как просят retry - хрен вам - параметры командной строки другие )))
Делаем
./steam
Видим хелпу. Делаем как надо:
./steam -command greate -username -email -password
-question -answer
Видим:
Checking bootstrapper version ...
Creating Account
Account Created successfully
Щастье есть - оно не может не есть ))
Обновляем сервак.
./steam -command update -game cstrike -dir /usr/steam/hlds_l
-username -password
Наблюдаем лог апдейта - если никаких слов типа error нет - значит
все,
сервак проапдейтился.
...
HLDS installation up to date
5. Тестим
./hlds_run -game cstrike +sv_lan 1 -insecure +map de_dust
-nomaster +maxplayers 20
-game cstrike - запускаемый мод.
+sv_lan 1 - работа в режиме локальной сети, ОБЯЗАТЕЛЬНО, и вроде как жедательно
первым
(сразу за cstrike)!!!
-nomaster - сервер не пробует авторизовать себя в WON.
+map de_dust - стартовая мапа, очень желательно.
-insecure - по моему связано с VAC, точно не помню.
ВНИМАНИЕ!!! Не путать плюсики и минусики. Это не глюк, так надо.
Пробуем коннектится с сетки класса "C" (думаю понятно почему,
если нет смотрим ниже).
Если выше глюков не наблудалось, то в принцапе перед нами готовый "голый" LAN
сервак.
Да, один баг с ходу: при попытки сменить автоматом карту на
cs_havana, сервак
рухнул и рестартанулся с фразой "не могу найти cs_havana.wad". Все просто -
делаем
ренейм cs_havana.WAD на cs_havana.wad (все лежит в hlds_l/cstrike). Для тех кто
в
танке или БТР: в UNIX регист учитывается при именовании файлов.
6. Патчим WON.
Для тех кто не в курсе . . .
HLDS может работать в двух режимах WAN и LAN.
В режиме LAN сервер вполне функционален, но позволяет коннектится только с
сети класса "C". В режиме WON требуется наличие оригинального CD-KEY на клиенте
(обшероссийский не катит )
Тянем nowon patch (например nowon.zip). Распаковывем на виндовой
машинке,
подтягиваем сюда же engine_i686.so (или какой там у вас ). Данный файл перед
патчингом рекомендуется переименовать т к патчер может не понять длинные имена
(8.3 only судя по инструкции), хотя у меня все и так сканало. Переименоваваем
напр. в engine.so.
Запускаем
c:hldsnowon>sp.exe nowon.s *.so
Если видим что то типа:
----
SIMPLE PATCHER 0.99beta (c) Victor Romanoff 2:5054/2.256
Patching file ENGINE.SO
Signature found at 947992d, 000E7718h
done.
----
значит патч успешно отработал.
Если ручки кривые или просто чето пошло не так увидим:
----
SIMPLE PATCHER 0.99beta (c) Victor Romanoff 2:5054/2.256
Error: No files found for patch
Total 1 error(s), patch process aborted
----
Сдесь хочется сказать огромное спасибо людям которые ваяют такие
весчи как
nowon patch - СПАСИБА ВАМ БАЛЬШАЯ И НИЖАЙШИЙ ПАКЛОН, такие люди как вы помагают
сэканомит кровный рубль в наше нелегкое для жизни время!!!
Ладно, хватит трепаться, продолжим.
И так, что мы имеем? А имеем мы пропатченный двиган для контры!!!
Что сделать с пропатченным файлом догадайтесь сами. Догадались?
Правильно! Переименовываем и кладем обратно. Сдорово.
Стартим сервак и тестим.
Небольшое лирическое отступление. Думаю эта фраза вам знакома:
LAN servers are restricted to local clients (class C).
Что бы не наводить неопытного читателя на ложный след поясню:
сеть класса
"C" это сеть вида /24 (т е маска 255.255.255.0, сама сеть выглядит как
123.123.123.xxx).
А сервак по сетью класса "C" подразумевает сеть вида /16 (т е маска 255.255.0.0,
сама сеть
выглядит как 123.123.xxx.xxx), хотя вообшето это сеть класса "B" ("бэээ").
Почему так - хз )
БУДТЕ ВНИМАТЕЛЬНЫ ПРИ ТЕСТИРОВАНИИ - у тестируеммых хостов (клиент и сервер)
должны
отличаться как минимум один из двух первых октетов IP адресов (числа до второй
точки).
Если при тестированиие с разных сетей класса "C" (которые на
самом деле "B") не пишет
вышепреведенной надписи - значить все гут.
Перед нами рабочий интернет сервер, но пока он все равно "голый"
- ща будем
прикручивать навороты.
II Навороты (они же моды, они же аддоны).
Я нехочу в данном раздели далать полные описание использования
плагинов,
постараюсь описать лишь необходимое, в меру надобности. Тому есть одна причина -
по каждому моду есть собственная документация.
Читайте, там все понятно описано. Приведу ссылки на доки.
1. Прикручиваем MetaModhttp://metamod.org/)
MetaMod - мод который позваляет прикрутить к серверу все другие
(вернее все поддерживаемые)
плагины.
Установка.
Тянем дистрибу metamod-1.17.2-linux.tar.gz - нам нужны тока бинарники, на линки
со словами
"source" внимания не обращаем.
Распаковываем. Внутри cstrike (/usr/steam/hlds_l/cstrike)
создаем:
mkdir addons
cd addons
mkdir metamod
cd metamod
mkdir dlls
cd dlls
----
Отступление: мы создали каталок addons - сюда мы быдем ставить и все остальные
плагины.
Если речь не будет идти о каком то конкретном пути - значит говорится именно про
него.
----
Копируем полученною сошку в metamod/dlls.
----
ПРЕДУПРЕЖДЕНИЕ: устанавливая сервер, вам придется постоянно редактировать фалы
конфигов
как самого сервера, так и его плагинов. Что бы облегчить себе жизнь в дальнейшем
крайне
рекомендую создать где-нибудь структуру каталог аналогичную серверно и сохранять
в ней
дефолтные и текущие конфиги сервака, чтобы в любой момент времение мона было
сделать
откат на предыдущий конфиг или на дефолт.
----
Ищем в hlds_l/cstrike файлик liblist.gam.
Меняем в нем
gamedll_linux "dlls/cs_i386.so"
на
gamedll_linux "addons/metamod/dlls/metamod_i386.so"
Создаем в папке metamod файл plugins.ini:
touch plugins.ini
Этот файл мы в дальнейшем будет юзать для запуска плагинов.
Формат файла:
[]
Пример смотрим ниже:
----
ЭТО ПРИМЕР!!! НЕ ИСПОЛЬЗОВАТЬ!!!
----
// linux dlls/mybot.so
# win32 dlls/mybot-old.dll Mybot old
win32 dlls/mybot.dll Mybot current
linux /tmp/stub_mm_i386.so
win32 /tmp/stub_mm_i386.dll
linux ../dlls/trace_mm_i386.so
win32 ../dlls/trace_mm_i386.dll
linux dlls/admin_MM_i386.so
win32 dlls/admin_MM_i386.dll
----
Стартуем сервер - если все гут видим в консоле что типа:
Metamod version 1.17.2 Copyright (c) 2001-2004 Will Day
Metamod comes with ABSOLUTELY NO WARRANTY; for details type `meta gpl'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `meta gpl' for details.
Мета мод установлен и функционирует.
Теперь на сервак мона вешать другие моды. Что касается выбора конкретных
модов - дело вкуса и цвета . Также хочется отметить что настройка каждого
конкретного плагина - тема отдельной статьи. Потому далее приведу краткий пример
установки AMX MODа.
2. AMX Mod
Качаем amx-0.9.9-won.tar.tar.
Распаковываем в addons/amx
Чиатем доки. Внимательно читаем.
В файл metamod/plugims.ini добавляем:
linux addons/amx/dlls/amx_mm_i586.so
Запускаем сервер.
Хочется оговорится что с версией metamod 1.17.2 в консоле стала
проскакивать ошибка
[META] ERROR: Couldn't find game entity 'item_generic' in game DLL
'cstrike': ./cstrike/addons/metamod/dlls/metamod_i386.so: undefined symbol:
item_generic
Поставил ту версию matamod что шла вместе с AMX (1.17.1) - ошибка пофиксилась.
Еше одна ошибка всплыла с ходу:
[FUN] Module is not attached to MetaMod
[AMX] Make sure that modules are compatible with AMX 0.9.9
[AMX] Please fix the problem then start the server again
Пофиксил коментированием в amx/config/modules.ini данного плагина.
Все. Теперь у нас есть сервак с прибамбасом типа AMX.
Настраиваем его в amx/config/*.ini как нам нравится. По всем тегам есть
комменты.
Делаем
сервер CS 1.5 под OpenBSD
Авторы: =/dev/null= aka ADMIN u nOgnUPAJIA
nice.csmapworld.ru
Цель данной статьи – рассказать особенности установки и запуска
Counter-Strike Dedicated Server (далее CSDS) под операционной системой OpenBSD.
Установка самой ОС OpenBSD на компьютер, а также установка CSDS и пропатчиваение
его на предмет WON-аутентификации в данной статье не рассматриваются.
Исходные данные
- Компьютер с установленной ОС OpenBSD последней версии – на момент написания
статьи – это версия 3.6.
- Дистрибутив Counter-Strike Dedicated Server for Linux.
Приступаем
Так как в природе не существует CSDS for OpenBSD & FreeBSD, нам придется брать
CSDS for Linux (слава Богу, что не под Windows и запускать его в среде
эмуляции.
По умолчанию, в ядро GENERIC OpenBSD включена поддержка совместимости с Linux.
Чтобы запустить любой не статически скомпонованный исполняемый файл Linux,
необходимо выполнить инструкции, приведенные в мане compat_linux. Большинство
используемых библиотек Linux содержится в пакете redhat_base-8.0p4. Поэтому нам
достаточно всего лишь установить этот пакет. После установки пакета появится
директория /usr/local/emul/redhat – министруктура ОС Linux с библиотеками и
конфигурационными файлами. Ничего там править не надо, по умолчанию все будет
запускаться и так.
Осталось раскомментарить в файле /etc/sysctl.conf строку
#kern.emul.linux=1
Распаковываем в директорию /usr/local/emul/redhat архив с CSDS
for Linux. Появится каталог hlds_l. Итак, полный путь к нашему серверу
/usr/local/emul/redhat/hlds_l
Запуск сервера CSDS
В целях безопасности, не следует запускать сервер от имени root. Поэтому создаем
пользователя csds (и группу csds), от имени которого будет запускаться наш
сервер.
#groupadd csds
#useradd –G csds –s /usr/local/bin/bash –d /usr/local/emul/redhat/hlds_l csds
#chown –R csds:csds /usr/local/emul/redhat/hlds_l
С последней командой следует быть внимательным. Если нам не нужны
логи CSDS и HLGuard, то последнюю команду можно не выполнять.
Я использую bash в качестве shell. Почему? Привычка осталась с Linux, кроме
того, у bash есть история команд, что очень удобно. Если не нравится bash, при
добавлении пользователя csds надо указать другой shell.
В директории /usr/local/emul/redhat/hlds_l есть скрипт hlds_run. Открываем его и
вносим изменения – в первой строке
#!/bin/sh
заменяем на
#!/usr/local/bin/bash (или любимый вами shell)
Создаем файл /usr/local/emul/redhat/hlds_l/server.sh
#su csds –c touch /usr/local/emul/redhat/hlds_l/server.sh
Делаем его исполняемым
#chmod 0755 /usr/local/emul/redhat/hlds_l/server.sh
Добавляем в server.sh
#!/usr/local/bin/bash
./hlds_run +maxplayers 18 +exec listip.cfg <и так далее что
обычно пишут в этом файле >
Для запуска CSDS при загрузке используем скрипт /etc/rc.local – в
него добавляем строки:
if [ -x /usr/local/emul/redhat/hlds_l/server.sh ]; then
echo ' Starting CSDS'; su csds –c /usr/local/emul/redhat/hlds_l/server.sh
fi
После перезапуска системы проверяем
#netstat –alnt | grep 27015
Если будет пусто, то убираем & в файле server.sh, запускаем
вручную и смотрим
#su csds –c /usr/local/emul/redhat/hlds_l/server.sh
Управление сервером CS
Для управления сервером существует много mod’ов. В рамках этой статьи они не
описываются, подчеркну только особенности работы в OpenBSD.
Неприятная особенность – все, что скомпилено и работало под Linux, на OpenBSD не
запустилось. Я имею ввиду Metamod & Amxmod.
С Metamod поступил так – взял оригинальную so’шку от разработчика и сервер
запустился.
С Amxmod’ом (v.0.9.9) – хуже, оригинал не помог, не хватает библиотек в
Linux-эмуляторе, что поставить дополнительно – не знаю.
Скачал Amxmodx (v.1) – запуск нормальный. Правда amxmod мне нравится больше,
т.к. глюков практически нет, в то время как последний Amxmodx работает через то
самое место.
HLGuard – запустился без проблем, но CPU жрет, подлец, если будет наглеть –
придется вырубить, т.к. для ловли читеров есть бездельники-админы.
Автоматизация процесса запуска и остановки CSDS
Иногда необходимо запускать и останавливать сервер CS по расписанию.
Например, стартовать в 16 часов, выключать в 00 часов (чтоб дети приходили из
школы, делали уроки, рубились в контру, а по ночам спали).
Для решения задачи используем crond. Тут тоже есть свои особенности.
Все задачи для crond лежат в /var/cron/tabs/
Задачу для пользователя csds создаем так. Сначала создаем файл cron.csds
#su csds –c touch /usr/local/emul/redhat/hlds_l/cron.csds
Заполняем его следующим:
SHELL=/usr/local/bin/bash #напоминаю, что это мой любимый shell
PATH=/usr/local/bin:/usr/local/emul/redhat/hlds_l
HOME=/usr/local/emul/redhat/hlds_l
#MAILTO=”root” #Для отладки – раскомментарить
#minute hour mday month wday command
00 16 * * * /usr/local/emul/redhat/hlds_l/server.sh
Потом команда
#crontab -u csds /usr/local/emul/redhat/hlds_l/cron.csds
Проверяем
#ls /var/cron/tabs
Должен быть файл csds с содержимым, указанным выше.
Первая часть выполнена – сервер стартует в 16 часов.
Далее, надо убить процесс hlds_i686 и hlds_run.
Если использовать HLGuard v.1.72 и выше, то он почему-то запускает целых 3
процесса hlds_i686. Значит надо убить все 3 и еще hlds_run, который в списке
процессов значится как /usr/local/bin/bash(!!!). Если убивать все процессы bash,
неизвестно к чему это приведет
Кроме того, в OpenBSD я не нашел аналога pidof – утилиты для определения PID по
имени процесса в Linux. Как узнать PID’ы всех трех hlds_i686 и hlds_run (который
на самом деле не hlds_run?
Есть простой способ. Мы будем просто убивать все процессы юзера csds командой
pkill.
#pkill -u csds#убьет все процессы csds.
Чтоб автоматизировать, добавляем в cron-файл root’a одну строку
#minute hour mday month wday command
59 23 * * * pkill -u csds
Потом команда
#crontab /root/cron.root
Вопросы? man crontab, man pkill
Безопасность
OpenBSD на сегодняшний момент самая стабильная и защищенная система (хорошо нет
форума, а то бы нашлись защитники всех ОС). Поэтому было бы неправильным не
уделить внимание безопасности сервера CS. Мероприятия по безопасности можно
разделить на 2 части – обеспечение безопасности самой ОС и безопасности сервера
CS.
Для безопасности самой ОС поднимаем фильтр пакетов PF. Политика – блокируем по
умолчанию пакеты ко всем портам, что не разрешены. То есть, если наша машина
выставлена в интернет как CSDS, то блокируем все пакеты, кроме тех, что идут на
порт 27015 – по умолчанию именно он открывается сервером. Добавляем правила в
/etc/pf.conf
block return log on $ext_if all #если строка уже есть, то не надо
pass in on $ext_if proto udp from any to any port 27015
Надо запускать фильтр каждый раз при загрузке. Для этого в
/etc/rc.conf заменяем строку
pf=NO
на
pf=YES
Для безопасности CSDS добавляем две строки в cstrike/server.cfg
sv_allowdownload 0(чтобы не утянули rcon_password)
sv_allowupload 0 (чтобы не закачивали на сервер никому не нужные спрайты и
звуки)
Это еще не все. Есть эксплойт, который валит CSDS – отправляет
специально сформированные пакеты на порт 27015 (или другой) и вызывает DoS –
отказ в обслуживании.
Решить проблему можно двумя способами. Первый – скачать утилиту обновления
сервера c сайта valve.com, затем запустить ее и обновить сервер до последней
версии, а потом снова искать в интернете слова «class C & отключение WON». Когда
будет много свободного времени, я попробую.
Второй – берем исходник патча hllinfix.c и компилируем его.
#gcc –O3 –share –o hllinfix.so -c hllinfix.c
Появится библиотека hllinfix.so, которую надо скопировать в
корень CSDS.
Затем открываем скрипт hlds_run любым редактором (я пользуюсь встроенным
редактором mc.edit из порта mc) и вначале добавляем
export LD_PRELOAD=”./hllinfix.so”
Все. Сервер пропатчен и больше не падает.
- Войдите на сайт для отправки комментариев