Systemd: различия между версиями

Материал из ALT Linux Wiki
м (→‎Зачем переходить на systemd?: мелкое исправление "фона" Q-A)
 
(не показаны 33 промежуточные версии 15 участников)
Строка 1: Строка 1:
[[Категория:Admin]]
{{W}}
 
Для ALT Linux [http://lists.altlinux.org/pipermail/sisyphus/2011-January/351784.html собран systemd]. Решение, пока, сырое для продакшена.


Для ALT Linux [http://lists.altlinux.org/pipermail/sisyphus/2011-January/351784.html собран systemd].
=== Установка systemd ===
=== Установка systemd ===
Пользователи Sisyphus могут уже установить systemd:
Пользователи Sisyphus могут уже установить systemd:
Строка 10: Строка 9:
</source>
</source>


Чтобы "попробовать" systemd, не переходя на него полностью, нужно временно прописать строчку init=/bin/systemd в параметры ядра. В lilo это можно сделать на этапе загрузки - когда выведется меню, набрать на клавиатуре init=/bin/systemd и нажать Enter. В случае каких-то проблем достаточно просто перезагрузить компьютер, и вернуться обратно к SysVinit.
Чтобы "попробовать" systemd, не переходя на него полностью, нужно временно прописать строчку init=/sbin/systemd в параметры ядра. В lilo это можно сделать на этапе загрузки - когда выведется меню, набрать на клавиатуре init=/sbin/systemd и нажать Enter. В случае каких-то проблем достаточно просто перезагрузить компьютер, и вернуться обратно к SysVinit.


Чтобы использовать systemd по умолчанию при загрузке, надо отредактировать {{path|/etc/sysconfig/grub2}} и
Чтобы использовать systemd по умолчанию при загрузке, надо отредактировать {{path|/etc/sysconfig/grub2}} и
Строка 16: Строка 15:


<pre>
<pre>
GRUB_CMDLINE_LINUX_DEFAULT='panic=30 init=/bin/systemd'
GRUB_CMDLINE_LINUX_DEFAULT='panic=30 init=/sbin/systemd'
</pre>
</pre>


Строка 23: Строка 22:
<source lang="bash">grub-mkconfig -o /boot/grub/grub.cfg</source>
<source lang="bash">grub-mkconfig -o /boot/grub/grub.cfg</source>


Для пользователей lilo нужно в /etc/lilo.conf, в строчку append="" дописать внутри кавычек init=/bin/systemd, после чего вызвать команду  
Для пользователей lilo нужно в /etc/lilo.conf, в строчку append="" дописать внутри кавычек init=/sbin/systemd, после чего вызвать команду  
<source lang="bash">lilo</source>
<source lang="bash">lilo</source>


Строка 30: Строка 29:
<source lang="bash">apt-get install systemd-sysvinit </source>
<source lang="bash">apt-get install systemd-sysvinit </source>


и ничего прописывть ядру не надо (в том числе и в lilo).<br>
и ничего прописывать ядру не надо (в том числе и в lilo).


==== Настройка перед первой перезагрузки ====
''Не надо использовать два способа одновременно.''
 
==== Настройка перед первой перезагрузкой ====


Так как на данный момент отсутствует механизм плавного перехода на systemd (состояние сервисов из init, не переносится на unit-ы),  
Так как на данный момент отсутствует механизм плавного перехода на systemd (состояние сервисов из init, не переносится на unit-ы),  
необходимо проверить все ли важные сервисы включены в systemd при старте, например:
необходимо руками создать символические ссылки для важных стартующих сервисов (вроде NetworkManager.service)или при первой загрузке, скорее всего придётся подождать несколько минут, пока systemd даст консоль.


<source lang="bash">systemctl status NetworkManager.service
Чтобы network.service запустился выполнить команды:
NetworkManager.service - Network Manager
 
          Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled)
<source lang="bash">
          Active: active (running) since Sat, 12 May 2012 18:32:23 +0400; 2 days ago
# ln -s '/lib/systemd/system/network.service' '/etc/systemd/system/network.target.wants/network.service'
        Main PID: 1077 (NetworkManager)
# ln -s '/lib/systemd/system/network.target' '/etc/systemd/system/multi-user.target.wants/network.target'
          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>
где строка <source lang="bash">Loaded</source> показывает состояние unit-a, видно сервис <source lang="bash">enabled</source>, значит будет загружен при старте системы.


Если стоит <source lang="bash">disable</source>, тогда включите сервис:
Для NetworkManager:


<source lang="bash">systemctl enable NetworkManager.service</source>
<source lang="bash">
# ln -s '/lib/systemd/system/NetworkManager.service' '/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service'
# ln -s '/lib/systemd/system/NetworkManager.service' '/etc/systemd/system/network.target.wants/NetworkManager.service'
</source>


Список всех unit-ов и их статус можно получить командой:
Можно перезагружаться и пробовать.


<source lang="bash">systemctl list-unit-files</source>
=== NFS и LDAP ===
 
Если вы используете LDAP и/или NFS (например, офисная сеть на Кентавре/Ковчеге), то после установки systemd вместо sysvinit у вас ничего работать не будет.
 
Для быстрого исправления нужно:
Можно перезагружаться и пробовать.
* дополнительно к NetworkManager включить сервис NetworkManager-wait-online.service:
<source lang="bash">
systemctl enable NetworkManager-wait-online.service
</source>
* в /etc/fstab во все записи сетевых ресурсов добавить опцию _netdev или x-systemd.automount (согласно FAQ: http://www.altlinux.org/FAQ)
* дополнительно включить сервисы nfslock, idmapd и сопутствующие, если понадобится (аналогично systemctl enable)


=== Дополнительные рекомендации ===
=== Дополнительные рекомендации ===
* чтобы загружать модуль autofs4 как можно раньше добавьте:
* чтобы загружать модуль autofs4 как можно раньше, добавьте в /etc/initrd.mk:
<source lang="bash">MODULES_PRELOAD += autofs4</source>
<source lang="bash">MODULES_PRELOAD += autofs4</source>
в /etc/initrd.mk (и перегенерите имидж, запустив make-initrd)
и перегенерите имидж, запустив make-initrd.


* systemd поддерживает загрузку модулей из /etc/modules-load.d/*.conf
* systemd поддерживает загрузку модулей из /etc/modules-load.d/*.conf


* Из репо people/shaba нужен только chkconfig, всё остальное переехало в sisyphus.
* время загрузки разных сервисов можно узнать утилитой systemd-analyze из одноименного пакета.
 
* если на разделе есть ошибки, для отключения его остановки добавьте для него опцию {{term|nofail}} в {{path|/etc/fstab}}


===Особенности===
===Особенности===
Строка 72: Строка 79:
(цитата отсюда - http://www.opennet.ru/opennews/art.shtml?num=27218)
(цитата отсюда - http://www.opennet.ru/opennews/art.shtml?num=27218)


:"systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, за счет активного использования возможностей сокетов, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб, используемый, например, в upstart. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств)."  
:"systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, за счет активного использования возможностей сокетов, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб, используемый, например, в upstart. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств)."
 
Новинкой является и убивание <tt>screen</tt> после завершения сессии, из которой тот был запущен; если данное новшество чрезмерно революционно, установите способствующий передвижению пакет {{pkg|systemd-settings-disable-kill-user-processes}}.
 
===Зачем переходить на systemd?===
===Зачем переходить на systemd?===
#быстрая загрузка -- важно для десктопов, иногда и для серверов тоже;
#быстрая загрузка -- важно для десктопов, иногда и для серверов тоже;
#более надежная загрузка, за счет параллельности. В отличии от sysvinit - подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки (тормоза с ntpd если приходится загружаться отключившись от сети, как пример);
#более надежная загрузка за счет параллельности. В отличие от sysvinit - подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки (тормоза с ntpd, если приходится загружаться, отключившись от сети, как пример);
#systemd это не просто запускалка сервисов. Оно еще и умеет их поддерживать запущеными (то, для чего я использую сейчас daemontools, а многие другие используют monit);
#systemd это не просто запускалка сервисов. Оно еще и умеет их поддерживать запущенными (то, для чего я использую сейчас daemontools, а многие другие используют monit);
#более надежная система порядка запуска. Циферки, как известно, иногда приводят к тому что мантейнеры ошибаются. К счастью за годы мы многие такие баги вытоптали, но, увы, иногда появляются новые сервисы :) Указать зависимость между сервисами надежнее и предсказуемее нежели циферки.<br>
#более надежная система порядка запуска. Циферки, как известно, иногда приводят к тому, что мейнтейнеры ошибаются. К счастью, за годы мы многие такие баги вытоптали, но, увы, иногда появляются новые сервисы :) Указать зависимость между сервисами надежнее и предсказуемее, нежели циферки.<br>
Денис Смирнов http://lists.altlinux.org/pipermail/sisyphus/2011-March/353142.html
Денис Смирнов http://lists.altlinux.org/pipermail/sisyphus/2011-March/353142.html
<br>Ещё:
<br>Ещё:
  Q: И вот скажите мне, стоит ли бороться за то, что мой ноут загрузится на одну минуту быстрее раз в два месяца ?
  Q: И вот скажите мне, стоит ли бороться за то, что мой ноут загрузится на одну минуту быстрее раз в два месяца?
 
  A: Стоит бороться за то, что как только ты нажмешь hardware key для включения/выключения WiFi, соответственно <br>запустится/остановится нужный сервис, к примеру.
  A: Стоит бороться за то, что как только ты нажмешь hardware key для включения/выключения WiFi, соответственно запустится/остановится нужный сервис, к примеру.
  А также что при втыкании bluetooth dongle -- поднимется bluetooth стек.
  А также что при втыкании bluetooth dongle -- поднимется bluetooth стек.
  А также что перед suspend часть сервисов таки остановится, а после suspend запустится заново.
  А также что перед suspend часть сервисов таки остановится, а после suspend запустится заново.


  Q: Или сервер, который перезагружается раз в год, сможет это сделать примерно на 8 секунд быстрее ?
  Q: Или сервер, который перезагружается раз в год, сможет это сделать примерно на 8 секунд быстрее?
A: Или что когда на этом сервере упадет сервис, его автоматом перезапустят. Из коробки. Без необходимости настраивать monit <s>(который, в отличие от systemd, неспособен отличить, заглушили мы сервис сами или он упал)</s><ref>ещё как способен, если сказать {{cmd|monit unmonitor сервис}}</ref>.


A: Или что когда на этом сервере упадет сервис, его автоматом перезапустят. Из коробки. Без необходимости <br>настраивать monit (который в отличии от systemd неспособен отличить заглушили мы сервис сами -- или он упал).
''хотя правильнее починить этот сервис, а не делать систему из подпорок''


  Q: Я не спорю - где-то безусловно есть необходимость в systemd, но на мой взгляд лично для меня его польза сильно<br> преувеличена.
  Q: Я не спорю - где-то безусловно есть необходимость в systemd, но на мой взгляд, лично для меня его польза сильно преувеличена.
 
  A:Скорость загрузки это полезный побочный эффект. К счастью, не единственный.
  A: Скорость загрузки -- это полезный побочный эффект. К счастью, не единственный. Можно спорить о качестве реализации, но сам подход -- очень хороший. И существенно лучше sysvinit.<ref>...особенно когда ждём свопа, заботливо отформатированного установкой альта на соседний диск, сколько там минут?</ref>
Можно спорить о качестве реализации, но сам подход -- очень хороший. И существенно лучше sysvinit.  
http://lists.altlinux.org/pipermail/sisyphus/2011-March/353143.html
http://lists.altlinux.org/pipermail/sisyphus/2011-March/353143.html


См. тж. [http://lists.debian.org/debian-devel/2011/07/msg00269.html A few observations about systemd] (debian-devel@) и [http://lists.debian.org/debian-devel/2011/07/msg00281.html ответ Леннарта].
См. тж. [http://lists.debian.org/debian-devel/2011/07/msg00269.html A few observations about systemd] (debian-devel@) и [http://lists.debian.org/debian-devel/2011/07/msg00281.html ответ Леннарта].


=== Отладка systemd ===
=== Отладка systemd ===
Строка 103: Строка 113:


=== О systemd на русском языке ===
=== О systemd на русском языке ===
* [http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2 Systemd для администраторов]
* [http://ru.opensuse.org/SDB:Systemd Статья начального уровня] на openSUSE.org
* [https://wiki.archlinux.org/index.php/Systemd_(Русский) Русский перевод статьи про systemd на  ArchWiki]
* [http://www.opennet.ru/man.shtml?topic=systemd Перевод systemd(1)] на OpenNET
* [http://wiki.opennet.ru/Systemd_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%BE%D0%B2 Systemd для администраторов] на OpenNET, [http://lexpr.ru/node/498 существенно более актуальная версия перевода] и [http://www2.kangran.su/~nnz/pub/s4a/ ещё более актуальная версия перевода в TeX/PDF]
* [http://tux-the-penguin.blogspot.com/2010/09/systemd.html Система инициализации Systemd. Часть I]
* [http://tux-the-penguin.blogspot.com/2010/09/systemd.html Система инициализации Systemd. Часть I]
* [http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html Система инициализации Systemd. Часть II]
* [http://tux-the-penguin.blogspot.com/2010/09/systemd-ii.html Система инициализации Systemd. Часть II]


===
== Ссылки ==
*[[Journald]]
*[[Участник:HihinRuslan/Systemd|Улучшаем Systemd]]
*[[БыстраяЗаменаCrontabНаTimers|Простая замена crontab'ов на таймеры systemd]]
*[[Systemd-timesyncd|Синхронизация времени со внешними источниками посредством systemd]]
 
== Примечания ==
<references/>
 
{{Category navigation|title=Системному администратору|category=Admin|sortkey={{SUBPAGENAME}}}}
[[category:systemd]]

Текущая версия от 11:49, 27 апреля 2023

Логотип Википедии
В Википедии есть обзорная статья по теме «Systemd».

Для ALT Linux собран systemd.

Установка systemd

Пользователи Sisyphus могут уже установить systemd:

apt-get install systemd

Чтобы "попробовать" systemd, не переходя на него полностью, нужно временно прописать строчку init=/sbin/systemd в параметры ядра. В lilo это можно сделать на этапе загрузки - когда выведется меню, набрать на клавиатуре init=/sbin/systemd и нажать Enter. В случае каких-то проблем достаточно просто перезагрузить компьютер, и вернуться обратно к SysVinit.

Чтобы использовать systemd по умолчанию при загрузке, надо отредактировать /etc/sysconfig/grub2 и привести строку GRUB_CMDLINE_LINUX_DEFAULT к такому виду:

GRUB_CMDLINE_LINUX_DEFAULT='panic=30 init=/sbin/systemd'

После редактирования этого файла нужно вызвать:

grub-mkconfig -o /boot/grub/grub.cfg

Для пользователей lilo нужно в /etc/lilo.conf, в строчку append="" дописать внутри кавычек init=/sbin/systemd, после чего вызвать команду

lilo

Или просто установить systemd-sysvinit (пока не рекомендуется, так как в этом случае у вас возможности вернуться к SysVinit не будет).

apt-get install systemd-sysvinit

и ничего прописывать ядру не надо (в том числе и в lilo).

Не надо использовать два способа одновременно.

Настройка перед первой перезагрузкой

Так как на данный момент отсутствует механизм плавного перехода на systemd (состояние сервисов из init, не переносится на unit-ы), необходимо руками создать символические ссылки для важных стартующих сервисов (вроде NetworkManager.service)или при первой загрузке, скорее всего придётся подождать несколько минут, пока systemd даст консоль.

Чтобы network.service запустился выполнить команды:

# ln -s '/lib/systemd/system/network.service' '/etc/systemd/system/network.target.wants/network.service'
# ln -s '/lib/systemd/system/network.target' '/etc/systemd/system/multi-user.target.wants/network.target'

Для NetworkManager:

# ln -s '/lib/systemd/system/NetworkManager.service' '/etc/systemd/system/dbus-org.freedesktop.NetworkManager.service'
# ln -s '/lib/systemd/system/NetworkManager.service' '/etc/systemd/system/network.target.wants/NetworkManager.service'

Можно перезагружаться и пробовать.

NFS и LDAP

Если вы используете LDAP и/или NFS (например, офисная сеть на Кентавре/Ковчеге), то после установки systemd вместо sysvinit у вас ничего работать не будет. Для быстрого исправления нужно:

  • дополнительно к NetworkManager включить сервис NetworkManager-wait-online.service:
systemctl enable NetworkManager-wait-online.service
  • в /etc/fstab во все записи сетевых ресурсов добавить опцию _netdev или x-systemd.automount (согласно FAQ: http://www.altlinux.org/FAQ)
  • дополнительно включить сервисы nfslock, idmapd и сопутствующие, если понадобится (аналогично systemctl enable)

Дополнительные рекомендации

  • чтобы загружать модуль autofs4 как можно раньше, добавьте в /etc/initrd.mk:
MODULES_PRELOAD += autofs4

и перегенерите имидж, запустив make-initrd.

  • systemd поддерживает загрузку модулей из /etc/modules-load.d/*.conf
  • время загрузки разных сервисов можно узнать утилитой systemd-analyze из одноименного пакета.
  • если на разделе есть ошибки, для отключения его остановки добавьте для него опцию nofail в /etc/fstab

Особенности

Неполное описание преимуществ в сравнении с upstart и SysV-init
(цитата отсюда - http://www.opennet.ru/opennews/art.shtml?num=27218)

"systemd (system daemon) реализует принципиально новый подход к инициализации и контролю работы системы. Одним из ключевых новшеств этого подхода является высокая степень параллелизации запуска служб при инициализации системы, за счет активного использования возможностей сокетов, что в перспективе позволяет добиться гораздо более высокой скорости, чем традиционный подход с последовательным запуском взаимозависимых служб, используемый, например, в upstart. Другим важным моментом является контроль над точками монтирования (не-жизненно-важные файловые системы можно монтировать только при первом обращении к ним, не тратя на это время при инициализации системы) и устройствами (можно запускать и останавливать определенные службы и при появлении или удалении заданных устройств)."

Новинкой является и убивание screen после завершения сессии, из которой тот был запущен; если данное новшество чрезмерно революционно, установите способствующий передвижению пакет systemd-settings-disable-kill-user-processes.

Зачем переходить на systemd?

  1. быстрая загрузка -- важно для десктопов, иногда и для серверов тоже;
  2. более надежная загрузка за счет параллельности. В отличие от sysvinit - подвисание при запуске одного сервиса не приведет к остановке всего процесса загрузки (тормоза с ntpd, если приходится загружаться, отключившись от сети, как пример);
  3. systemd это не просто запускалка сервисов. Оно еще и умеет их поддерживать запущенными (то, для чего я использую сейчас daemontools, а многие другие используют monit);
  4. более надежная система порядка запуска. Циферки, как известно, иногда приводят к тому, что мейнтейнеры ошибаются. К счастью, за годы мы многие такие баги вытоптали, но, увы, иногда появляются новые сервисы :) Указать зависимость между сервисами надежнее и предсказуемее, нежели циферки.

Денис Смирнов 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, неспособен отличить, заглушили мы сервис сами или он упал)[1].

хотя правильнее починить этот сервис, а не делать систему из подпорок

Q: Я не спорю - где-то безусловно есть необходимость в systemd, но на мой взгляд, лично для меня его польза сильно преувеличена.

A: Скорость загрузки -- это полезный побочный эффект. К счастью, не единственный. Можно спорить о качестве реализации, но сам подход -- очень хороший. И существенно лучше sysvinit.[2]

http://lists.altlinux.org/pipermail/sisyphus/2011-March/353143.html

См. тж. A few observations about systemd (debian-devel@) и ответ Леннарта.

Отладка systemd

О systemd на русском языке

Ссылки

Примечания

  1. ещё как способен, если сказать monit unmonitor сервис
  2. ...особенно когда ждём свопа, заботливо отформатированного установкой альта на соседний диск, сколько там минут?