Stalus

Stalus

Я гений пламенных речей. Я господин свободных мыслей.
На Пикабу
Дата рождения: 01 марта 1991
поставил 624 плюса и 48 минусов
Награды:
10 лет на Пикабу
952 рейтинг 44 подписчика 35 подписок 4 поста 3 в горячем

Systemd vs SysVinit

При написании предыдущего поста про systemd наткнулся на интересную таблицу, где приводилось соответствие между командами systemd и SysVinit. Единственный "минус" был в том, что таблица была на английском, поэтому решил перевести и выложить, вдруг кому-то надо.


Перевод (кликните для увеличения):

Systemd vs SysVinit Linux, Systemd, Sysvinit, Перевод, Длиннопост

И оригинал (кликните для увеличения):

Systemd vs SysVinit Linux, Systemd, Sysvinit, Перевод, Длиннопост

Взято отсюда - http://linoxide.com/linux-command/systemd-vs-sysvinit-cheatsheet/

Там еще есть и pdf-версия. Русскую pdf-версию кинул на мыльное облако.


Если есть ошибка/неточность - пишите. Исправлю.


ps.

Очень удобно редактировать векторный pdf в Inkscape.

Показать полностью 2

Systemd для самых маленьких. Часть I. Знакомство

Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Внимание! Данный пост не для холивара в стиле "нужен/не нужен", "не unix-way", "когда Поттеринг запилит свою ось?" и т.п. Пост содержит исключительно информацию по работе с systemd.


Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Привет вам, красноглазые братья и сёстры!


Эта статья посвящена, как видно из названия, системе systemd. Первый пост скорее обзорный и начнем мы с вами с исторического экскурса.


----------------------------------------------------

Глава 1. В плену shell-скриптов.

----------------------------------------------------

Давным-давно, в далекой-предалекой галактике примерно 14 млрд. лет назад не было ничего. Ни света, ни пространства, ни времени. Потом произошел Большой взрыв и потребовалось еще очень много времени, пока первый человек встал прямо и начал использовать свой разум. И навострился настолько, что по прошествии еще некоторого времени изобрел транзистор, а потом и компьютер. Компьютер сам по себе штука бесполезная, нужны были проги и операционная система. И родил человек Unix.


Операционной системе нужна была система инициализации (СИ, не путать с языком программирования!). Для совсем новичков, СИ - это действия, совершаемые при загрузке системы. Запуск программ, демонов всего лишь часть СИ.


Думали-думали и придумали в пятой версии Unix систему под названием init (SysVinit). Она позволяла запускать скрипты и вводила концепцию уровней инициализации (т.н. runlevels). Скрипты (обычно они лежат в /etc/init.d/) - это просто скрипты (простите за тавтологию) на языке shell-а, где описаны специальные функции, вроде start(), stop(), reload() и т.п. Это позволяло запускать скрипты вот таким образом (пример - демон web-сервера apache)

/etc/init.d/apache2 start

Запускать, конечно, хорошо, но лучше, чтобы все делалось автоматически при старте. И тут на помощь приходят уровни инициализации (УИииииииии). Всего уровней в системе могло быть до 7 штук (Оффтопик. УИ - это что-то по типу безопасного режима в винде, только тут таких режимов больше и они более настраиваемые). Обычно это:


> 0 - остановка системы;

> 1 - однопользовательский режим (иногда называемый режимом восстановления);

> 2/3 - многопользовательский с/без поддержки сети.

> 5 - графический режим

> 6 - перезагрузка


Для каждого из уровней в каталоге /etc был свой каталог с именем rcN.d, где N - номер уровня. Внутри этих директорий содержались симлинки (символическая ссылка - прим.) на скрипты из каталога /etc/init.d/, которые должны запускаться при переходе на соответ. уровень (или останавливаться при уходе). Какой должен запускаться, а какой останавливаться, а также порядок запуска (остановки) регулировался именем симлинка. В общем случае выглядит это вот так

Snnимя

Knnимя

Здесь S и K - обозначения старта и остановки (S - старт, K - остановка), nn - двухзначное число, используемое для обозначения порядка запуска (чем выше, тем позднее), имя - произвольное имя.

Уровень по умолчанию задавался в файле /etc/inittab, а поменять на лету можно было при помощи команды init номер_уровня. Например,

