systemd

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page Systemd and the translation is 100% complete.

Other languages:
English • ‎español • ‎italiano • ‎日本語 • ‎한국어 • ‎português do Brasil • ‎русский • ‎中文(中国大陆)‎
Resources

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

Contents

Установка

Заметка
При обновлении с <=sys-apps/systemd-203 обратите внимание на статью по обновлению.

Ядро

systemd позволяет использовать многие современные возможности ядра Linux. На данный момент минимальная требуемая версия ядра — 2.6.39. В свежих версиях sys-kernel/gentoo-sources поддерживается удобный способ включения обязательных и опциональных параметров ядра для systemd (смотрите Ядро/Конфигурация для получения дополнительной информации):

Ядро Быстрая настройка, если используется gentoo-sources
Gentoo Linux --->
        Support for init systems, system and service managers --->
                [*] systemd

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

Ядро Обязательные опции
General setup  --->
	[*] open by fhandle syscalls
	[*] Control Group support --->
	[ ] Enable deprecated sysfs features to support old userspace tools
	[*] Configure standard kernel features (expert users)  --->
		[*] Enable eventpoll support
		[*] Enable signalfd() system call
		[*] Enable timerfd() system call
[*] Networking support --->
Device Drivers  --->
	Generic Driver Options  --->
		[*] Maintain a devtmpfs filesystem to mount at /dev
File systems  --->
	[*] Inotify support for userspace
	Pseudo filesystems  --->
		[*] /proc file system support
		[*] sysfs file system support
Ядро Рекомендуемые опции
General setup  --->
        [*] Checkpoint/restore support
	[*] Namespaces support  --->
		[*] Network namespace
[*] Enable the block layer  --->
	[*] Block layer SG support v4
Processor type and features  --->
	[*] Enable seccomp to safely compute untrusted bytecode
Networking support --->
	Networking options --->
		<*> The IPv6 protocol
Device Drivers  --->
	Generic Driver Options  --->
		()  path to uevent helper
		[ ] Fallback user-helper invocation for firmware loading
Firmware Drivers  --->
	[*] Export DMI identification via sysfs to userspace
File systems --->
	<*> Kernel automounter version 4 support (also supports v3)
	Pseudo filesystems --->
		[*] Tmpfs virtual memory file system support (former shm fs)
		[*]   Tmpfs POSIX Access Control Lists
		[*]   Tmpfs extended attributes

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

Ядро Поддержка UEFI
[*] Enable the block layer  --->
	Partition Types  --->
		[*] Advanced partition selection
		[*]   EFI GUID Partition support
Processor type and features  --->
	[*] EFI runtime service support
Firmware Drivers  --->
        EFI (Extensible Firmware Interface) Support -->
	        <*> EFI Variable Support via sysfs

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

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

/etc/mtab

