Авторские статьи

Systemd в Ubuntu 15.04 Vivid Vervet.


Как вы уже, наверное, знаете, что Debian после тяжёлых и многочисленных дебатов и голосований перешёл на новую систему инициализации Systemd. Вслед за папой Debian и Ubuntu переходит со своей системы Upstart на Systemd. Мы перейдём на Systemd полностью и бесповоротно!


Ubuntu и Debian. Systemd и Upstart.

Данная статья рассчитана только на опытных пользователей. Мы будем изменять систему инициализации у разрабатываемой Ubuntu 15.04 Vivid Vervet. Стоит напомнить, что система инициализации, известная так же как PID 1, одна из важнейших подсистем в операционной системе. Сбои и баги в ней малоприятны. 7 раз отмерьте - 1 раз отрежьте. Следует знать, что в последних версиях Убунту присутствуют установленные пакеты как upstart, так и systemd. Только главным и единственным является upstart.

В Upstart модель старта процессов (jobs) является "greedy event-based", то есть все доступные сервисы при наступлении события жадно стартуют, как можно быстрее.

В Systemd модель старта процессов (units) является "lazy dependency-based", то есть unit стартует только тогда, когда стартовал unit, от которого он зависит.

Чтобы переключиться на systemd, сначала сделаем себе страхующие вещи:

  • Правим файл sudo -e /etc/default/grub и удаляем quiet и splash из GRUB_CMDLINE_LINUX_DEFAULT. Сохраняем файл и вызываем sudo update-grub
  • Сделайте себе спасительный shell sudo systemctl enable debug-shell.service . Если система не загрузится, то вы можете зайти в консоль по CTRL+ALT+F9.
  • Запишите себе команду или лучше создайте скрипт, который может вам точно показать текущую систему инициализации. Вот волшебная команда идентификации PID1 ps -p1 | grep systemd && echo systemd || echo upstart

До полного перехода, можно и нужно попробовать загрузить систему с помощью systemd однократно. При старте системы успевайте зайти в меню grub и там в Advanced options for Ubuntu там найдите своё последнее ядро с "Ubuntu, with Linux ... (systemd)". Вы загрузитесь с параметром init=/lib/systemd/systemd

Полностью перейти на systemd можно, установив пакет sudo apt-get install systemd-sysv. У вас должны удалиться пакеты ubuntu-minimal, ureadahead и upstart.

Кратенько в сравнении, как управляются сервисы в Upstart и Systemd.

Действие Upstart Systemd
Старт сервиса start $job systemctl start $unit
Остановка сервиса stop $job systemctl stop $unit
Рестарт сервиса restart $job systemctl restart $unit
Статус сервиса initctl list systemctl status
Проверка конфигурации init-checkconf /tmp/foo.conf systemd-analyze verify <unit_file>
Показать переменные окружения initctl list-env systemctl show-environment
Установить переменную initctl set-env foo=bar systemctl set-environment foo=bar
Удалить переменную initctl unset-env foo systemctl unset-environment foo
Журнал работы сервиса cat /var/log/upstart/$job.log sudo journalctl -u $unit
Смотреть постоянно журнал tail -f /var/log/upstart/$job.log sudo journalctl -u $unit -f
Показать зависимости сервисов initctl2dot systemctl list-dependencies --all

Более подробно о всех возможностях Systemd на русском языке вы можете прочесть в мануале "Systemd для администраторов" авторства Lennart Poettering в переводе Сергея Пташника.

Всё познаётся в сравнении.