init 0

для выключения машины. Все скрипты запускались последовательно (это важно!). Позднее Ubuntu запилила свою СИ с блэкджеком и событийной моделью под именем upstart. Но о ней мы говорить не будем, т.к. даже сама Ubuntu отказалась от неё в пользу systemd.

Ладно, переборщил я со вступлением.  Держите скрин и переходим к "виновнику торжества".

Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

--------------------------------------------------

Глава 2. Systemd и все-все-все.

--------------------------------------------------

Systemd (в дальнейшем буду использовать сокращение sd) - это "система инициализации". Именно в кавычках, потому что она вобрала в себя огромную кучу функции. Кстати, именно это является главной причиной ненависти некоторых людей к systemd - нарушения принципа "unix-way".

Примечание: unix-way - принцип, согласно которому, одна программа - одна функция. Т.е. каждая программа должна выполнять одну функцию, но делать это достаточно хорошо, а не иметь 100500 плохо написанных функций.

systemd написана немецким программистом Леннартом Поттерингом (старшим братом Гарри Поттера). Основные причины (имхо) появления sd - попытка избавиться от shell-скриптов, распараллелить загрузку и иметь единую точку контроля всего и вся. Отсюда плюсы sd (копипаст с арчвики):

systemd обеспечивает возможности агрессивной параллелизации, использует сокеты и активацию D-Bus для запускаемых служб, предлагает запуск демонов по необходимости, отслеживает процессы при помощи контрольных групп Linux, поддерживает мгновенные снимки и восстановление состояния системы, монтирование и точки монтирования, а также внедряет основанную на зависимостях логику контроля процессов сложных транзакций.

На сегодняшний день sd применяется в Debian (c 8-й версии), Ubuntu (с 15.04 версии), Fedora (c 15 версии), openSUSE (с 12.1), ArchLinux (12.11) и т.д.

Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Основная базовая единица в sd - это сущность под названием юнит (unit). НЕ стоит думать, что юнит - это просто аналог shell скрипта из SysVinit (см. выше). Юниты бывают разных типов и тип service (наиболее близкий к shell скрипту из SysVinit) всего лишь один из них. Но это я забежал вперед.


Юнит - это текстовой ini-файл с описанием. Файл разделен на секции, внутри секций задаются параметры. Две секции допустимы во всех юнитах, остальные в зависимости от типа юнита. Есть три каталога, где могут храниться юниты.


> /usr/lib/systemd/system - системные юниты, поставляемые обычно вместе с приложениями;

> /run/systemd/system - динамически создаваемые юниты (т.е. на лету);

> /etc/systemd/system - юниты и исправления, внесённые администратором


Расположены директории в порядке повышения приоритета.

Юниты можно запускать и останавливать.

Как я сказал, юниты делятся на типы (с соответ. расширениями файлов):


> service - аналог демона или что-либо, что можно запустить;

> device - факт подключения какого-либо устройства (имя юнита генерируется из sysfs-имени устройства);

> target - ничего не описывает, группирует другие юниты;

> mount - точка монтирования файловой системы (имя юнита должно соотвествовать пути до точки монтирования);

> automount - аналог autofs: точки автомонтирования (должен существовать *.mount-юнит с тем же именем);

> timer - аналог cron. Периодический запуск другого юнита (по умолчанию запускаться будет *.service-юнит с тем же именем);

> socket - аналог xinetd. Запуск юнита при подключении к указанному сокету (по умолчанию запускаться будет *.service-юнит с тем же именем);

> path - запуск юнита по событию доступа к какому-либо пути в файловой системе (по умолчанию запускаться будет *.service-юнит с тем же именем);

> slice - группирует другие юниты в дереве cgroups, позволяя иерархично задавать ограничения по используемым ресурсам;


Примечение: cgroups - это способ объединения процессов, чтобы заюзать для них какие-то правила или ограничения. Например, ограничения на проц или память.

Не пугайтесь, если не все понятно. Москва тоже не сразу строилась. Все типы мы рассматривать не будет, это материал для отдельной статьи. Но для примера, а также чтобы пояснить понятие зависимостей требования/порядка, рассмотрим юнит типа service - sshd.service