Последние версии поддерживают файл /etc/mtab только в качестве символьной ссылки на /proc/self/mounts. Отсутствие этой ссылки также может вызвать проблемы, связанные с mount (bug #434090) и df (bug #477240). Раньше некоторые утилиты записывали информацию (вроде опций монтирования) в /etc/mtab, и потому предполагалось, что он является обычным файлом; сейчас программное обеспечение не должно иметь проблем, связанных с этим. Последнее: прежде чем сделать /etc/mtab символьной ссылкой, взгляните на bug #477498, чтобы удостовериться, что система не подвержена ни одной из описанных проблем.

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

root #ln -sf /proc/self/mounts /etc/mtab

Убедитесь, что /usr доступен во время загрузки

Если /usr расположен на отдельном разделе, используйте initramfs для монтирования /usr до запуска systemd. На данный момент это означает использование sys-kernel/dracut или sys-kernel/genkernel-next до поддержки /usr в sys-kernel/genkernel. Выделите время для миграции:

root #emerge --ask --unmerge sys-kernel/genkernel
root #emerge --ask sys-kernel/dracut
root #emerge --ask sys-kernel/genkernel-next

Если используете dracut, включите модуль usrmount, если он не включен автоматически, для монтирования /usr.

Файл /etc/dracut/dracut.conf
# Включение модуля для dracut
add_dracutmodules+="usrmount"

Если используется genkernel-next, то до того, как пересобрать ядро, удостоверьтесь в установке значения yes для переменной UDEV в файле конфигурации genkernel. Это затянет /usr в initramfs:

Файл /etc/genkernel.conf
# Использование udev вместо mdev в качестве стандартного менеджера устройств для initramfs.
# Если используется systemd и, возможно, lvm, тогда это необходимо включить.
UDEV="yes"
root #genkernel --install all

Смотрите гайд по initramfs для других альтернатив.

Использование LVM и initramfs

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

root #genkernel --udev --lvm <target>

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

user $genkernel --help

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

Файл /etc/lvm/lvm.confНеобходимые изменения lvm.conf
# Set use_lvmetad to '1' for systemd
use_lvmetad = 1
Заметка
Вместо изменения /etc/lvm/lvm.conf этого можно было бы достичь с помощью юнита lvmetad.socket, который активирует сервис lvmetad.service, но текущие версии sys-fs/lvm2 пока не поддерживают такую возможность.

USE-флаги

USE flags for sys-apps/systemd System and service manager for Linux

acl Add support for Access Control Lists global
apparmor Enable AppArmor support local
audit Enable support for sys-process/audit local
build !!internal use only!! DO NOT SET THIS FLAG YOURSELF!, used for creating build images and the first half of bootstrapping [make stage1] global
cryptsetup Enable cryptsetup tools (includes unit generator for crypttab) local
curl Enable support for uploading journals; required to build systemd-import/systemd-pull local
elfutils Enable coredump stacktraces in the journal local
gcrypt Enable sealing of journal files using gcrypt; required to build systemd-import/systemd-pull local
gnuefi Enable EFI boot manager and stub loader (built using sys-boot/gnu-efi) local
http Enable embedded HTTP server in journald local
idn Enable support for Internationalized Domain Names global
importd Enable import daemon local
kmod Enable kernel module loading via sys-apps/kmod local
libidn2 If IDN support is enabled, use net-dns/libidn2 instead of net-dns/libidn local
lz4 Enable lz4 compression for the journal local
lzma Support for LZMA (de)compression algorithm global
nat Enable support for network address translation in networkd local
pam Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip global
policykit Enable PolicyKit authentication support global
qrcode Enable qrcode output support in journal local
seccomp Enable seccomp (secure computing mode) to perform system call filtering at runtime to increase security of programs global
selinux !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur global
ssl Add support for Secure Socket Layer connections global
sysv-utils Install sysvinit compatibility symlinks and manpages for init, telinit, halt, poweroff, reboot, runlevel, and shutdown local
test Workaround to pull in packages needed to run with FEATURES=test. Portage-2.1.2 handles this internally, so don't set it in make.conf/package.use anymore global
vanilla Disable Gentoo-specific behavior and compatibility quirks local
xkb Depend on x11-libs/libxkbcommon to allow logind to control the X11 keymap local

Установка

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

root #eselect profile list

Обновите систему с новым профилем:

root #emerge -avDN @world

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

sys-apps/systemd содержит udev. После установки systemd, пакет sys-fs/udev может быть удалён, так как systemd разрешает зависимость virtual/udev.

root #emerge --deselect sys-fs/udev

Загрузчик

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

Предупреждение
Сервисы, настроенные для менеджера сервисов, который использовался ранее, не будут запускаться автоматически. Это обусловлено переходом на другой менеджер сервисов. Чтобы восстановить функциональность таких сервисов, как сетевые сервисы или login-менеджер, необходимо снова активировать эти сервисы. Больше информации об этом можно найти в секции сервисы далее в этой статье.
Заметка
Если переход на systemd вызывает проблемы, всегда можно вернуться к стандартному менеджеру сервисов (OpenRC), изменив init. Это позволяет откатиться к исходному состоянию системы и перейти к решению проблем, руководствуясь соответствующей секцией этой статьи.

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

GRUB Legacy (0.x)

Необходимо добавить агрумент init=/usr/lib/systemd/systemd в командную строку ядра. Соответствующий отрывок grub.conf будет выглядеть примерно так:

Файл /boot/grub/grub.confПример конфигурационного файла GRUB для systemd
title=Gentoo with systemd
root (hd0,0)
kernel /vmlinuz root=/dev/sda2 init=/usr/lib/systemd/systemd

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

GRUB 2

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

Заметка
В этом нет необходимости, если используется initramfs, сгенерированную dracut с systemd внутри, так как initramfs запускает systemd.
Файл /etc/default/grubНастройка GRUB2 для systemd
# Добавление параметров в командную строку ядра linux
GRUB_CMDLINE_LINUX="init=/usr/lib/systemd/systemd"

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

Файл /boot/grub/grub.cfgФрагмент примера конфигурации GRUB2
linux /vmlinuz-3.10.9 root=UUID=508868e4-54c6-4e6b-84b0-b3b28b1656b6 init=/usr/lib/systemd/systemd

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

Заметка
Использование устаревшего real_init не является необходимым для стабильных версий genkernel-next.

В конфигурации ядра

Конфигурация init также может быть жёстко сконфигурирована в ядре. Смотрите Processor type and features -> Built-in kernel command line. Обратите внимание, что это работает и для grub, и для grub2.

Конфигурация

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

Заметка
В то время, как некоторые параметры системной конфигурации могут быть обновлены путем внесения изменений в соответствующие им файлы, большинство настроек настраиваются с помощью утилит, которым необходим запущенный systemd. В этом случае, необходимо аккуратно перезагрузить компьютер в systemd и использовать требуемые утилиты hostnamectl, localectl и timedatectl.

Machine ID

Создайте machine ID работы журналирования. Это можно сделать следующей командой:

root #systemd-machine-id-setup

Имя хоста

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

Когда система загружена с systemd, используйте утилиту hostnamectl для редактирования /etc/hostname и /etc/machine-info. Чтобы изменить имя хоста, выполните:

root #hostnamectl set-hostname <HOSTNAME>

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


Локаль

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

Файл /etc/locale.confНастройка системной локали
LANG="en_US.utf8"

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

root #localectl set-locale LANG=<LOCALE>

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

root #localectl set-keymap <KEYMAP>

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

root #localectl set-x11-keymap <LAYOUT>

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

root #localectl set-x11-keymap <LAYOUT> <MODEL> <VARIANT> <OPTIONS>

Время и дата

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

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

root #timedatectl --help

Автоматическая загрузка модулей

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

Файл /etc/modules-load.d/virtualbox.confПример файла для модулей virtualbox
vboxdrv
vboxnetflt
vboxnetadp
vboxpci

Сеть

systemd-networkd

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

Для настройки systemd-networkd создайте файл

  • .network в директории /etc/systemd/network. Смотрите systemd.network(5) в качестве подробного источника. Простая DHCP конфигурация дана ниже:
Файл /etc/systemd/network/50-dhcp.network
[Match]
Name=en*
 
[Network]
DHCP=yes
root #systemctl enable systemd-networkd.service
root #systemctl start systemd-networkd.service

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

root #ln -snf /run/systemd/resolve/resolv.conf /etc/resolv.conf
root #systemctl enable systemd-resolved.service
root #systemctl start systemd-resolved.service

NetworkManager

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

root #nm-connection-editor

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

root #nmtui

nmtui - это интерфейс на основе curses, запускаемый в консоле, который может помочь пользователям с настройкой сетевых интерфейсов.

Обработка лог-файлов

systemd имеет возможность обрабатывать лог-файлы без обращения к сторонним системам журналирования (app-admin/syslog-ng или app-admin/rsyslog). Сообщения могут быть прочитаны через journalctl. Конечно, все еще можно настроить использование предпочтительного стороннего средства. Смотрите man journald.conf для изучения способов конфигурации journald.

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

Опции командной строки journalctl Результат
journalctl без опций Отобразить все записи, начиная с самых ранних.
-b, --boot Отобразить все записи с начала этой загрузки.
-r, --reverse Сначала новейшие записи.
-f, --follow Отобразить некоторые последние записи и отобразить новые записи по мере их появления.
-p, --priority= Определить (минимум) приоритет отображения сообщений, выбирая из: "emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7).
--since=, --until= Ограничить записи по времени. Формат "YYYY-MM-DD hh:mm:ss", либо "yesterday", "today" и "tomorrow".
-n, --lines= Ограничить количество записей.
-k, --dmesg Ограничиться только сообщениями от ядра.
-u, --unit= Ограничиться определенным юнитом Systemd.

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

/tmp теперь в tmpfs

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

Настройка процесса загрузки

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

  • Опция загрузки quiet влияет не только на вывод ядра, но и на systemd. Пока systemd настраивается на машине, отбросьте эту опцию, чтобы увидеть любые возникающие ошибки. После этого, верните обратно для «тихой» (и более быстрой) загрузки.
  • Даже с опцией quiet, systemd еще может выводить свой статус через systemd.show_status=1.
  • Когда не используется quiet, некоторые сообщения могут перезаписать старые в консоли. Это обусловлено конфигурацией ядра (см. man 5 proc и /proc/sys/kernel/printk). Для корректировки вставьте loglevel=5 в загрузку ядра (и обновите значение в соответствии с предпочтением, к примеру, самое маленькое возможное значение равно 1).

Сервисы

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

Сервисы OpenRC

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

Просмотр доступных сервисов

Все доступные сервисы могут быть представлены в виде списка через аргумент list-units для systemctl:

root #systemctl list-units
UNIT                               LOAD   ACTIVE SUB       DESCRIPTION
boot.automount                     loaded active waiting   EFI System Partition Automount
proc-sys-fs-binfmt_misc.automount  loaded active waiting   Arbitrary Executable File Formats File System Automount Point
...

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

Окончание Описание
.service простые файлы описывающие сервис (например, те что запускают процесс-демона напрямую),
.socket «прослушка» сокетов (как inetd),
.path триггеры файловой системы для сервисов (запускают сервисы когда файлы изменены и т.д.).

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

root #systemctl --all --full

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

root #systemctl --failed

Включение, отключение, запуск и остановка сервисов

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

root #systemctl enable foo.service

Сервис также можно отключить:

root #systemctl disable foo.service

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

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

root #systemctl start foo.service

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

root #systemctl stop foo.service

Установка пользовательских unit-файлов

Пользовательские unit-файлы могут быть размещены в /etc/systemd/system, где они распознаются после запуска systemctl daemon-reload:

root #systemctl daemon-reload

Путь /usr/lib/systemd/system зарезервирован для файлов, описывающих сервис, которые установлены с помощью пакетного менеджера.

Пользовательская настройка unit-файлов

Когда необходимо внести только небольшие изменения в unit-файл, нет нужды в создании полной копии оригинального unit-файла в /etc/systemd/system. Переопределение настроек в управлении пакетами позволяет достигнуть этого перемещением файлов в каталог заканчивающийся на

  • .d после имени оригинального unit-файла (например apache2.d) в /etc/systemd/system/.
Файл /etc/systemd/system/apache2.d/mem-limit.confПример добавления/переопределения настроек в файле описывающий сервис
[Service]
MemoryLimit=1G

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

root #systemctl daemon-reload

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

root #systemctl restart apache2

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

root #systemctl show --property=MemoryLimit apache2
MemoryLimit=1074000000

Включение сервиса под другим именем

Когда имя, определенное в "Alias" секции "[Install]" unit-файла, не соответствует ожиданиям и определение постоянного нового значения для этого через пользовательскую настройку не требуется, можно создать символическую ссылку в /etc/systemd/system/*.wants/. Имя директории

  • .wants может указывать на цель загрузки (target), либо на другой сервис, который будет зависеть от нового.

Например, чтобы установить mysqld.service как db.service в multi-user.target:

root #ln -s /usr/lib/systemd/system/mysqld.service /etc/systemd/system/multi-user.target.wants/db.service

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

root #rm /etc/systemd/system/multi-user.target.wants/db.service

Нативные сервисы

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

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

Схема перемещений
Пакет Gentoo OpenRC сервис systemd unit Примечание
sys-apps/openrc bootmisc systemd-tmpfiles-setup.service всегда включен, используя tmpfiles.d
consolefont systemd-vconsole-setup.service всегда включен, используя vconsole.conf
devfs
dmesg
fsck fsck*.service загружается косвенным образом при монтировании
functions.sh Смотрите примечание bug #373219
hostname (встроен в systemd) /etc/hostname
hwclock Смотрите примечание всегда включен как часть systemd (т.е. это не unit)
keymaps systemd-vconsole-setup.service всегда включен, используя vconsole.conf
killprocs
local
localmount local-fs.target актуальные unit-файлы создаются косвенно из /etc/fstab
modules systemd-modules-load.service всегда включен, используя /etc/modules-load.d/*.conf
mount-ro
mtab
netmount remote-fs.target
numlock
procfs (встроен в systemd)
root remount-rootfs.service
savecache n/a внутри OpenRC
staticroute
swap swap.target актуальные unit-файлы создаются косвенно из /etc/fstab
swclock
sysctl systemd-sysctl.service sysctl.conf и sysctl.d/
sysfs (встроен в systemd)
termencoding systemd-vconsole-setup.service всегда включен, используя vconsole.conf
urandom systemd-random-seed-load.service
systemd-random-seed-save.service
app-admin/rsyslog rsyslog rsyslog.service
app-admin/syslog-ng syslog-ng syslog-ng.service
media-sound/alsa-utils alsasound alsa-store.service (по умолчанию включен)
alsa-restore.socket (по умолчанию включен)
net-misc/dhcpcd dhcpcd dhcpcd.service
net-misc/netifrc net.* net@.service systemd обертка для net.* скриптов (вместе с net-misc/netifrc)
netctl@.service net-misc/netctl изначально инструмент из Arch Linux.
NetworkManager.service Для <networkmanager-0.9.8.4 : включить NetworkManager-dispatcher.service для dispatcher.d рабочих скриптов.
Включить NetworkManager-wait-online.service для определения рабочего интернет-соединения.
Отключить все остальные менеджеры (например, wicd, dhcpcd) и wpa_supplicant.
dhcpcd.service Пакет net-misc/dhcpcd
systemd.networkd.service Часть systemd
net-misc/openntpd ntpd ntpd.service
net-misc/openssh sshd sshd.service запускает sshd как процесс-демон
sshd.socket запускает sshd на inetd-подобной основе (для каждого входящего соединения)
net-wireless/wpa_supplicant wpa-supplicant wpa_supplicant.service D-Bus контролирующий процесс-демон (например, для NetworkManager)
wpa_supplicant@.service интерфейс wpa_supplicant (используется как wpa_supplicant@wlan0.service)
net-print/cups cupsd cups.service сервис с классическим запуском при загрузке
cups.socket сокет и активация (только запущенный по требованию cups)
cups.path
net-wireless/bluez bluetooth bluetooth.service
sys-apps/dbus dbus dbus.service
dbus.socket
sys-apps/irqbalance irqbalance irqbalance.service поддерживает только режим демона
sys-apps/microcode-ctl microcode_ctl Настройте microcode как module для его загрузки по микрокоду. Перейдите на "Processor type and features" -> "CPU microcode loading support" и не забудьте добавить настройку зависимости от процессора Intel или AMD.
sys-fs/udev udev udev.service
udev-mount (builtin) /dev смонтирован как tmpfs
udev-postmount udev-trigger.service
udev-settle.service
sys-power/acpid acpid acpid.service Большая часть функциональности заключена в самом systemd, возможно поэтому вы решить отключить его
x11-apps/xdm (xdm) xdm.service OpenRC использует общий xdm init.d, установленный вместе с пакетом x11-base/xorg-server. С systemd вам необходимо включить соответствующий файл модуля для каждого дисплейного менеджера (gdm.service, kdm.service...)
net-firewall/iptables iptables iptables-store.service
iptables-restore.service

Сервисы таймеров

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

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

Файл ~/.local/share/systemd/user/backup-work.timerПример как запускать таймер каждый рабочий день
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=no
 
[Timer]
Persistent=false
OnCalendar=Mon-Fri *-*-* 11:30:00
Unit=backup-work.service
 
[Install]
WantedBy=default.target
Файл ~/.local/share/systemd/user/backup-work.serviceПример триггера для запуска сервиса резервного копирования
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=yes
 
[Service]
Type=oneshot
ExecStart=/home/<user>/scripts/backup-work.sh

Во-первых, скажите systemd заново прочитать файлы описывающие сервис:

user $systemctl --user daemon-reload

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

user $systemctl --user start backup-work.service

Запустите и остановите таймер вручную:

user $systemctl --user start backup-work.timer
user $systemctl --user stop backup-work.timer

Наконец, включите таймер на каждый запуск системы:

user $systemctl --user enable backup-work.timer

Чтобы проверить последние результаты запущенного сервиса:

user $systemctl --user list-timers

Электронная почта о сбоях

Если сервис был запущен и дал сбой, то может быть отправлено электронное письмо с уведомлением об этом пользователя или администратора. Эта возможность осуществляется через строфу "OnFailure", определяющую действия на случай сбоя сервиса. Сбой распознается по ненулевому возвращенному коду от вызванного скрипта.

Для этого изменим скрипт как показано ниже:

Файл ~/.local/share/systemd/user/backup-work.serviceПример триггера для запуска сервиса резервного копирования
[Unit]
Description=daily backup work
RefuseManualStart=no
RefuseManualStop=yes
OnFailure=failure-email@%i.service
 
[Service]
Type=oneshot
ExecStart=/home/<user>/scripts/backup-work.sh

Для этого нужно установить сервис failure-email@.service, которую можно найти в kylemanna's systemd-utils repository.

Замена cron

Вышеуказанные таймер и файлы, описывающие сервис, также могут быть добавлены в /usr/lib/systemd/system для того, чтобы сделать их доступными в масштабах всей системы. Для запуска сервиса вместе с системой нужно прописать в секцию install WantedBy=multi-user.target.

Однако, cron также может быть запущен через скрипты в /etc/cron.daily и других директориях. Некоторые пакеты помещают скрипты туда, откуда они будут запускаться ежедневно. Это поведение может быть эмулировано с systemd, установив sys-process/systemd-cron. Далее, активируйте новую замену cron следующими командами:

root #systemctl enable cron.target
root #systemctl start cron.target

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

Буфер /dev/kmsg переполнен, некоторые сообщения потеряны

Проблема
Когда при загрузке системы на экран выводится бесконечный цикл /dev/kmsg buffer overrun, some messages lost. Консольный экран входа никогда не появится пока система не перестанет зацикливаться в процессе загрузки.
Решение
В большинстве случаев такая ошибка возникает когда в ядре включена опция CONFIG_POWER_SUPPLY_DEBUG. Обходной путь состоит в отключении этой опции и пересборке нового ядра. Решение так же может быть найдено на форуме Gentoo. Для одного пользователя форума эта проблема была обнаружена при использовании I2C EEPROM на встроенной системе [2]. Решение заключалось в отключении опции ядра CONFIG_I2C_DEBUG_CORE.

Графические сессии, запущенные в разных местах

По умолчанию, systemd запускает процесс getty только тогда, когда он будет использоваться. Это приводит к тому, что некоторые менеджеры экрана (например GDM), используют оставшиеся TTY для открытия графических сессий по требованию, что в результате дает хаотичное размещение консолей и графических сессий в зависимости от порядка, в котором они используются.

Для того, чтобы придерживаться более классического поведения (т. е. консоли размещаются от tty1 до tty6, а графические сессии занимают оставшиеся TTY) принудительно включите getty:

root #systemctl enable getty@tty{2,3,4,5,6}.service

LVM

Когда переключаетесь с OpenRC на systemd и LVM необходим для правильного подключения системных томов, то включите LVM сервис:

root #systemctl enable lvm2-monitor.service

Пока это не нужно для корневого тома (если LVM интегрирован в initramfs), это может не работать для остальных LVM томов, если сервис запущен.

systemd-bootchart

Убедитесь, что CONFIG_DEBUG_KERNEL, CONFIG_SCHED_DEBUG и CONFIG_SCHEDSTATS включены.

Ядро Включение поддержки systemd-bootchart
File systems  --->
	Pseudo filesystems --->
	[*] /proc file system support
Kernel hacking  --->
	[*] Kernel debugging
	[*] Collect scheduler debugging info
	[*] Collect scheduler statistics

Далее, включите systemd-bootchart.service:

root #systemctl enable systemd-bootchart

Все изменения будут помещены в bootchart-отчет в формате SVG файла, который размещается в /run/log/ после каждой загрузки. Его можно открыть в любом современном веб-браузере.

В качестве альтернативы systemd-bootchart, загрузку сервисов также можно визуализировать следующим образом:

root #systemd-analyze plot > plot.svg

syslog-ng для systemd

Не нужно добавлять unix-dgram('/dev/log'); в файл /etc/syslog-ng/syslog-ng.conf. Это приведет к сбою syslog-ng (как минимум в syslog-ng-3.7.2). Измените строку source src { ...; }; как упомянуто в статье Syslog-ng:

Файл /etc/syslog-ng/syslog-ng.conf
# для openrc
#source src { system(); internal(); };
 
# systemd
source src { systemd-journal(); internal(); };

Настройка sys-fs/cryptsetup

systemd не совсем коректно работает с /etc/conf.d/dmcrypt (см. bug #429966), так что его необходимо настроить в файле /etc/crypttab:

Файл /etc/crypttabФайл настройки для зашифрованного блочного устройства
crypt-home UUID=c25dd0f3-ecdd-420e-99a8-0ff2eaf3f391 -

Make sure to enable the cryptsetup USE flag for sys-apps/systemd. It will install /usr/lib/systemd/system-generators/systemd-cryptsetup-generator that will automatically create a service (cryptsetup@crypt-home.service for above example) for each entry on boot.

Проверьте unit, которые не смогли запуститься

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

root #systemctl --failed

Включение режима отладки

Для получения более детальной информации в /etc/systemd/system.conf настройте следующее:

Файл /etc/systemd/system.conf
LogLevel=debug

Или включите отладочную оболочку (debug-shell), которая откроет терминал на tty9. Этот терминал поможет отладить сервисы во время загрузки.

root #systemctl enable debug-shell.service

Использование e4rat

Пожалуйста, не забудьте отредактировать /etc/e4rat.conf, установив 'init' в /usr/lib/systemd/systemd, иначе OpenRC по прежнему будет загружаться в качестве init.

GRSecurity

С включенным grsecurity, systemd-networkd может выдать ошибку:

Код Ошибка systemd-networkd
could not find udev device: Permission denied

Ошибка возникает из-за работающего под не root пользователем systemd-networkd, в связи с чем grsecurity отказывает в доступе к полной структуре /sys для таких пользователей. Для отключения этой опции отмените выбор CONFIG_GRKERNSEC_SYSFS_RESTRICT в настройке ядра.

У logind также есть некоторые тонкости с разрешением доступа, если включена опция CONFIG_GRKERNSEC_PROC; смотрите bug #472098.

shutdown -rF не форсирует fsck

Сервис systemd-fsck отвечает за запуск fsck, когда это необходимо. Он не обращает внимания на опцию -rF команды shutdown, но для него имеют значение следующие параметры загрузки ядра.

Параметр загрузки Поддерживаемые опции Описание
fsck.mode auto
force
skip
Контролирует режим операции. Значение по умолчанию — auto, в этом режиме проверяется, что все проверки ФС выполняются, когда это необходимо. force вызывает безусловную полную проверку ФС. skip пропускает любые проверки файловой системы.
fsck.repair preen
yes
no
Контролирует режим операции. Значение по умолчанию — preen, в этом режиме автоматически решаются все проблемы, избавиться от которых можно безопасно. yes ответит утвердительно на все запросы fsck, а no ответит на все запросы отрицательно.

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

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

Ссылки