Переход ubuntu на systemd

Обновлено: 04.07.2024

This document compares Upstart and systemd with a view to aiding in the transition to the latter.

First, it is important to note that systemd is only fully supported in Ubuntu 15.04 and later releases. While systemd is available in prior releases through the Ubuntu repositories, there is a deemphasis of support for these releases as noted here. Hence, it is advised to use the default upstart on prior releases.

This has changed as part of the Ubuntu 15.04 devel cycle.

If you are running Ubuntu vivid (15.04), you can easily switch between upstart and systemd at will since both packages are installed at present. As of March 9 2015, vivid was changed to use systemd by default, before that upstart was the default.

Switch to upstart for a single boot

In grub, select "Advanced options for Ubuntu", where you will find an "Ubuntu, with Linux . (upstart)" entry. This will boot with init=/sbin/upstart.

If you have upstart-sysv installed and thus boot with upstart by default, there will be an "Ubuntu, with Linux . (systemd)" entry, which will boot with init=/lib/systemd/systemd.

Permanent switch back to upstart

Install the upstart-sysv package, which will remove ubuntu-standard and systemd-sysv (but should not remove anything else -- if it does, yell!), and run sudo update-initramfs -u. After that, grub's "Advanced options" menu will have a corresponding "Ubuntu, with Linux . (systemd)" entry where you can do an one-time boot with systemd.

If you want to switch back to systemd, install the systemd-sysv and ubuntu-standard packages.

Upstart's model for starting processes (jobs) is "greedy event-based", i. e. all available jobs whose startup events happen are started as early as possible. During boot, upstart synthesizes some initial events like startup or rcS as the "tree root", the early services start on those, and later services start when the former are running. A new job merely needs to install its configuration file into /etc/init/ to become active.

systemd's model for starting processes (units) is "lazy dependency-based", i. e. a unit will only start if and when some other starting unit depends on it. During boot, systemd starts a "root unit" (default.target, can be overridden in grub), which then transitively expands and starts its dependencies. A new unit needs to add itself as a dependency of a unit of the boot sequence (commonly multi-user.target) in order to become active.

This maps the keywords that can occur in an upstart job to the corresponding ones in a systemd unit. Keywords which don't have a direct equivalent are marked with "-".

Ненавистникам Systemd можно ставить приписку "RIP" еще под одной ОС.

Статью Марка в оригинале смотреть тут.

PS - релиз 14.04 LTS еще будет с Upstart'ом.

Ненавистникам Systemd можно ставить приписку "RIP" еще под одной ОС.

Скорей всего таки выйдет. Jessie ориентировочно выходит весной 2015, итого - еще год до релиза 16.04.

В Ubuntu systemd будет включён опционально после того, как покажет себя стабильно в следующем релизе Debian'а

А куда оно денется? Я ещё ни одного косяка незаметил.

А куда оно денется? Я ещё ни одного косяка незаметил.
У меня был фееричный косяк (с 204 что ли версией), когда systemd отвалился от dbus. Вроде как работает, но ничего сделать нельзя абсолютно: даже reboot. В Fedora косяков с systemd уже нет. Пользуйтесь на здоровье.
Косяки вылезают при настройках, слегка отличных от умолчальных. Например, если не использовать tmpfs, /tmp не очищается при перезагрузке. По этому поводу Леннарт, помнится, как обычно заявил, что а) systemd тут ни при чём, б) надо использовать tmpfs и в) это не баг, а фича. Короче, closed wontfix. И такого много.
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик

Марк Шаттлворт (Mark Shuttleworth), основатель Linux-дистрибутива Ubuntu и компании Canonical, оперативно отреагировал на недавнее решение разработчиков Debian перейти на init-систему systemd. Debian GNU/Linux — «родительский» дистрибутив для Ubuntu; во многом именно благодаря труду разработчиков и сообщества Debian проект Ubuntu вообще существует, перенимая основную массу пакетов и связанных с ними технологий. Решение Debian в пользу systemd далось очень непросто (многие участники сообщества по-прежнему не согласны с этим выбором), а в Canonical на протяжении последних лет активно разрабатывали свою init-систему — Upstart, однако Марк просто и прямо прокомментировал случившееся, поставив преемственность от Debian во главу угла: «Несмотря на всё, принято решение в пользу systemd, и принимая во внимание тот факт, что Ubuntu — непосредственный участник семейства Debian, мы поддерживаем это решение». Пообещав способствовать переходу Ubuntu на systemd, Марк выразил благодарность и уважение всем разработчикам Upstart: «Upstart очень помог Ubuntu: он давал нам конкурентное преимущество, предоставляя очень стабильное решение во времена активных изменений в ядре Linux [..] и установив высокий стандарт для качества программного обеспечения, разрабатываемого во главе с Canonical, чем я очень горжусь». Реальная миграция Ubuntu на systemd начнется уже только после выпуска ближайшего LTS-релиза Ubuntu — 14.04 «Trusty Tahr», — в котором по-прежнему применяется Upstart. Леннарт Поттеринг (Lennart Poettering), работающий на systemd, поприветствовал публикацию Шаттлворта: «Это было непростое решение для Ubuntu, но я уверен, что оно правильное. Хочу поприветствовать Ubuntu в сообществе systemd! Надеюсь на плодотворное сотрудничество».

Как вы уже, наверное, знаете, что 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

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


[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 на систему инициализации systemd (pid 1) вслед за своим прародителем Debian. Но работы предстоит очень много. Система инициализации Upstart используется довольно таки давно и многое было завязано на неё.

Разработчик Мартин Питт (Martin Pitt) после UDS и одобрения Марка создал свой репозиторий для обкатки первых возможностей и устранения появившихся проблем. Но теперь первая ласточка systemd 204-10ubuntu1 появилась в родных репозиториях Utopic Unicorn в секции proposed. Правда Мартин честно предупреждает, что хоть после недавнего хакфеста с его коллегами из проектов Debian и Gnome они многое исправили в поддержке bluez, resolvconf и lightdm, но ранняя нестабильность присутствует.

Переход с одной системы инициализации ой как не прост и баги в этом вопросе - это не загруженные системы. Думаю, что осмотрительность и тестирование в виртуальных машинах, прежде чем обновлять свой компьютер, будет востребовано и оправдано. Разработчики никуда не торопятся, так как не протестирована ещё связь systemd + LXC, который активно используется в мобильной Ubuntu Phone.

Разработчики успокаивают тем, что никто в рамках релиза Ubuntu 14.10 Утопичный Единорог форсировать переход на systemd не будет! Вполне возможно переход затронет несколько релизов, ибо работы предстоит много.

Чтобы попробовать новую систему инициализации systemd и отписать о багах, можно во время загрузки системы Ubuntu попасть в меню и отредактировать строку запуска, добавить в linux line - init=/lib/systemd/systemd и продолжить загрузку клавишей F10.

Если вы чувствуете свои силы в управлении этой сложной ситуацией с переходом на ещё не стабильную новую систему инициализации, то можно сделать systemd системой по умолчанию в /etc/default/grub .

На данный момент выявлены проблемы со стартом сетевого моста LXCbr0, nvidia-prime, не поднимаются сетевые интерфейсы из /etc/network/interfaces, невозможно установить nfs-utils. Итого 9 открытых багов.

В своё время автор systemd Леннарт Поттеринг (личность, к которой у линуксоидов полярное мнение - от любви до ненависти) публиковал список возможностей. И стоит признать, что возможности systemd впечатляют и поддержка от основных дистрибутивов делает systemd стандартом де-факто в мире linux систем.


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

Читайте также: