Systemd/ru

systemd — это современная замена SysV-подобных init и rc (run command) для Linux-систем. Она поддерживается Gentoo в качестве альтернативной системы инициализации.

Ядро
systemd позволяет использовать многие современные возможности ядра Linux. На данный момент минимальная требуемая версия ядра — 2.6.39. В свежих версиях поддерживается удобный способ включения обязательных и опциональных параметров ядра для systemd:

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

Для UEFI систем, включите следующие:

Для систем, использующих планировщик BFQ, рекомендуется включить опцию "BFQ hierarchical scheduling support", находящуюся в блоке "Enable the block layer -> IO Schedulers".

Наиболее актуальный список необходимых опций можно найти в разделе "REQUIREMENTS" файла README.

Директория
Директория используется systemd и другими приложениями как временное хранилище для таких данных, как -файлы, сокеты и файлы состояния.

systemd создаст директорию самостоятельно. Однако обратите внимание, что это изменение также инициализирует автоматическое монтирование директории в OpenRC и может спровоцировать использование этой директории различными программными.

Последние версии поддерживают файл только в качестве символьной ссылки на. Отсутствие этой ссылки также может вызвать проблемы, связанные с  и. Раньше некоторые утилиты записывали информацию (вроде опций монтирования) в, и потому предполагалось, что он является обычным файлом; сейчас программное обеспечение не должно иметь проблем, связанных с этим. Последнее: прежде чем сделать символьной ссылкой, взгляните на, чтобы иметь уверенность, что система не подвержена ни одной из описанных проблем.

Чтобы создать символьную ссылку, запустите:

Убедитесь, что /usr доступен во время загрузки
Если расположен на отдельном разделе, используйте initramfs для монтирования  до запуска systemd. Смотрите Руководство по Initramfs в Gentoo.

Использование LVM2 и initramfs
Если система загружена с использованием initramfs, и используется sys-fs/lvm2, initramfs должна быть создана с использованием. Для этого запустите:

— это  или любой другой genkernel target, реализующий создание initramfs. Чтобы получить дополнительную информацию, смотрите :

При использовании LVM должен быть запущен демон. В противном случае systemd не сможет монтировать LVM-разделы. может быть включен в :

Установка
содержит udev. После установки systemd, пакет может быть удалён, так как systemd разрешает зависимость.

Активируйте USE-флаг  глобально (в файле ). USE-флаг  должен быть отключен, чтобы избежать конфликтов с сервисом. Также можно переключиться на субпрофиль systemd, чтобы использовать стандартный набор флагов (в этом случае отпадает необходимость ручной правки ):

Обновите систему с новыми флагами:

Причиной проблем с зависимостями (например, блокирует ), может быть то, что  зарегистрирован в файле world. Попробуйте решить эту проблему, отменив его:

Загрузка с systemd
Чтобы загрузиться с systemd, измените, который запускает ядро (или initramfs).

Следующие подсекции показывают, как переключить в некоторых загрузчиках или непосредственно в ядре.

Grub Legacy (0.x)
Необходимо добавить агрумент  в командную строку ядра. Соответствующий отрывок будет выглядеть примерно так:

Если система всё-таки загружается с OpenRC, попробуйте использовать  вместо.

Grub 2
При использовании добавьте опцию init в GRUB_CMDLINE_LINUX :

Если конфигурационный файл GRUB 2 написан вручную (только для опытных пользователей), добавьте параметр  для команды   или.

При использовании initrd, который сгенерирован genkernel-next, используйте  вместо.

В конфигурации ядра
Конфигурация init также может быть жёстко сконфигурирована в ядре. Смотрите. Обратите внимание, что это работает и для, и для.

Установка пароля root
В этом пункте не забудьте установить пароль root. Если что-то пойдет не так, systemd запросит пароль root для входа в режим технического обслуживания.

Настройка после установки
systemd поддерживает несколько конфигурационных файлов для настройки базовых параметров системы.

Имя хоста
Чтобы установить имя хоста, создайте или измените, просто прописав в нем желаемое имя.

Когда вы загрузились с systemd, используйте утилиту для редактирования  и. Чтобы изменить имя хоста, выполните:

Проверьте, если необходима информация о других опциях.

Локаль
При установке systemd, как правило, локали правильно переносятся из OpenRC. Когда требуется, локаль можно установить в согласно инструкциям из настольной книги Gentoo:

Загрузившись с systemd, можно использовать для настройки локали и раскладок в консоли или X11. Чтобы изменить системную локаль, используйте следующую команду:

Для изменения раскладки виртуальной консоли:

И, наконец, установка раскладки в X11:

Если нужна модель, вид и опции можно определить так:

Время и дата
Время и дату можно установить с помощью. Эта утилита так же позволит пользователям настроить синхронизацию без необходимости устанавливать или другого пакет, полагаясь только на средства systemd.

Чтобы понять, как использовать, просто выполните:

Автоматическая загрузка модулей
Автоматическая загрузка модулей настраивается с помощью разных файлов, или, скорее, каталога с файлами. Файлы настроек расположены в. При старте системы каждый такой файл со списком модулей будет загружен. Формат файла - это список модулей, каждый из которых начинается с новой строки, а сам файл может иметь любое имя, любой длины, но заканчивается на. Загрузочные модули можно разделить на модули для программ, служб или иным пользовательские предпочтения. В качестве примера ниже файл содержит:

systemd-networkd
Сервис systemd-networkd подойдет для простой настройки интерфейсов проводной сети. По умолчанию он выключен.

Для настройки systemd-networkd создайте файл в директории. Смотрите systemd.network(5) в качестве подробного источника. Простая DHCP конфигурация дана ниже:

Заметьте, по умолчанию systemd-networkd нет обновляет информацию в. Чтобы systemd управлял настройками DNS, замените на символическую ссылку и запустите systemd-resolved.

NetworkManager
Довольно часто для конфигурации сетевых настроек используется NetworkManager. Для этого просто выполните следующую команду когда используется рабочий стол X11:

Если это не тот случай и сеть требует настройки через консоль, то посмотрите nmcli или следуйте руководству по настройке через :

nmtui - здесь руководство по интерфейсу в режиме консоли.

Обработка лог-файлов
systemd имеет возможность обрабатывать лог-файлы без обращения к сторонним системам журналирования ( или ). Сообщения могут быть прочитаны через. Конечно, все еще можно настроить использование предпочтительного стороннего средства. Смотрите для изучения способов конфигурации journald.

Некоторые общие опции :

Для более детальной информации обратитесь к.

/tmp теперь в tmpfs
Если какая-либо другая файловая система не настроена на монтирование к в, то systemd смонтирует  как tmpfs. Это значит, что она будет стираться при каждой загрузке и её размер будет ограничен 50% от объема физической оперативной памяти. Чтобы узнать, почему этот алгоритм предпочтителен и как его изменить, посетите API File Systems.

Настройка процесса загрузки
При переходе на systemd пользователи обычно оповещены о разнице относительно процесса загрузки:


 * Опция загрузки  влияет не только на вывод ядра, но и на systemd. Тогда, пока systemd настраивается на машине, отбросьте эту опцию, чтобы увидеть любые возникающие ошибки. После этого, верните обратно для «тихой» (и более быстрой) загрузки.
 * Даже с опцией, systemd может выводить свой статус через.
 * Когда не используется, некоторые сообщения могут перезаписать старые в консоли. Это обусловлено конфигурацией ядра (см.  и ). Для корректировки вставьте   в загрузку ядра (и обновите значение в соответствии с предпочтением, к примеру, самое маленькое возможное значение равно 1).

Сервисы
В некоторых случаях систему необходимо перезагрузить, что бы дать systemd запуститься (в системном режиме). Будьте уверены после прочтения всего этого документа, что systemd до перезагрузки настроен в такой степени полно, насколько это возможно. Учтите, что можно пользоваться при незапущенном systemd, но  без systemd ничего сделать не сможет. Закончите настройку службы (включите и запустите) после входа в систему.

Сервисы OpenRC
Несмотря на то, что изначально systemd предназначен для поддержки запуска старых init.d скриптов, эта поддержка не лучшим образом подходит к RC, таким как OpenRC, и полностью отключена на Gentoo. OpenRC осуществляет дополнительные меры, чтобы обеспечивать защиту от запуска init.d скриптов, когда OpenRC не был использован для загрузки (в противном случае результаты непредсказуемы).

Просмотр доступных сервисов
Все доступные службы могут быть представлены в виде списка через аргумент  для :

Следующие окончания файлов представляют интерес:

В качестве альтернативы утилита может быть использована для отображения списка служб (включая скрытые):

И, наконец, проверьте не запустившиеся службы:

Включение, отключение, запуск и остановка служб
Обычный способ включить службу:

Служба может быть отключена:

Эти команды включают службы, используя их имена по умолчанию (определенные в файле конфигурации службы). Однако, иногда службы не содержат данной информации или пользователи предпочитают использовать другие значения.

Упомянутые команды только включают или выключают службы, эти изменения вступят в силу только при следующей загрузке; чтобы запустить службы сразу, используйте:

Службы могут быть остановлены:

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

Путь зарезервирован для служебных файлов, полученных через пакетный менеджер.

