systemd

systemd — подсистема инициализации и управления службами в Linux, фактически вытеснившая в 2010-е годы традиционную подсистему init. Основная особенность — интенсивное распараллеливание запуска служб в процессе загрузки системы, что позволяет существенно ускорить запуск операционной системы. Основная единица управления — модуль, одним из типов модулей являются «службы» — аналог демонов — наборы процессов, запускаемые и управляемые средствами подсистемы и изолируемые контрольными группами.

Systemd
Логотип программы Systemd
Скриншот программы Systemd
Тип демон, управляющий демоном[d]
Разработчики Леннарт Пёттеринг[2], Кай Зиверс[d][2] и Харальд Хойер[d]
Написана на Си[3][4]
Операционная система Linux[5]
Первый выпуск 30 марта 2010
Последняя версия
Репозиторий github.com/systemd/syste…
Лицензия LGPLv2.1+[d][6]
Сайт systemd.io (англ.)
Логотип Викисклада Медиафайлы на Викискладе
Компоненты systemd

Первые версии были созданы в результате сотрудничества Леннарта Пёттеринга и Кая Зиверса[en], с середины 2010-х годов проект развивается в основном силами Пёттеринга и других сотрудников Red Hat[7]. Опубликован как свободное программное обеспечение под условиями лицензии GNU Lesser General Public License версии 2.1 или позднее[8].

Архитектура править

Подсистема оперирует специально оформленными файлами конфигурации — модулями (англ. unit). Каждый модуль отвечает за отдельно взятую службу, точку монтирования, подключаемое устройство, файл подкачки, виртуальную машину и тому подобные ресурсы. Существуют специальные типы модулей, которые не несут функциональной нагрузки, но позволяют задействовать дополнительные возможности systemd, к ним относятся модули типа target, slice, automount и ряд других. На октябрь 2016 года systemd поддерживает следующие типы модулей:

  • .target — позволяет группировать модули, воплощая концепцию уровней запуска;
  • .service — отвечает за запуск сервисов (служб), также поддерживает вызов интерпретаторов для исполнения пользовательских скриптов;
  • .mount — отвечает за монтирование файловых систем;
  • .automount — позволяет отложить монтирование файловых систем до фактического обращения к точке монтирования;
  • .swap — отвечает за подключение файла или устройства подкачки;
  • .timer — позволяет запускать модули по расписанию;
  • .socket — предоставляет службам поддержку механизма сокет-активации;
  • .slice — отвечает за создание контейнера cgroups;
  • .device — позволяет реагировать на подключение устройств;
  • .path — позволяет запускать модули при появлении пути в файловой системе.

По сравнению с традиционной системой инициализации в стиле System V, systemd даёт преимущества в следующем:

  • контроль состояния службы, реакция на изменения состояния;
  • сокет-активные и шина-активные службы, которые иногда приводят к лучшему распараллеливанию взаимозависимых служб;
  • использование cgroups для отслеживания служебных процессов, вместо идентификаторов процессов (PID), это означает, что демоны не будут потеряны даже после разветвления в другие процессы.

В апреле 2012 года исходные коды менеджера устройств udev были объединены с systemd[9].

Подсистема изначально разработана только для Linux, и опирается на специфичные для него функции, такие как cgroups и fanotify[de][10]. По этой причине Debian, как дистрибутив, работающий на различных ядрах (не только Linux), не полностью использует systemd[11].

Возможности править

Помимо простого запуска и контроля служб, systemd предлагает некоторые другие удобные функции, для использования которых ранее системным администраторам приходилось прибегать к помощи дополнительных программ-демонов. Среди таких функций:

  • сокет-активация служб (заменяет inetd);
  • запуск сервисов по расписанию (заменяет cron);
  • работа с аппаратным сторожевым таймером (заменяет watchdog);
  • смена корня (заменяет chroot);
  • автомонтирование томов и сетевых ресурсов (заменяет mount и fstab);
  • journalctl — служба журналирования;
  • systemd-analyze — анализ скорости запуска служб;
  • systemd-boot — UEFI-загрузчик (заменяет GRUB).

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

