Алексей Федорчук
Система инициализации Runit — одна из отличительных особенностей Void Linux. И особенность практически уникальная: помимо рассматриваемого дистрибутива, эта система использовалась в дистрибутиве Dragora, судьба которого не ясна (последний релиз датируется весной 2012 года), а также энтузиастами — применителями Gentoo. Поэтому информации в сети о ней не очень много.
Точнее сказать, информация о Runit, что называется, не на слуху. Ибо и на сайте проекта, и на соответствующей странице сайта Void Linux содержится достаточно сведений, чтобы с этой системой разобраться. Тем более, что она очень проста, в отличие от… И вопреки сведениям, которые можно найти в сети, сходна не с SysV, а с BSD-стилем инициации Linux, который некогда применялся в Slackware, не так давно — в Archlinux, а по сей день сохранился, кажется, только в CRUX’е.
Подобно классическому BDS-стилю, в Runit’е фактически редуцировано понятие runlevels (то есть так называемых уровней выполнения): в обыденных услвоиях используются только однопользовательский (single) и умолчальный (default, то есть обычный многопользовательский) режимы. Благодаря этому управление стартовыми сервисами в этой системе легко и приятно, что и иллюстрируется приведённой ниже шпаргалкой.
Все доступные сценарии стартовых сервисов собраны в каталоге /erc/sv
, куда попадают автоматически при первичной инсталляции или последующей установке соответствующего пакета (например, gpm
).
Чтобы эти сценарии были доступны для запуска (вручную или автоматически, при старте системы), символические ссылки на них должны быть помещены в каталог /var/service/
. Что для сервисов по умолчанию опять же делается в ходе первичной инсталляции, а для служб, установленных позднее, должно быть проделано собственноручно (как это описано в рассказике о консольной мыши).
Умолчальные сервисы запускаются при старте системы автоматически, установленные вручную же нужно вручную и активизировать такой командой:
# sv u [name]
где [name]
— имя каталога из /erc/sv
(и символической на него ссылки из /var/service/
); далее для примера будет указываться имя сервиса консольной мыши gpm
.
Запущенный сервис может быть остановлен командой
# sv d gpm
и (или) перезапущен:
# sv t gpm
А определить, в каком состоянии находится данный сервис, можно так:
# sv s gpm
Для запущенного сервиса эта команда выведет такое сообщение:
run: gpm: (pid 823) 13688s
Все команды управления сервисами (даже последняя, не выполняющая, вроде, никаких действий) требуют прав администратора, полученных тем или иным образом. Кроме того, вместо приведённых внутренних команд утилиты sv
могут использоваться команды, совместимые с init-скриптами LSB (Linux Base Standard): start
, stop
, restart
и status
, соответственно.
Как было сказано выше, в Runit по умолчанию поддерживается два режима — однопользовательский и умолчальный. И иногда может возникнуть необходимость переключения из второго режима в первый. Что далется очень просто:
# runsvchdir single
Разумеется, это вызывает закрытие рабочей среды и всех запущенных в ней программ, причём без предупреждения. То есть перед этой операцией нужно озаботиться сохранением рабочих материалов в открытых приложениях. После чего требуется ввод пароля суперпользователя. Возврат в многопользовательский режим выполняется симметричной командой:
# runsvchdir default
В принципе, ничто не мешает создавать дополнительные режимы с собственными наборами стартовых сценариев, ведь от использования Runit Linux не превратился в BSD, и поддерживаемые им runlevels никуда не делись. Однако это имеет смысл только в каких-то специальных целях. А для решения первоочередных задач в свежеустановленном Void’е приведённых сведений пока достаточно. Будут другие задачи — будут и дополнительные материалы на тему инициализации.
содержиться достаточно сведений
Будьте добры, поправьте. Глаз режет.