Конечно, можно просто открыть файл в текстовом редакторе или использовать утилиту cat, но гораздо удобнее использовать для этого спец. команду;

systemctl cat sshd.service

Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Как я уже сказал, юнит делится на секции. В данном случае их три - [Unit], [Service] и [Install].

Секции [Unit] и [Install] могут быть в любом юните, а секция [Service] - спец. секция юнитов типа service.

Секция [Unit] содержит основную информацию о юните, а также о зависимостях порядка и зависимостях требования. Итак, параметры:


> Description= - тут просто описывается данный юнит. Набор слов, если проще.

> Wants= - о, интересный параметр. Это так называемые зависимости требования. Еще один из них (его тут нет) - это Requires=. И том и в другом случае, юнит хочет, чтобы сервис (или просто программа), указанный в параметре (назовем его зависимым юнитом), были запущенны, но при этом, если указано Wants=, то юниту пофиг на исход запуска. Пусть даже он упал, при старте. Requires= же таких вольностей не прощает и просто прекратит запуск юнита, если зависимый юнит не стартанул. Конкретно в этом случае, будет предпринята попытка запуска сервиса sshdgenkeys, но исход запуска нам по барабану.

> After= и парный ему Before= - это зависимости порядка. Все довольно просто и понятно, запускать данный юнит до или после.

Важно!

Зависимости порядка и зависимости требования НЕ связаны между собой. В данном примере, сказано, что sshd.service должен запустится после network.target. Но это никоим образом не значит, что network.target будет запущен! Однако если он запущен (допустим, его запустил другой сервис), то стартуем после него, если не запущен, то и фиг с ним.


На основе информации о зависимостях порядка и зависимостях требования sd строит так называемое дерево зависимостей. Чтобы понять это, представьте себе перевернутое дерево с корнем наверху, а вместо листьев у него юниты. Что-то похожее делает и sd при старте (сохр, до выключения/перезагрузки - прим.). Далее (тут только моё предположение) все юниты на одном уровне стартую одновременно (ака параллельно), в отличие от SysVinit, где была последовательная загрузка. Параллельный запуск обеспечивает ускорение запуска (хотя в вике написано, что в последних версиях уже нет).

Но вернемся к sshd. Секция [Service] описывает тип юнита service. В других типах своё. Например, в юнитах типа socket есть секция [Socket]


> ExecStart= - как запустить.

> ExecReload= - как перечитать конфиг, тут все просто.

> KillMode= описывает как будет убит процесс. Конкретно в этом случае сказано, что сигнал убийства (мухахахаа - зловещий смех - прим.) будет послан только главному процессу, а как быть со своими потомками ему решать.

> Restart= - описывает когда сервис будет перезапускать процесс при падении (или других катаклизмах). В мане есть табличка, которая объясняет всё немного лучше (это относится и к ману systemd в целом xD)

man systemd.service


Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Секцию [Install] пока просто запомним, ниже расскажу, где она используется.


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


------------------------------------

Глава 3. Одна за всех.

------------------------------------

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

Target-ы являются аналогами уровней в SysVinit. Т.е., допустим, target с именем multi-user является аналогом 2/3 уровня и содержит симлинки на юниты, которые будут запущены при выполнении этого target-а. По умолчанию выполняется target с именем default.target, который обычно является псевдонимом для graphical.target (аналог 5 уровня).


Итак команды. Основная команда, это

systemctl

Примечание: В дальнейшем unit_name - имя юнита, заменяйте на нужный. Команды запускались от рута.

systemctl, запущенная без параметров, является псевдонимом для более полной команды systemctl list-units. Она покажет список юнитов, а также их состояния. С помощью ключа -t можно задать тип юнитов, а --all выведет все юниты, в том числе и неактивные. Например:

systemctl list-units -t target --all

Команда

systemctl status

покажет общее состояние системы и перечислит юниты, которым соответствуют какие-либо запущенные процессы. В то же самое время, эта команда, дополненное именем юнита покажет более подробную информацию о юните. Например:

systemctl status sshd.service


Команда

systemctl cat unit_name

покажет содержимое юнита.

Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Переходим к самому интересному - запуск и остановка юнита. Снова systemctl.

systemctl start unit_name

systemctl stop unit_name

Примечание: по умолчанию принимается тип service. Таки образом команды

systemctl start sshd.service

и

systemctl start sshd

эквивалентны.

Тут все просто и понятно. Единственное, что стоит уточнить, так это то, что эти манипуляции применяются только в текущей сессии. При рестарте все вернется на круги своя.

А что тогда делать, если мы хотим добавить юнит в автозагрузку? Опять systemctl

systemctl enable unit_name

systemctl disable unit_name

Еще помните секцию Install, которую я сказал, что опишу позднее? Если не помните, то вот она:

[Install]

WantedBy=multi-user.target

Ну так вот, эта секция используется командами systemctl enable/disable для добавления симлинка в нужный target (создания иск. зависимости). Конкретно в этом случае, при выполнении команды

systemctl enable sshd.service

в папке multi-user.target будет создан симлинк на sshd.service и при выполнении данного target-a sshd будет запущен.

Кстати, проверить наличие юнита в автозагрузке можно командой

systemctl is-enabled unit_name

Она вернет enabled/disabled. Логично же)


Даже выключенный и убранный из "автозагрузки" unit может быть запущен как зависимость. Но что, если мы хотим совсем выключить юнит, чтобы нельзя было запустить даже как зависимость? Для этого юниты из /usr/lib/systemd/system и  /run/systemd/system - можно замаскировать командой

systemctl mask unit_name

Это команда создает симлинк на /dev/null в /etc/systemd/system с именем маскируемого юнита. (Напомню, этот каталог имеет наивысший приоритет). Тут проявляется ограничение - нельзя замаскировать юнит из папки /etc/systemd/system. Обратная команда

systemctl unmask unit_name

просто удаляет симлинк.


Возвращаясь к target-ам. В начале главы я сказал, что target-ы - аналоги уровней в SysVinit и то, что multi-user.target - 3 уровень, а graphical.target - 5 уровень. Вполне логично предположить, что есть и для оставшихся уровней.

> 0 - poweroff.target либо halt.target

> 1 - rescue.target

> 6 - reboot.target

Само собой, что можно просто запустить нужный target. Например:

systemctl start poweroff.target

Но гораздо проще использовать сокращенный аналог, убрав start и target, т.е.:

systemctl poweroff

systemctl halt

systemctl reboot

systemctl rescue

Также у нас имеется "лицензия на убийство"

systemctl kill unit_name

По умолчанию посылается сигнал TERM (не уверен), но можно послать определенный сигнал c помощью опции -s. Имена сигналов можно получить набрав команду kill -l

systemctl kill -s HUP unit_name


Хотите перезапустить все юниты и перестроить дерево зависимостей? Не проблема

systemctl daemon-reload

Systemd для самых маленьких. Часть I. Знакомство Linux, Systemd, Урок, Длиннопост

Разумеется, что описать всё и вся в одной статье не получится. Лично я планировал X статей с описанием systemd, Y статей с самописными примерами и Z c тем, что я наслоупочил. (X,Y,Z - произвольные натуральные числа), но когда это будет я не решусь сказать.


-----------------------------------------------

Использованная литература:

-----------------------------------------------


Арчвики, цикл видеоподкастов "Systemd In Action", цикл статей на Rus-LInux.



Спасибо за внимание.


Bonus. Хозяйке на заметку.

Команда

systemd-analyze

покажет время загрузки системы.

Показать полностью 6

Запускаем сервер Counter-Strike 1.6 на Linux c хедшотами и ботами!

Запускаем сервер Counter-Strike 1.6 на Linux c хедшотами и ботами! Linux, Counter-strike, Инструкция, Valve, Длиннопост

Мужик сказал - мужик сделал. Мужик сказал и не сделал - мужик пошутил.


Привет вам, красноглазые братья и сестры!

В этой статье-дополнении я расскажу как поднять свой сервер самого популярного онлайн шутера Counter-Strike на Linux. Для тех, кто в танке:

Запускаем сервер Counter-Strike 1.6 на Linux c хедшотами и ботами! Linux, Counter-strike, Инструкция, Valve, Длиннопост

Если верить Steam:

Сыграйте в лучший онлайновый экшен в мире. Примите участие в невероятно реалистичной войне с террористами в этой популярнейшей командной игре. Действуйте совместно с товарищами по команде для достижения стратегических целей. Уничтожайте опорные пункты врага. Освободите заложников. Ваши достижения влияют на успех вашей команды. Успех вашей команды влияет на ваши достижения.


Ладно, заканчиваем тянуть кота за вокальные данные и приступим к делу.


----------------------------------------------------------------

Глава 3. Непредвиденные последствия

----------------------------------------------------------------

Внимательный читатель, думаю, обратил внимание, что мы начали не с нулевой и даже не с первой главы. Нет, автор не прогуливал математику в школе.  Так почему же с третьей?

Ответ прост. В предыдущей статье бонусом к установке сервера HL шла еще и установка сервера CS. Если вы выполняли действия глав 0-2, то уже сейчас можете запустить сервер командой:

./hlds_run -game cstrike +maxplayers 8 +map de_dust


при условии, что вы находитесь в каталоге с сервером.  Но (всё самое интересное асегда начинаются после слова "Но") никаких ботов и no-steam клиенты (йо-хо-хо) к вам не подключатся. Нам такого "счастья" не надо.
Исправляем ситуацию. Напомню, что у меня сервер расположен в каталоге /mnt/video/games/hlds, у вас, разумеется, свой.

cd /mnt/video/games/hlds

Как известно из пред. статьи для того, чтобы к серверу могли подключиться no-steam клиенты, нам нужен dproto. А для запуска dproto нужен metamod.

Double Protocol (dproto) - плагин для Metamod'а, решающий проблему мультипротокола и эмулирующий SteamID для NoSteam-клиентов.

И снова я решил тупо собрать dproto, metamod и ботов и залить их на мыльное облако. Архив нужно скачать и положить в папку с сервером. Распакуем:

tar -xf cstrike.tar.xz

И положим все по местам.

mv addons cstrike/

mv dproto.cfg cstrike/

Как и в прошлый раз, отредактируем один файл. На сей раз это файл с тем же названием liblist.gam, но в папке cstike.

nano cstrike/liblist.gam

Здесь заменяем строку

gamedll_linux "dlls/cs.so"

на

для 64-битных:

gamedll_linux "addons/metamod/dlls/metamod_amd64.so"

для 32-битных:

gamedll_linux "addons/metamod/dlls/metamod_i386.so"


-------------------------------------------------

Глава 4. Серверный комплект

-------------------------------------------------

Сервер готов, пробуем запустить.

./hlds_run -game cstrike +maxplayers 8 +map de_dust

здесь:

--game cstrike - запустить контру;

+maxplayers 8 - количество игроков';

+map de_dust - карта;


Боты настраиваются в файле cstrike/addons/podbot/podbot.cfg

pb_minbots 0

pb_maxbots 16

и команда

pb add скилл_бота

Все довольно просто, поэтому перейдем к клиенту.


-----------------------------------------------------------------------------------------------

Глава 5. Мы встретили пиратскую версию Халфы Контры.

-----------------------------------------------------------------------------------------------


... и прошли мимо. Мы ведь всё еще не качаем пиратские игры, правда? Для интересующихся, первая ссылка по запросу "counter-strike linux" в гугле приведет вас куда нужно. Скачиваем, распаковываем, запускаем, играем. (Скачивание не показано)

mkdir /mnt/video/games/cs && cd /mnt/video/games/cs

В эту же папку кидаем архив с игрой.

tar -xf Counter-Strike.tar.gz

Архив теперь можно удалить, если не нужен (в пред. статье я забыл про это упомянуть).

rm Counter-Strike.tar.gz

Запускаем:

./cstrike.sh

Порубиться с ботами или с другими игроками? Не вопрос. Запусти в одной консоли сервер. В другой клиент. В клиенте нажми клавишу тильду "~" и введи команду на соединение:

connect 127.0.0.1:27015

Вместо 127.0.0.1:27015 можно набрать адрес какого-нибудь другого сервера.


------------------------------------------------------

Глава 6. Отводные псевдонимы.

------------------------------------------------------

Сделаем псевдонимы в ~/.bashrc для того, чтобы не набирать полностью команды. И вновь я напоминаю, что каталоги у вас должны быть свои.

echo "alias startcsds='cd /mnt/video/games/hlds; ./hlds_run -game cstrike +maxplayers 8 +map de_dust'" >>~/.bashrc