sysvinit Upstart systemd
Управление через D-Bus нет да да
Запуск без использования bash/shell скриптов нет нет да
Включены сервисы ранней стадии загрузки, написанные на языке C нет нет да
Возможность упреждающего чтения данных с диска нет нет[1] да
Активация сервисов на основе сокетов нет нет[1] да
Активация сервисов на основе сокетов: совместимость с inetd нет нет[2] да
Активация на основе шины (Bus-based Activation) нет нет[3] да
Активация на основе аппаратуры компьютера нет нет[4] да
Конфигурирование зависимостей устройств, используя правила udev нет нет да
Активация по событиям файловой системы (inotify) нет нет да
Активация по времени нет нет да
Управление точками монтирования нет нет[5] да
Управление запуском fsck нет нет[5] да
Управление квотами нет нет да
Управление автомонтированием нет нет да
Управление SWAP нет нет да
Сохранение снимков состояния системы (snapshotting) нет нет да
Поддержка XDG_RUNTIME_DIR нет нет да
Опциональная остановка процессов пользователя после его выхода из системы нет нет да
Интеграция с Linux Control Groups (cgroups) нет нет да
Генерация событий аудита для запускаемых сервисов нет нет да
Интеграция с SELinux нет нет да
Интеграция с PAM нет нет да
Управление шифрованными разделами и дисками (LUKS) нет нет да
Поддержка обработки паролей к LUKS и SSL-сертификатам, с запросом пароля через такие агенты, как Plymouth, консоли, wall, tty терминалов и GNOME нет нет да
Управление сетевым петлевым устройством (loopback) нет нет да
Управление binfmt_misc (поддержка неродных исполняемых файлов) нет нет да
Управление системной локалью нет нет да
Настройка параметров консоли и клавиатуры нет нет да
Инфраструктура для создания, удаления и чистки временных файлов нет нет да
Управление через /proc/sys sysctl нет нет да
Интеграция с plymouth (графическим запуском, используя KMS) нет нет да
Сохранение и восстановление random seed (состояния генератора энтропии) нет нет да
Поддержка статической загрузки модулей ядра нет нет да
Автоматическое управление консолью COM-порта нет нет да
Управление уникальным ID компьютера нет нет да
Управление динамическим именем хоста и метаданными компьютера нет нет да
Контролируемая остановка сервисов нет нет да
Поддержка раннего логирования через /dev/log нет нет да
Включает минимальный демон логирования на основе kmsg для встраиваемых систем нет нет да
Перезапуск сервисов в случае краха без потери соединения нет нет да
Бесшовное обновление сервисов нет нет да
Графический интерфейс пользователя (опционально) нет нет да
Встроена поддержка профилирования и расширенных инструментов нет нет да
Поддержка сервисов типа "instantiated" нет да да
Интеграция с PolicyKit нет нет да
Есть встроенные утилиты для удалённого доступа и управления кластером нет нет да
Может показать все процессы, принадлежащие сервису нет нет да
Может идентифицировать процессы сервиса нет нет да
Автоматически создаёт cgroups для сервисов для равномерного распределения времени CPU нет нет да
Аналогично для пользовательских процессов нет нет да
Совместимость с SysV да да да
Сервисы SysV контролируются как родные сервисы да нет да
Управление сервисами через /dev/initctl да нет да
Перезапуск сервисов с полной сериализацией (serialization) состояния да нет да
Поддержка интерактивного (управляемого) запуска системы нет[6] нет[6] да
Поддержка контейнеров (как расширенная замена chroot()) нет нет да
Загрузка, построенная на основе зависимостей нет[7] нет да
Отключение сервисов без редактирования файлов да нет да
Маскировка сервисов без редактирования файлов нет нет да
Надёжная остановка системы, используя только один процесс нет нет да
Встроенная поддержка перезапуска ядра на лету (kexec) нет нет да
Динамическая генерация сервисов нет нет да
Поддержка в других компонентах ОС да нет да
Файлы запуска сервисов, совместимые с различными дистрибутивами нет нет да
Отправка сигналов сервисам нет нет да
Надёжная остановка пользовательских сессий перед остановом системы нет нет да
Поддержка логирования в utmp/wtmp да да да
Легкие для написания, расширения и обработки файлы управления сервисами, подходящие для манипулирования инструментами управления предприятием нет нет да


[1] Реализация упреждающего чтения в Upstart доступна в виде отдельного пакета ureadahead и требует наложения патча на ядро
[2] Активация через сокеты в upstart является экспериментальной возможностью, а также не поддерживает сериализацию, поэтому вообще не подходит для этого.
[3] Активация через шину для upstart доступна пока только в виде патча, который в основную ветку разработки ещё не принят.
[4] реализация в upstart не является практичной.
[5] Данная возможность для upstart существует в виде отдельного пакета и работает только для монтирования во время загрузки, плохо поддерживая зависимости.
[6] Некоторые дистрибутивы реализуют эту возможность с помощью shell скриптов.
[7] Скрипты инициализации LSB поддерживают это, в случае если они используются.


От себя лично, хочется сказать о впечатлении о "переходе". Систему инициализации в хорошем смысле не видно, так как работает она под капотом, но меня поразила скорость загрузки. Нельзя сказать, что Upstart как-то медленно загружает систему, но всё же субъективно Systemd влёт грузит сервисы и вот сразу виден вход в систему LightDM. Хотя по мнению Леннарта (автора systemd) высокая скорость systemd - это всего лишь побочный результат правильного дизайна и архитектуры проекта, а не цель. Я не являюсь противником Леннарта Поттеринга (Lennart Poettering) и мне нравится systemd, который в будущем унифицирует во всех дистрибутивах линукс работу с сервисами. Вот только за это, стоит сказать спасибо!


Видео дня! Противостояние режимов Desktop vs Tablet в Unity 8 Ubuntu 15.04.

Дополнительные материалы:
Ubuntu 15.04 Vivid Vervet Alpha 1.

Дата последней правки: 2015-03-24 00:24:25

RSS vasilisc.com   


Разделы

Главная
Новости
Ворох бумаг
Видео Linux
Игры в Linux
Безопасность
Статьи об Astra Linux
Статьи о FreeBSD
Статьи об Ubuntu
Статьи о Snappy
Статьи об Ubuntu Phone
Статьи о Kubuntu
Статьи о Xubuntu
Статьи о Lubuntu
Статьи об Open Source
Карта сайта