Systemd: различия между версиями
м (+link) |
Amike (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
=== Установка systemd === | === Установка systemd === | ||
Пользователи Sisyphus могут уже установить systemd: | |||
<source lang="bash"> | <source lang="bash"> | ||
apt-get install systemd | apt-get install systemd | ||
</source> | </source> | ||
Строка 43: | Строка 28: | ||
Или просто установить systemd-sysvinit (пока не рекомендуется, так как в этом случае у вас возможности вернуться к SysVinit не будет). | Или просто установить systemd-sysvinit (пока не рекомендуется, так как в этом случае у вас возможности вернуться к SysVinit не будет). | ||
<source lang="bash">apt-get install systemd-sysvinit | <source lang="bash">apt-get install systemd-sysvinit </source> | ||
и ничего прописывть ядру не надо (в том числе и в lilo).<br> | и ничего прописывть ядру не надо (в том числе и в lilo).<br> | ||
==== Настройка перед первой перезагрузки ==== | |||
Так как на данный момент отсутствует механизм плавного перехода на systemd (состояние сервисов из init, не переносится на unit-ы), | |||
необходимо проверить все ли важные сервисы включены в systemd при старте, например: | |||
<source lang="bash">systemctl status NetworkManager.service | |||
NetworkManager.service - Network Manager | |||
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled) | |||
Active: active (running) since Sat, 12 May 2012 18:32:23 +0400; 2 days ago | |||
Main PID: 1077 (NetworkManager) | |||
CGroup: name=systemd:/system/NetworkManager.service | |||
├ 1077 /usr/sbin/NetworkManager --no-daemon | |||
└ 2011 /sbin/dhcpcd -B -K -L -G -c /usr/lib/NetworkManager/nm-dhcp-client.action -h io.office.altlinux... | |||
</source> | |||
где строка <source lang="bash">Loaded</source> показывает состояние unit-a, видно сервис <source lang="bash">enabled</source>, значит будет загружен при старте системы. | |||
Если стоит <source lang="bash">disable</source>, тогда включите сервис: | |||
<source lang="bash">systemctl enable NetworkManager.service</source> | |||
Список всех unit-ов и их статус можно получить командой: | |||
<source lang="bash">systemctl list-unit-files</source> | |||
Можно перезагружаться и пробовать. | |||
=== Дополнительные рекомендации === | === Дополнительные рекомендации === |
Версия от 20:27, 14 мая 2012
Для ALT Linux собран systemd. Решение, пока, сырое для продакшена.
Установка systemd
Пользователи Sisyphus могут уже установить systemd:
apt-get install systemd
Чтобы "попробовать" systemd, не переходя на него полностью, нужно временно прописать строчку init=/bin/systemd в параметры ядра. В lilo это можно сделать на этапе загрузки - когда выведется меню, набрать на клавиатуре init=/bin/systemd и нажать Enter. В случае каких-то проблем достаточно просто перезагрузить компьютер, и вернуться обратно к SysVinit.
Чтобы использовать systemd по умолчанию при загрузке, надо отредактировать /etc/sysconfig/grub2 и привести строку GRUB_CMDLINE_LINUX_DEFAULT к такому виду:
GRUB_CMDLINE_LINUX_DEFAULT='panic=30 init=/bin/systemd'
После редактирования этого файла нужно вызвать:
grub-mkconfig -o /boot/grub/grub.cfg
Для пользователей lilo нужно в /etc/lilo.conf, в строчку append="" дописать внутри кавычек init=/bin/systemd, после чего вызвать команду
lilo
Или просто установить systemd-sysvinit (пока не рекомендуется, так как в этом случае у вас возможности вернуться к SysVinit не будет).
apt-get install systemd-sysvinit
и ничего прописывть ядру не надо (в том числе и в lilo).
Настройка перед первой перезагрузки
Так как на данный момент отсутствует механизм плавного перехода на systemd (состояние сервисов из init, не переносится на unit-ы), необходимо проверить все ли важные сервисы включены в systemd при старте, например:
systemctl status NetworkManager.service
NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled)
Active: active (running) since Sat, 12 May 2012 18:32:23 +0400; 2 days ago
Main PID: 1077 (NetworkManager)
CGroup: name=systemd:/system/NetworkManager.service
├ 1077 /usr/sbin/NetworkManager --no-daemon
└ 2011 /sbin/dhcpcd -B -K -L -G -c /usr/lib/NetworkManager/nm-dhcp-client.action -h io.office.altlinux...
где строка
Loaded
показывает состояние unit-a, видно сервис
enabled
, значит будет загружен при старте системы. Если стоит
disable
, тогда включите сервис:
systemctl enable NetworkManager.service
Список всех unit-ов и их статус можно получить командой:
systemctl list-unit-files
Можно перезагружаться и пробовать.
Дополнительные рекомендации
- чтобы загружать модуль autofs4 как можно раньше добавьте:
MODULES_PRELOAD += autofs4
в /etc/initrd.mk (и перегенерите имидж, запустив make-initrd)
- systemd поддерживает загрузку модулей из /etc/modules-load.d/*.conf
- Из репо people/shaba нужен только chkconfig, всё остальное переехало в sisyphus.
Особенности
Неполное описание преимуществ в сравнении с upstart и SysV-init
(цитата отсюда - http://www.opennet.ru/opennews/art.shtml?num=27218)
- "systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, за счет активного использования возможностей сокетов, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб, используемый, например, в upstart. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств)."
Зачем переходить на systemd?
- быстрая загрузка -- важно для десктопов, иногда и для серверов тоже;
- более надежная загрузка, за счет параллельности. В отличии от sysvinit - подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки (тормоза с ntpd если приходится загружаться отключившись от сети, как пример);
- systemd это не просто запускалка сервисов. Оно еще и умеет их поддерживать запущеными (то, для чего я использую сейчас daemontools, а многие другие используют monit);
- более надежная система порядка запуска. Циферки, как известно, иногда приводят к тому что мантейнеры ошибаются. К счастью за годы мы многие такие баги вытоптали, но, увы, иногда появляются новые сервисы :) Указать зависимость между сервисами надежнее и предсказуемее нежели циферки.
Денис Смирнов http://lists.altlinux.org/pipermail/sisyphus/2011-March/353142.html
Ещё:
Q: И вот скажите мне, стоит ли бороться за то, что мой ноут загрузится на одну минуту быстрее раз в два месяца ?
A: Стоит бороться за то, что как только ты нажмешь hardware key для включения/выключения WiFi, соответственно
запустится/остановится нужный сервис, к примеру. А также что при втыкании bluetooth dongle -- поднимется bluetooth стек. А также что перед suspend часть сервисов таки остановится, а после suspend запустится заново.
Q: Или сервер, который перезагружается раз в год, сможет это сделать примерно на 8 секунд быстрее ?
A: Или что когда на этом сервере упадет сервис, его автоматом перезапустят. Из коробки. Без необходимости
настраивать monit (который в отличии от systemd неспособен отличить заглушили мы сервис сами -- или он упал).
Q: Я не спорю - где-то безусловно есть необходимость в systemd, но на мой взгляд лично для меня его польза сильно
преувеличена.
A:Скорость загрузки это полезный побочный эффект. К счастью, не единственный. Можно спорить о качестве реализации, но сам подход -- очень хороший. И существенно лучше sysvinit.
http://lists.altlinux.org/pipermail/sisyphus/2011-March/353143.html
См. тж. A few observations about systemd (debian-devel@) и ответ Леннарта.
Отладка systemd
О systemd на русском языке
- Systemd для администраторов
- Система инициализации Systemd. Часть I
- Система инициализации Systemd. Часть II