echo "alias startcsclient='cd /mnt/video/games/cs; ./cstrike.sh'" >>~/.bashrc

И перечитаем файл.

source ~/.bashrc

В итоге для запуска сервера контры достаточно набрать startcsds, а для запуска клиента startcsclient.

Почти все. Необязательный штрих.


--------------------------------------------------------------------

Глава 7. Подача разделенных терминалов

--------------------------------------------------------------------

Процитирую:

Мой основной эмулятор терминала terminator. Мне нравится, что можно вертикально разбить окно: слева запустить сервер, справа запустить клиент. Удобно? Удобно. Быстро? Нет. Надо исправлять. Для начала создадим отдельный шаблон для запуска игр.

В прошлый раз я насклерозил и забыл добавить файл, пришлось отдельным комментом.

Склонирую файл на pastebin  и отредактирую для контры. Ссылку просто так дать нельзя, поэтому вот - http://pastebin\.\com/6YhtJNYU (Прости, лига лени!). Обратные слеши надо убрать.

Если копируете, заменяйте папки на свои! В файле записан layout с названием csds. Запустив терминал с этим layout-ом, мы получим вертикальное разбиение окна c одновременным запуском сервера/клиента.

terminator -l csds --new-tab

И снова псевдоним.

echo "alias cd='terminator -l csds--new-tab'" >>~/.bashrc

Перечитаем файл:

source ~/.bashrc

И все. Запускается все это одной единственной командой

cs

Команда запустит отдельный экземляр эмулятора терминала, разделит окно вертикально, слева запустит сервер, справа клиент... Ну, про это я уже писал.


На этом все.

Всего хорошего и спасибо за рыбу за внимание.

Запускаем сервер Counter-Strike 1.6 на Linux c хедшотами и ботами! Linux, Counter-strike, Инструкция, Valve, Длиннопост

ps. Ура, у меня появился личный фсб-шник! xD

Запускаем сервер Counter-Strike 1.6 на Linux c хедшотами и ботами! Linux, Counter-strike, Инструкция, Valve, Длиннопост
Показать полностью 3

Запускаем сервер Half-Life на Linux c хедкрабами и ботами!

Привет вам, красноглазые братья и сестры! 

В этой "маленькой" статье я расскажу как поднять свой сервер легендарной игры Half-Life на Linux. Для тех, кто в танке:

Запускаем сервер Half-Life на Linux c хедкрабами и ботами! Linux, Half-life, Монтировка, Инструкция, Valve, Длиннопост

Если верить Steam :

Боевик, приключения и удостоенная наград технология создания потрясающе реалистичного мира, в котором игрок должен думать, чтобы выживать — всё это обладатель звания «Игра года» от более чем 50 изданий, дебютная игра от Valve — Half-Life.

Ладно, закончим с прелюдией, приступим к делу.


-----------------------------------------------

Глава 0. Подготовительная.

-----------------------------------------------

По умолчанию предполагается, что:

- каталог с играми - /mnt/video/games

- компьюер соответ. минимальным требованиям игры. Для клиента это (согласно Steam):

> OS: Linux

> Процессор: Dual-core from Intel or AMD at 2.8 GHz

> Память: 1GB

> Видеокарта: nVidia GeForce 8600/9600GT, ATI/AMD Radeaon HD2600/3600

> Граф. драйвер: nVidia 310, AMD 12.11, OpenGL 2.1

> Место на ЖД: 4GB Hard Drive Space

> Звуковая карта: OpenAL Compatible Sound Card

Имхо, требования завышены.

- широкополосный доступ в интернет


Тестовая система выглядит так:

OS: ArchLinux x86_64 c ядром 4.5.4-1-ARCH

Процессор: Intel Pentium 4 3.00GHz

Память: 3.2 Gb

Видеокарта: Ati Radeon HD 4670 c откраытым драйвером версии 1.7.7.0

Место на ЖД: подсчитаем в конце статьи.


--------------------------------------------------------------

Глава 1. Прибытие в Чёрную Консоль.

--------------------------------------------------------------

Для начала создадим папку, в которую будем устанавливать сервер. Напоминаю, у меня папка с играми /mnt/video/games/, у вас своя.