Пользовательская настройка файлов
Когда модуль претерпевает только незначительные изменения, нет нужды в создании полной копии его файла в. Переопределение настроек в управлении пакетами позволяет достигнуть этого перемещением файлов в после основной директории (например ) в.

Перезагрузка systemd необходима для принятия изменений:

После служба так же должна быть перезапущена:

Проверьте, что изменения были применены к службе:

Включение службы под пользовательским именем
Когда имя, определенное в "Alias" секции "[Install]", не соответствует ожиданиям и определение постоянного нового значения для этого через customization не требуется, можно создать символическую ссылку в. Имя директории может либо указать назначение, либо другую службу, зависящую от новой.

Например, чтобы установить как  в :

Для отключения сервиса просто удалите символическую ссылку:

Нативные сервисы
Некоторые пакеты Gentoo уже установлены с файлами модулей systemd. Для этих служб достаточно включить их. Общая информация о таких пакетах находится по адресу systemd eclass users list.

В следующей таблице приводится список сопоставимых systemd и OpenRC служб:

Сервисы таймеров
Начиная с версии 197, systemd поддерживает таймеры, делающие cron ненужным на системе с systemd. С версии 212 поддерживаются постоянные службы, заменяя anacron. Постоянные таймеры запустятся при следующей возможности, если система была выключена, когда таймер был запланирован.

Следующий пример показывает, как создать простой таймер, который запустится в контексте пользователя. Он запустится даже если пользователь не вошел в систему. Каждый раз служба нуждается в таймере, и ее файл активируется через таймер:

Firstly, tell systemd to rescan the service files:

It is possible to trigger the backup manually by running the following command:

Start and stop the timer manually as follows:

Finally, to activate the timer at every system start, run:

To check the last results of running the service:

Emailing failures
If a timed service runs and fails an e-mail can be send out to inform the user or administrator. This is possible with the "OnFailure" stanza which specifies what should happen if a service fails. A failure is detected by a non-zero return code of the invoked script.

For that change the script as follows:

This requires to have the service installed, which can be found in kylemanna's systemd-utils repository.

Замена cron
The above timer and service files can also be added to to make them available system-wide. The install section should then say  to enable the service at system start.

However, cron also runs the scripts in and other locations. Several packages place scripts there that they expect to be run daily. This behavior can be emulated with systemd by installing. Then activate the new cron replacement with the following commands:

Устранение проблем

 * Upstream debugging guide
 * Upstream debugging guide
 * Upstream debugging guide

Graphical sessions opened in random places
By default systemd only launches a process when it's going to be used. This causes some display managers (like GDM) to use the remaining TTYs for opening graphical sessions on demand, which can result in having consoles and graphical sessions placed randomly depending on the order they were used.

To stick with a more "classical" behavior (i.e, consoles placed from to  and graphical sessions using the remaining TTYs) force it to always launch  on those:

lvm
When switching from OpenRC to systemd and lvm is needed to properly mount the system volumes, activate the lvm service:

While it might not be needed for activation of the root volume (if lvm is integrated into the initramfs) it might not work for other lvm volumes, unless the service is activated.

systemd-bootchart
As systemd-bootchart attempts to start, reconfigure it to invoke systemd instead:

The result of the bootchart is a report in SVG format located in.

syslog-ng conflicts with systemd
systemd creates as datagram socket  so syslog-ng needs to be told to read from a unix-dgram instead of a unix-stream as otherwise syslog-ng would be using a "wrong" stream:

Настройка sys-fs/cryptsetup
systemd does not seem to respect (see ) so it needs to be configured through the  file:

You may need to create a new service file from your file. To do this, enable the  USE flag for. It will install. Executing it will create a service file in, which you can now copy to , adjust manually and add to the desired runlevel.

Check for units that failed to start
Check for units that failed to start with:

Включение режима отладки
To get more informations set the following in :

Or enable the debug-shell, that opens a terminal at tty9. This helps to debug services during the boot process.

Использование e4rat
Please remember to edit setting 'init' to, otherwise it will keep booting OpenRC.

GRSecurity hardening
With grsecurity enabled, systemd-networkd might log the following error:

The error raises due to systemd-networkd working under a non-root user with grsecurity refusing access to the complete structure for such users. To disable this option, disable the CONFIG_GRKERNSEC_SYSFS_RESTRICT kernel option.

Смотрите также

 * Comparison of init systems - An article comparing and contrasting the differences in Gentoo init systems.
 * Sakaki's EFI Install Guide - Particularly look at the chapter entitled Configuring systemd and installing necessary tools
 * OpenRC to Systemd Cheatsheet

Внешние источники

 * FAQ
 * Tips and tricks