systemd — подсистема инициализации и управления службами в Linux, фактически вытеснившая в 2010-е годы традиционную подсистему init. Основная особенность — интенсивное распараллеливание запуска служб в процессе загрузки системы, что позволяет существенно ускорить запуск операционной системы. Основная единица управления — модуль, одним из типов модулей являются «службы» — аналог демонов — наборы процессов, запускаемые и управляемые средствами подсистемы и изолируемые контрольными группами.
Первые версии были созданы в результате сотрудничества Леннарта Пёттеринга и , с середины 2010-х годов проект развивается в основном силами Пёттеринга и других сотрудников Red Hat . Опубликован как свободное программное обеспечение под условиями лицензии GNU Lesser General Public License версии 2.1 или позднее .
Архитектура Подсистема оперирует специально оформленными файлами конфигурации — модулями (). Каждый модуль отвечает за отдельно взятую службу, точку монтирования, подключаемое устройство, файл подкачки, виртуальную машину и тому подобные ресурсы. Существуют специальные типы модулей, которые не несут функциональной нагрузки, но позволяют задействовать дополнительные возможности 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 .
Подсистема изначально разработана только для Linux и опирается на специфичные для него функции, такие как cgroups и . По этой причине Debian как дистрибутив, работающий на различных ядрах (не только Linux), не полностью использует systemd .
Возможности Помимо простого запуска и контроля служб, systemd предлагает некоторые другие удобные функции, для использования которых ранее системным администраторам приходилось прибегать к помощи дополнительных программ-демонов. Среди таких функций: сокет-активация служб (заменяет inetd); запуск сервисов по расписанию (заменяет cron); работа с аппаратным сторожевым таймером (заменяет watchdog); смена корня (заменяет chroot); автомонтирование томов и сетевых ресурсов (заменяет mount и fstab); служба журналирования systemd-journald (заменяет или служит обёрткой для традиционных служб журналирования, таких, как и ); systemd-analyze — анализ скорости запуска служб; systemd-boot — UEFI-загрузчик (заменяет GRUB).
Использование Подсистема была предложена как внешняя зависимость для GNOME 3.2 автором проекта ; это фактически потребовало от всех дистрибутивов, использующих GNOME, использовать systemd или, по крайней мере, включить его в качестве настраиваемой опции. GNOME версии 3.8 и выше уже нельзя установить без systemd.
Дистрибутивы, в которых systemd установлен по умолчанию: Debian GNU/Linux версии 8 и выше; RHEL версии 7 и выше ; CentOS версии 7 и выше; Ubuntu версии 15.10 и выше; (с 16.04 — по умолчанию; с 16.10 — единственная система инициализации) Fedora версии 15 и выше ; Mageia 2 ; Mandriva 2011 ; Rosa openSUSE 12.1 и выше ; Arch Linux 12.11 (предоставляет возможность использования как самописной системы инициализации (более не поддерживается ), так и любой другой (также без официальной поддержки со стороны дистрибутива)); Sabayon 13.08 . Gentoo предоставляет пакеты systemd в стабильной ветке . Sailfish OS (мобильная операционная система)
Многие дистрибутивы сохраняют традиционные системы инициализации как опциональные. Другие могут использовать только отдельные компоненты systemd. Так, например, Ubuntu с 13.04 по 14.10 использовала только hostnamed, localed и timenamed.
Подсистема принципиально не используется в дистрибутивах Slackware, Alpine, Void, Devuan (ответвление от Debian в связи с переходом его systemd).
Критика Несмотря на широкую поддержку, разработка systemd вызвала жаркие дебаты в сообществе Linux. Критики обращают внимание на излишнюю сложность и раздутость функциональности systemd из-за поглощения других служб Linux. Среди публичных критиков systemd есть также основатель проекта Slackware Патрик Фолькердинг, который подчеркнул, что «попытка контролировать службы, сокеты, устройства, монтирование и так далее в рамках единого демона противоречит философии Unix, которая заключается в том, чтобы делать одну вещь и делать её хорошо», при этом в интервью 2012 года он не исключал, что однажды в дистрибутив systemd всё же будет включён (по состоянию на 2024 год этого не произошло). Systemd предназначен для запуска основных программ, однако его возможности выходят далеко за пределы обязанностей системы инициализации, поскольку он также обрабатывает управление питанием, управление устройствами, точки монтирования, шифрование диска, планировщик задач типа cron, сокет API/inetd, конфигурацию сети, управление входом/сессией, readahead, обнаружение разделов GPT, регистрацию контейнеров, управление именем хоста/локализация/временем и другими вещами. Кроме того, критики systemd утверждают, что широкий спектр функций systemd создаёт большую поверхность атаки.
Также существует озабоченность, что systemd делает популярное программное обеспечение (например, GNOME) несовместимым с «классическими» дистрибутивами Linux, что ставит под вопрос их будущее (похожая ситуация наблюдается и для другого проекта Пёттеринга — службы PulseAudio).
Отдельные аспекты подсистемы и подходы к разработке критиковал Линус Торвальдс (в частности, за «бесцеремонность в вопросах обратной совместимости»), однако в целом он последовательно поддерживает проект.
Помимо прочего, независимые разработчики и пользователи критикуют systemd и его разработчиков, в частности, за концептуальные проблемы, плохой дизайн, раздутые функциональные возможности, плохое знание фундаментальных концепций операционной системы и пассивную реакцию разработчиков на сообщения об ошибках, которые игнорируются или отрицаются. Например, Пёттеринг получил награду Pwnie Awards 2017 в номинации «Самая глупая реакция разработчика» за отказ исправить уязвимость systemd, которая впоследствии получила индекс CVE-2017-1000082.
Летом 2024 года пользователи начали сталкиваться со случаями удаления домашних каталогов пользователей из-за ошибки, вызванной systemd, когда пользователи пытались очистить систему от временных файлов.
Примечания
Литература Книги
LinuxFormat
Ссылки Домашняя страница Systemd.
Противники использования и их причины
Категория:Система инициализации системы Категория:Системные и сервисные менеджеры