OpenRC (OpenRC)

Перейти к навигации Перейти к поиску
OpenRC
Скриншот программы OpenRC
Тип init демон
Автор Рой Марплс
Разработчик OpenRC Developers
Написана на Си[1]
Операционные системы Linux, FreeBSD, NetBSD
Первый выпуск 5 апреля 2007 (2007-Apr-05)
Последняя версия 0.45.2 (3 июля 2022г.)
Репозиторий github.com/OpenRC/openrc
Лицензия 2-clause BSD license
Сайт GentooWiki, GitWeb
Логотип Викисклада Медиафайлы на Викискладе

OpenRC — система инициализации на основе зависимостей, которая работает вместе с программой инициализации init. Она полностью совместима со сценариями Gentoo, но, тем не менее, может использоваться и в других дистрибутивах Linux и BSD. Он был создан Роем Марплсом, разработчиком NetBSD, который также принимал активное участие в проекте Gentoo.[2][3]

OpenRC предоставляет обычные функции, ожидаемые от современной системы инициализации: загрузка на основе зависимостей, процесс сегрегации через cgroups (в Linux и других системах — разделение между разными уровнями запуска), конфигурации переменных среды.

Такие операционные системы как Gentoo, Alpine Linux, Hyperbola GNU/Linux-libre[en], Parabola GNU/Linux-libre, Maemo Leste, TrueOS и ряд других unix-подобных систем используют OpenRC, в то время как некоторые другие, такие как Devuan, Artix Linux предлагают её как один из вариантов[4]. Это означает, что программные пакеты и демоны этих операционных систем/дистрибутивов поддерживают его, поставляют и/или используют доступные скрипты.

Дизайн[править | править код]

OpenRC состоит из нескольких модульных компонентов, основными из которых является init (необязательная), основная система управления зависимостями и supervise-daemon (необязательно). Он написан на C и POSIX-совместимой оболочке, что делает его пригодным для использования в системах BSD и Linux. Основная система OpenRC занимается управлением зависимостями и анализом выполнения сценария инициализации. OpenRC работает путем сканирования уровней запуска, построения графа зависимостей и последующего запуска необходимой сценарной службы. Он завершается после запуска скриптов. По умолчанию OpenRC использует модифицированную версию start-stop-daemon для управления демонами.[5]

Скрипты имеют сходство со скриптами, используемыми в системе инициализации SysVinit, но предлагают несколько функций, упрощающих их создание. Предполагается, что сценарии имеют start(), stop() и status(), и система использует уже объявленные переменные для создания функций по умолчанию[6]. Функция зависимостей используется для объявления зависимостей от других служб, которые будут выполняться с заголовками LSB в SysVinit. Конфигурация и механизм инициализации разделены файлами настройки конфигурации в каталоге conf.d и файлами настройки инициализации в каталоге init.d.

Openrc-init впервые появился в версии 0.25 в качестве опциональной замены для init. Поддерживается несколько других систем инициализации, включая SysVinit и Busybox

Supervise-daemon впервые появился в версии 0.21, дающей возможность супервизора в openrc. Он может быть включен в init скрипте для supervise-daemon, чтобы он запускал и контролировал демоном. Поддерживаются так же другие супервизоры демонов, включая runit[7] и s6[8].

Особенности[править | править код]

OpenRC обеспечивает ряд особенностей, которые преподносили инновационными такие системы инициализации, как systemd, GNU Shepherd или upstart, например, запуск аппаратных сценариев инициализации или поддержка cgroups. Реализация подобных функций не потребовала больших изменений, радикально изменяющих дизайн и зависимости.

  • Переносимость между Linux, TrueOS, FreeBSD и NetBSD
  • Параллельный запуск служб (по умолчанию отключен)
  • Загрузка на основе зависимостей
  • Разделение процессов через контрольные группы (cgroups)[9]
  • Ограничения ресурсов для каждой службы (ulimit)
  • Разделение кода и конфигурации (init.d / conf.d)
  • Расширяемые сценарии запуска
  • Скрипты инициализации с отслеживанием состояния (он уже запущен?(да))
  • Сложные сценарии инициализации для запуска нескольких компонентов ( Samba (smbd и nmbd), NFS (nfsd, portmap и Т. Д.))
  • Автоматический расчет зависимостей и определение порядка запуска служб
  • Модульная архитектура и разделение дополнительных компонентов ( Cron , syslog )
  • Выразительная и гибкая работа с сетью (включая VPN , Сетевые мосты и Т. Д.)
  • Подробный режим отладки

Интеграция Busybox и OpenRC[править | править код]

BusyBox может использоваться, чтобы заменить большинство утилит, необходимых OpenRC (awk, shell, init, и другие POSIX-инструменты), в качестве основной оболочки. Все вызовы, как правило, возбуждаемые fork и exec, будут заменены ради повышения скорости.

См. также[править | править код]

Примечания[править | править код]

  1. The open_rc Open Source Project on Open Hub: Languages Page — 2006.
  2. История OpenRC. GitHub. Дата обращения: 30 августа 2020. Архивировано 18 февраля 2018 года.
  3. «Разработчики NetBSD» . (30 августа 2020). Дата обращения: 30 августа 2020. Архивировано 19 июля 2011 года.
  4. "«Стабильный выпуск Devuan ASCII 2.0.0» . 17 июля 2018". devuan.org. 06.08.18. Архивировано 23 сентября 2018. Дата обращения: 30 августа 2020. {{cite news}}: Проверьте значение даты: |date= (справка)
  5. Руководство пользователя (англ.). GitHub. — «Start-Stop-Daemon OpenRC has its own modified version of s-s-d, which is historically related and mostly syntax-compatible to Debian's s-s-d, but has been rewritten from scratch.» Дата обращения: 30 августа 2020. Архивировано 11 декабря 2021 года.
  6. Справочник скриптов, Руководство пользователя, Основные Функции (англ.). GitHub. — «All service scripts are assumed to have the following functions: start() stop() status()». Дата обращения: 11 марта 2022. Архивировано 11 ноября 2020 года.
  7. Руководство по запуску (англ.). GitHub (6 апреля 2020). Дата обращения: 30 августа 2020. Архивировано 8 марта 2021 года.
  8. Руководство s6 (англ.). GitHub (30 августа 2020). Дата обращения: 30 августа 2020. Архивировано 6 марта 2019 года.
  9. ""CGroups Support"". Retrieved 5 April 2020. Архивировано 25 января 2021. Дата обращения: 30 августа 2020. {{cite news}}: Проверьте значение даты: |date= (справка)

Ссылки[править | править код]