mkdir /mnt/video/games/hlds && cd /mnt/video/games/hlds

Теперь обновим пакеты и установим необходимые библиотеки для 64-битных ОС.

Для debian-производных систем (танкистам - Ubuntu и Mint относятся к ним): 

sudo apt-get update

sudo apt-get install lib32gcc1

Для ArchLinux (предварительно раскомментируйте multilib репозиторий. Подробнее читайте в wiki ArchLinux)

pacman -Syy lib32-gcc-libs


-------------------------------------------------------------------------------------------

Глава 2. Аномальные материалы или косяки SteamCMD

--------------------------------------------------------------------------------------------

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

mkdir steamcmd && cd steamcmd

Начнем магию. Качаем, распаковываем. Внимание! Ссылку пикабу выводит в сокращенном виде, поэтому копируйте внимательно (правой кнопкой мыши -> Копировать ссылку)

wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_li...

tar -xf steamcmd_linux.tar.gz

Запускаем и ждем приглашения Steam:

./steamcmd.sh

Запускаем сервер Half-Life на Linux c хедкрабами и ботами! Linux, Half-life, Монтировка, Инструкция, Valve, Длиннопост

Теперь надо ввести логин. Можно ввести свой steam-аккаунт, но оно нам надо? Анонимно!

login anonymous

Укажем каталог для установки сервера. В данном случае выбран родительский каталог

force_install_dir ../

Запускаем сервер Half-Life на Linux c хедкрабами и ботами! Linux, Half-life, Монтировка, Инструкция, Valve, Длиннопост

И самое интересное. Непосредственно, скачавание и установка сервера. Интересно тут то, что закачка постоянно обрывается, независисо от вашего интернет-подключения. Выводится ошибка:

Error! App '90' state is 0x402 after update job.

В этом случае повторяйте команду заново, пока она не докачает до конца и не скажет, что все OK. Например, когда я писал эту статью, команду пришлось запустить 50 раз. 50 РАЗ, КАРЛ!!!

app_update 90 -beta beta validate

Все ОК будет, когда появится надпись:

Success! App '90' fully installed.

Сервер установлен. Выходим из SteamCMD

quit

----------------------------------------------------------------

Глава 3. Непредвиденные последствия

----------------------------------------------------------------

Уже сейчас вы можете запустить сервер и, если у вас есть Steam-версия Half-life, подключиться и играть. Но мы ведь старые пираты. Йо-хо-хо, и бутылка рома! Просто так мы подключится не сможем, получим ошибку.

Нам нужен dproto.

Double Protocol (dproto) - плагин для Metamod'а, решающий проблему мультипротокола и эмулирующий SteamID для NoSteam-клиентов.

Читаем внимательно.

плагин для Metamod'а,

Ага, значит нам еще нужен Metamod. Это некая прослойка между плагинами и игрой.

Я решил собрать metamod, dproto и ботов в один архив и залить его на облако, чтобы не мучались со скачиванием и с версиями. Мы в папке /mnt/video/games/hlds/steamcmd/, если вы помните. Перейдем на папку выше.

cd ..

И удалим папку steamcmd. Она нам больше не нужна.

rm -r steamcmd

Качаем архив и распаковываем. Сокращенные ссылки пикабу не пропускает, а длинную обрезает, поэтому скачайте папку с мыльного облака и положите в папку с сервером. У меня это /mnt/video/games/hlds/. Распакуем

tar -xf valve.tar.xz

Теперь у нас есть папка addons и конфиг для dproto. Переместим её в нужное место. А ненужный уже архив удалим.

mv addons valve/

mv dproto.cfg valve/

rm valve.tar.xz

Отредактируем файл liblist.gam в папке valve.

nano valve/liblist.gam

Заменяем строку

gamedll_linux "dlls/hl.so"

на эту

для 64-битных:

gamedll_linux "addons/metamod/dlls/metamod_amd64.so"

для 32-битных:

gamedll_linux "addons/metamod/dlls/metamod_i386.so"

Как это сделать, думаю, пояснять не надо.

Запускаем сервер Half-Life на Linux c хедкрабами и ботами! Linux, Half-life, Монтировка, Инструкция, Valve, Длиннопост

-------------------------------------------------

