systemd

systemd — менеджер системы и служб для Sailfish OS, совместимый со скриптами инициализации SysV и LSB. systemd выполняет следующие функции:

  • возможность параллелизации;
  • использование сокетов и активация D-Bus для запускаемых служб;
  • по необходимости запуск демонов;
  • отслеживание процессов при помощи контрольных групп Linux;
  • поддержка мгновенных снимков и восстановления состояния системы, монтирования и точки монтирования;
  • внедрение основанной на зависимостях логики контроля процессов сложных транзакций.

systemd построен на концепции модулей (units). Модули имеют имя и тип. Поскольку их конфигурация обычно загружается из файловой системы — названия модулей на самом деле представляют собой имена файлов. Существует несколько видов модулей:

  • сервис (.service) — позволяет запускать, останавливать, перезапускать или перезагружать демоны. Для совместимости с SysV в systemd помимо собственных файлов конфигурации для различных сервисов имеется возможность чтения классических скриптов инициализации SysV;
  • сокет (.socket) — реализует сокет, расположенный в файловой системе или в сети Интернет. В настоящее время поддерживаются сокеты AF_INET, AF_INET6, AF_UNIX типов stream, datagram и последовательных пакетов (sequential packet). Также поддерживаются классические буферы FIFO. Каждый модуль типа сокет имеет соответствующий ему модуль сервис, который запускается при попытке установки соединения с сокетом или буфером FIFO;
  • устройство (.device) — представлен в виде конфигурационного файла, содержащего правило udev для обработки дерева устройств;
  • точка монтирования (.mount) — реализует точку монтирования в файловой системе. systemd контролирует все точки монтирования (их подключение и отключение), а также может быть использована для монтирования и размонтирования отдельных файловых систем. Также можно получить информацию о файловой системе из файла /etc/fstab;
  • точка монтирования с автоматическим подключением (.automount) — реализует точку монтирования с автоматическим подключением файловой системы. Каждому такому модулю соответствует модуль типа mount, который запускается (т. е. подключается), как только монтируемая файловая система становится доступной;
  • таргет (.target) — используется для логической группировки других модулей. Например, bluetooth.target запускает службы при активации Bluetooth-устройства;
  • снимок (.snapshot) — позволяет создавать ссылки на другие модули. Снимки могут быть использованы для сохранения состояния и возможности отката назад состояния всех служб и модулей системы инициализации;
  • таймер (.timer) — позволяет периодически запускать другой модуль;
  • путь (.path) — управляет иерархией файловой системы;
  • подкачка (.swap) — управляет файлами подкачки;
  • сектор (.slice) — группирует другие модули в дереве cgroups, позволяя иерархично задавать ограничения по используемым ресурсам.

Файлы модулей могут храниться в трех директориях, имеющих друг над другом приоритет:

  • /usr/lib/systemd/system — «системные» модули, поставляемые вместе с приложениями;
  • /run/systemd/system — динамически создаваемые (например, через API) модули;
  • /etc/systemd/system — модули и исправления, внесенные администратором (данная директория имеет наивысший приоритет).

systemd предоставляет разработчикам много утилит для контроля и управления самим systemd и его службами. Например, для отслеживания и контроля состояния systemd используется утилита systemctl. Для просмотра журнала событий можно запросить журнал systemd, используя утилиту journalctl.

Процесс начальной загрузки Sailfish OS делится на шаги, которые группируются по юнитам через цепочку зависимостей. Такие группы юнитов представлены в файлах формата TARGET. Ниже перечисляются некоторые таргеты, используемые в Sailfish OS:

  • poweroff.target — завершение работы и отключение системы;
  • actdead.target — режим зарядки устройства;
  • multi-user.target — настройка неграфической многопользовательской системы;
  • graphical.target — настройка графической многопользовательской системы;
  • reboot.target — выключение и перезагрузка системы.

Демон systemd управляет системой и сервисом Sailfish OS. При начальной загрузке он действует как система инициализации, которая переводит систему в рабочее состояние. journald — системная служба, которая собирает и хранит данные журнала событий ядра и пользовательских процессов.

Для systemd требуется, чтобы опции cgroup и autofs были включены в конфигурацию ядра Sailfish OS.