Подсистема была предложена как внешняя зависимость для GNOME 3.2 автором проекта[12]; это фактически потребовало от всех дистрибутивов, использующих GNOME, использовать systemd, или по крайней мере, включить его в качестве настраиваемой опции. GNOME версии 3.8 и выше уже нельзя установить без systemd.

Дистрибутивы, в которых systemd установлен по умолчанию:

  • Debian GNU/Linux версии 8 и выше;
  • RHEL версии 7 и выше[13];
  • CentOS версии 7 и выше;
  • Ubuntu версии 15.10 и выше; (с 16.04 — по умолчанию[14]; с 16.10 — единственная система инициализации)
  • Fedora версии 15 и выше[15];
  • Mageia 2[16];
  • Mandriva 2011[17];
  • Rosa
  • openSUSE 12.1 и выше[18];
  • Arch Linux 12.11[19][20][21] (предоставляет возможность использования как самописной системы инициализации (более не поддерживается[22]), так и любой другой (также без официальной поддержки со стороны дистрибутива));
  • Sabayon 13.08[23].
  • Gentoo предоставляет пакеты systemd в стабильной ветке[24][25].
  • Sailfish OS (мобильная операционная система)

Многие дистрибутивы сохраняют традиционные системы инициализации как опциональные. Другие могут использовать только отдельные компоненты systemd. Так, например Ubuntu с 13.04 по 14.10 использовала только hostnamed, localed и timenamed[26].

Подсистема принципиально не используется в дистрибутивах Slackware, Alpine, Void, Devuan (ответвление от Debian в связи с переходом его systemd).

Критика править

Несмотря на широкую поддержку, разработка systemd вызвала в сообществе Linux жаркие дебаты. Критики обращают внимание на излишнюю сложность и раздувание функционала systemd за счёт неуёмного поглощения служб Linux, отмечая, что такой подход противоречит «философии Unix», отрицающей концентрацию различных функций в одной программе («пусть каждая программа делает что-то одно, но делает это хорошо»).

Также существует озабоченность, что systemd, делает популярное ПО (например, GNOME) несовместимым с «классическими» дистрибутивами Linux, что ставит под вопрос их будущее. Похожая ситуация наблюдается и для службы PulseAudio, которая, по совпадению, также является проектом Леннарта Пёттеринга[27][28].

Среди публичных критиков systemd — основатель Slackware Патрик Фолькердинг, при этом в интервью 2012 года он не исключал, что однажды в дистрибутив systemd всё же будет включён (по состоянию на 2024 год этого не произошло).

Отдельные аспекты подсистемы и подходы к разработке критиковал Линус Торвальдс (в частности, за «бесцеремонность в вопросах обратной совместимости»), однако в целом он последовательно поддерживает проект.