Глава 4. Серверный комплект

-------------------------------------------------


Теперь у нас есть сервер и мы даже можем его запустить.

./hlds_run -game valve +maxplayers 8 +map crossfire +exec server.cfg

здесь:

-game valve - запустить халфу;

+maxplayers 8 - количество игроков';

+map crossfire - карта;

+exec server.cfg - выполнить команды, прописанные в server.cfg. Это файл находится в каталоге valve и туда можно, например, прописать разделение на две команды "mp_teamplay 1" (без кавычек).

Ботов мало? Боты тупые? Нет проблем! Редактируем файл valve/addons/jk_botti/jk_botti.cfg

min_bots 4

max_bots 4

botskill 2

Тут все просто и понятно.

Казалось бы, можно уже закончить статью, но как же клиент?


---------------------------------------------------------------------------------

Глава 5. Мы встретили пиратскую версию Халфы.

---------------------------------------------------------------------------------

... и прошли мимо. Мы ведь не качаем пиратские игры, правда? Для интересующихся, первая ссылка по запросу "half-life linux" в гугле. Скачиваем, распаковываем, запускаем, играем. (Скачивание не показано)

mkdir /mnt/video/games/half-life && cd /mnt/video/games/half-life

В эту же папку кидаем архив с игрой.

tar -xf Half-Life.tar.gz

./hl.sh

Порубиться с ботами или с другими игроками? Не вопрос. Запусти в одной консоли сервер. В другой клиент. В клиенте нажми тильду "~" и введи команду на соединение:

connect 127.0.0.1

Вместо 127.0.0.1 можно набрать адрес какого-нибудь другоего сервера.

Ну теперь уж точно все? Ан нет.


------------------------------------------------------

Глава 6. Отводные псевдонимы.

------------------------------------------------------

Набирать такие команды долго, я считаю. Если вы согласны со мной, то предлагаю добавить в ~/.bashrc пару псевдонимов. Папки, разумеется, ставьте свои!

echo "alias starthlds='cd /mnt/video/games/hlds; ./hlds_run -game valve +maxplayers 4 +map crossfire +exec server.cfg'" >>~/.bashrc


echo "alias starthlclient='cd /mnt/video/games/half-life; ./hl.sh'" >>~/.bashrc

И перечитаем файл.

source ~/.bashrc

Что это дало? А то, что теперь для запуска сервера достаточно набрать starthlds, а для запуска клиента starthlclient.

Ну вот теперь все?! Достал уже!

Нет, еще штрих. Необязательный.


--------------------------------------------------------------------

Глава 7. Подача разделенных терминалов

--------------------------------------------------------------------

Мой основной эмулятор терминала terminator. Мне нравится, что можно вертикально разбить окно: слева запустить сервер, справа запустить клиент. Удобно? Удобно. Быстро? Нет. Надо исправлять. Для начала создадим отдельный шаблон для запуска игр. Не буду утомлять, просто приведу ссылку на свой файл ~/.config/terminator/config - тык.

Если копируете, заменяйте папки на свои! В файле записан layout с названием hlds. Запустив терминал с этим layout-ом, мы получим вертикальное разбиение окна c одновременным запуском сервера/клиента.

terminator -l hlds --new-tab

Опять много писать ... Лига лени негодует. А давайте прописшем псевдоним, как в шестой главе.

echo "alias hl='terminator -l ramahg --new-tab'" >>~/.bashrc

Снова перечитает файл.

source ~/.bashrc

И все, теперь для запуска игры (сервера и клиента) нужно набрать всего лишь:

hl

Команда запустит отдельный экземляр эмулятора терминала, разделит окно вертикально, слева запустит сервер, справа клиент... Правда вы этого уже не увидите. Почему? Красная монтировка не может ждать!


Спасибо за внимание.

Запускаем сервер Half-Life на Linux c хедкрабами и ботами! Linux, Half-life, Монтировка, Инструкция, Valve, Длиннопост

ps. ах да, чуть не забыл! В начале же я обещал привести объем занимаемое места на жд. Исправляемся.

сервер = 776,6 МиБ

клиент = 906,8 МиБ

Можно их, конечно соединить (мне так кажется), но пока

и так сойдет(с).

Показать полностью 4
Отличная работа, все прочитано!