Systemd – что нужно знать

Если вы не жили под камнем, или, что хуже, вам всё равно, как работает Linux, вы, должно быть, слышали о systemd, (относительно) новой системе инициализации, заменяющей старую и устаревшую SysV init, недавно принятую большинством крупных дистрибутивов Linux.

Что такое система инициализации?

При запуске вашей машины с Linux сначала выполняется некоторый «встроенный» код, загруженный из BIOS или UEFI, за которым следует загрузчик, который в соответствии со своей конфигурацией загружает ядро Linux. Ядро загружает драйверы, а в качестве своей первой задачи запускает процесс инициализации, который, будучи первым, получает PID (идентификатор процесса) 1.

С точки зрения пользователя это выглядит как запуск сетевого подключения, баз данных и т. д., но на самом деле под капотом происходит довольно сложный процесс. Сервисы запускаются, останавливаются и перезапускаются, часто параллельно друг другу. Некоторые работают с разными привилегиями, чем другие, статусы сервисов сообщаются и регистрируются, и выполняется множество других задач, которые позволяют различным частям вашей системы работать и взаимодействовать с пользователями и окружением.

systemd-linux-boot

Тем не менее, как это реализовано, далеко не единообразно, и именно здесь всё перестаёт быть общим и хорошо определённым.

Старая система инициализации

Система инициализации, использовавшаяся большинством основных дистрибутивов Linux до недавнего времени, была System V init (или сокращенно SysV init), название которой произошло от UNIX System V (произносится как «Система Пять»), первой коммерчески доступной системы UNIX. UNIX System V имела специфический способ выполнения процесса инициализации, и SysV init с годами оставалась верной этому подходу.

systemd-sysvinit

А прошло много лет. UNIX System V была впервые выпущена в 1983 году, сделав SysV init подходом к запуску машин с Linux, которому более 30 лет.

Необходимость изменений

Как было отмечено, SysV init устарела и давно требует замены. Некоторые причины этого включают:

  • SysV init использует /sbin/init для запуска процесса инициализации, но сама init имеет очень ограниченную роль. init делает не так уж много, кроме как запускает /etc/init.d/rc в соответствии с конфигурацией, прочитанной из /etc/inittab, которая, в свою очередь, запустит скрипты для выполнения основной работы процесса инициализации. Это, если не использовать параллелизацию явно (как с startpar в Debian), происходит последовательно, один скрипт за другим, что делает весь процесс медленным, поскольку каждый скрипт должен ждать завершения предыдущего.
  • SysV init не имеет доступа к PID или процессам, которые она (косвенно) запустила. Она просто читает PIDs и связывает их с фактическими процессами сложным образом.
  • Для системных администраторов, пытающихся изменить окружение, в котором запускается определенный процесс, это довольно сложно с SysV init. (Для достижения этого им придется изменить инициализационный скрипт, ответственный за запуск данного процесса.)
  • Существует определённая функциональность, общая для всех сервисов, которую SysV не реализует, но каждый процесс должен реализовать самостоятельно, например, «демонизирование» (стать системным демоном), что является сложным и долгим процессом. Вместо того чтобы реализовывать эти шаги один раз, SysV требует от каждого процесса делать работу самостоятельно.
  • SysV также оставляет определённую функциональность внешним программам и ничего не знает о сервисах, запущенных ими.

Все вышеперечисленные и многие другие недостатки проектирования, а точнее, устаревший дизайн системы SysV, сделали создание современной системы инициализации давно назревшей.

Встречайте systemd

Было много попыток создать альтернативную систему инициализации, из которых systemd является лишь одной из них. Ubuntu когда-то использовала собственную систему инициализации под названием upstart. Gentoo по-прежнему использует OpenRC. Другие системы инициализации включают initng, busybox-init, runit, Mudur и другие.

Причина, по которой systemd является явным победителем, заключается в том, что её приняло большинство крупных дистрибутивов. RHL и CentOS, естественно, выбрали путь systemd, поскольку Fedora была первым дистрибутивом, официально принявшим systemd в 2011 году. Но systemd действительно стала единой системой инициализации, управляющей всеми, когда Debian 8 официально перешел на systemd, приведя за собой Ubuntu и ее производные, преодолев первоначальное сопротивление Canonical (или, точнее, Марка Шаттлворта) к systemd.

Как systemd отличается?

  • Systemd стремится предоставить единственный, централизованный способ управления процессом инициализации от начала до конца.
  • Она запускает и останавливает процессы и сервисы, следя за их зависимостями. Она может даже запустить процесс в ответ на требования зависимости другого процесса.
  • В дополнение к запуску и остановке процессов во время загрузки, Systemd может также запускать в любое время, когда система работает, в ответ на определенные триггерные события, такие как подключение устройства.
  • Она также не требует, чтобы процессы сами демонизировались. В отличие от SysV init, systemd может обрабатывать сервисы, работающие без необходимости проходить долгий процесс становления демонами.
  • В отличие от SysV init, systemd знает и отслеживает все процессы, включая PIDs, и получение информации о процессах гораздо проще для системных администраторов в системе systemd.
  • Systemd поддерживает контейнеры, которые по сути являются изолированными сервисными окружениями без необходимости виртуальных машин. Это имеет большой потенциал для более безопасных и простых системных дизайнов в будущем.

systemd-containers

Конечно, это только некоторые из основных преимуществ. Для полного обсуждения преимуществ systemd вы должны прочитать «Заявление о позиции systemd» Debian 8.

Контroversии

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

systemd-infographic

Тем не менее, systemd явно является шагом вперёд, и хотя она не идеальна, большая часть критики, которую она получила, была адресована её первоначальным автором и разработчиком Леннартом Поэттерингом. Это определённо долгожданный прогресс и шаг вперёд по сравнению со старой системой инициализации. Линус Торвальдс, создатель Linux, похоже, не слишком против systemd, и кто мы такие, чтобы спорить с «Создателем».

Заключение

Будучи принята всей крупной дистрибуцией Linux, systemd здесь, чтобы остаться. Что бы некоторые системные администраторы ни говорили по тем или иным причинам, systemd — это будущее мейнстримного Linux, нравится это отдельным пользователям или нет, что, учитывая её явные преимущества, не обязательно является плохим.

Для обычного пользователя она обеспечивает более быстрое время загрузки и, вероятно, более надежные системы, в то время как в будущем дистрибутивы, принявшие её, могут стать более «совместимыми» друг с другом. С юридической стороны мы определенно извлечем выгоду из более современного и актуального дизайна системы, который она приносит нашим рабочим столам.