Примечания править

  1. [systemd-devel systemd 255 released] — 2023.
  2. 1 2 README - systemd/systemd - System and Session Manager (англ.)
  3. systemd/systemd - System and Session Manager (англ.)
  4. The systemd Open Source Project on Open Hub: Languages Page — 2006.
  5. README - systemd/systemd - System and Session Manager (англ.)
  6. README - systemd/systemd - System and Session Manager (англ.)
  7. Lennart Poettering, "FAQs", systemd, 0pointer, Архивировано из оригинала 15 января 2017, Дата обращения: 16 июня 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 15 января 2017 года.
  8. Lennart Poettering (2012-04-21), systemd Status Update, Архивировано из оригинала 27 августа 2015, Дата обращения: 28 апреля 2012 Источник. Дата обращения: 16 августа 2012. Архивировано 27 августа 2015 года.
  9. Sievers, Kay, "Commit importing udev into systemd", systemd, Архивировано из оригинала 8 июля 2012, Дата обращения: 25 мая 2012 Источник. Дата обращения: 16 августа 2012. Архивировано 8 июля 2012 года.
  10. Lennart Poettering (2010-04-30), systemd FAQ, Архивировано из оригинала 15 января 2017, Дата обращения: 14 декабря 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 15 января 2017 года.
  11. Jake Edge (2011-07-27), Debian debates systemd, Архивировано из оригинала 15 мая 2012, Дата обращения: 14 декабря 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 15 мая 2012 года.
  12. Lennart Poettering (2011-05-18), "systemd as an external dependency", desktop-devel mailing list, GNOME, Архивировано из оригинала 10 октября 2014, Дата обращения: 26 мая 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 10 октября 2014 года.
  13. What’s new in Red Hat Enterprise Linux 7, Архивировано из оригинала 17 июля 2014, Дата обращения: 15 июля 2014 Источник. Дата обращения: 15 июля 2014. Архивировано 17 июля 2014 года.
  14. Ubuntu Linux переходит на systemd, следом за Debian. Дата обращения: 14 февраля 2014. Архивировано 22 февраля 2014 года.
  15. Dj Walker-Morgan (2011-05-24), Fedora 15’s Lovelock released, The H, Архивировано из оригинала 12 июля 2012, Дата обращения: 26 мая 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 12 июля 2012 года.
  16. Fabian Scherschel (2012-05-23), Mageia 2 arrives with GNOME 3 and systemd, The H, Архивировано из оригинала 8 декабря 2013, Дата обращения: 26 мая 2012 Источник. Дата обращения: 16 августа 2012. Архивировано 8 декабря 2013 года.
  17. Dj Walker-Morgan (2011-08-29), Mandriva 2011 arrives with systemd, The H, Архивировано из оригинала 9 июля 2012, Дата обращения: 29 августа 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 9 июля 2012 года.
  18. Chris von Eitzen (2011-11-16), openSUSE 12.1 arrives with systemd and Btrfs, The H, Архивировано из оригинала 20 апреля 2012, Дата обращения: 16 ноября 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 20 апреля 2012 года.
  19. systemd, Archlinux Wiki, Архивировано из оригинала 23 мая 2011, Дата обращения: 9 марта 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 23 мая 2011 года.
  20. systemd is now the default on new installations, 2012-10-13, Архивировано из оригинала 18 октября 2012, Дата обращения: 13 октября 2012 Источник. Дата обращения: 13 октября 2012. Архивировано из оригинала 18 октября 2012 года.
  21. Arch Linux перешёл на systemd, 2012-10-13, Архивировано из оригинала 17 октября 2012, Дата обращения: 13 октября 2012 Источник. Дата обращения: 13 октября 2012. Архивировано 17 октября 2012 года.
  22. End of initscripts support, 2012-11-04, Архивировано из оригинала 15 января 2013, Дата обращения: 9 января 2013 Источник. Дата обращения: 9 января 2013. Архивировано 15 января 2013 года.
  23. Press Release: Sabayon 13.08, Архивировано из оригинала 7 января 2015, Дата обращения: 12 августа 2013 Источник. Дата обращения: 12 августа 2013. Архивировано из оригинала 7 января 2015 года.
  24. sys-apps/systemd, Gentoo Packages, Архивировано из оригинала 3 июня 2016, Дата обращения: 7 мая 2016 Источник. Дата обращения: 7 мая 2016. Архивировано 3 июня 2016 года.
  25. Источник, Gentoo's Documentation, Архивировано из оригинала 26 июня 2011, Дата обращения: 5 июля 2011 Источник. Дата обращения: 16 августа 2012. Архивировано 26 июня 2011 года.
  26. 100 областей, systemd в upstart, фазовое обновление и ядро 3.8 в Ubuntu 13.04. Дата обращения: 12 ноября 2012. Архивировано 16 ноября 2012 года.
  27. Vaughan-Nichols, Steven Linus Torvalds and others on Linux's systemd. ZDNet. CBS Interactive (19 сентября 2014). Дата обращения: 24 февраля 2015. Архивировано 25 февраля 2015 года.
  28. 1345661 - PulseAudio requirement breaks Firefox on ALSA-only systems. Bugzilla. Mozilla (3 сентября 2021). Дата обращения: 3 октября 2021. Архивировано 3 октября 2021 года.

Литература править

Книги
LinuxFormat

Ссылки править