This is Gentoo's testing wiki. It is a non-operational environment and its textual content is outdated.
Please visit our production wiki at https://wiki.gentoo.org
systemd
systemd — это современная замена SysV-подобных init и rc в Linux-системах. systemd поддерживается Gentoo в качестве альтернативной системы инициализации.
Установка
Если обновляетесь с версии <=sys-apps/systemd-203, проверьте статью по обновлению.
Все дистрибутивы строятся вокруг ядра Linux. Ядро является прослойкой между пользовательским программным обеспечением и физическим оборудованием. Gentoo предоставляет несколько вариантов исходного кода ядра. Полный список с описанием доступен в статье общие сведения о ядре.
For amd64-based systems, Gentoo recommends the sys-kernel/gentoo-sources package.
Выберете подходящий исходный код ядра и установите с помощью emerge:
root #
emerge --ask sys-kernel/gentoo-sources
Ядро
systemd позволяет использовать многие современные возможности ядра Linux. На данный момент минимальная требуемая версия ядра — 2.6.39. В свежих версиях sys-kernel/gentoo-sources поддерживается удобный способ включения обязательных и опциональных параметров ядра для systemd (смотрите Ядро/Конфигурация для получения дополнительной информации):
Gentoo Linux ---> Support for init systems, system and service managers ---> [*] systemd
При конфигурации ядра вручную (единственный способ, если не используется sys-kernel/gentoo-sources), следующие параметры конфигурации ядра необходимы или рекомендуются:
General setup ---> [*] Control Group support ---> [*] Support for eBPF programs attached to cgroup [ ] Enable deprecated sysfs features to support old userspace tools [*] Configure standard kernel features (expert users) ---> [*] open by fhandle syscalls [*] 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 ---> [*] Configure standard kernel features (expert users) ---> [*] 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 систем, включите следующие:
[*] 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.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 --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
+dns-over-tls
|
Enable DNS-over-TLS support |
+gcrypt
|
Enable use of dev-libs/libgcrypt for various features |
+kernel-install
|
Enable kernel-install |
+kmod
|
Enable kernel module loading via sys-apps/kmod |
+lz4
|
Enable lz4 compression for the journal |
+openssl
|
Enable use of dev-libs/openssl for various features |
+resolvconf
|
Install resolvconf symlink for systemd-resolve |
+seccomp
|
Enable seccomp (secure computing mode) to perform system call filtering at runtime to increase security of programs |
+sysv-utils
|
Install sysvinit compatibility symlinks and manpages for init, telinit, halt, poweroff, reboot, runlevel, and shutdown |
+zstd
|
Enable support for ZSTD compression |
acl
|
Add support for Access Control Lists |
apparmor
|
Enable support for the AppArmor application security system |
audit
|
Enable support for sys-process/audit |
boot
|
Enable EFI boot manager and stub loader |
bpf
|
Enable BPF support for sandboxing and firewalling. |
cgroup-hybrid
|
Default to hybrid (legacy) cgroup hierarchy instead of unified (modern). |
cryptsetup
|
Enable cryptsetup tools (includes unit generator for crypttab) |
curl
|
Enable support for uploading journals |
elfutils
|
Enable coredump stacktraces in the journal |
fido2
|
Enable FIDO2 support |
gnutls
|
Prefer net-libs/gnutls as SSL/TLS provider (ineffective with USE=-ssl) |
homed
|
Enable portable home directories |
http
|
Enable embedded HTTP server in journald |
idn
|
Enable support for Internationalized Domain Names |
importd
|
Enable import daemon |
iptables
|
Use libiptc from net-firewall/iptables for NAT support in systemd-networkd; this is used only if the running kernel does not support nftables |
lzma
|
Support for LZMA compression algorithm |
pam
|
Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip |
pcre
|
Add support for Perl Compatible Regular Expressions |
pkcs11
|
Enable PKCS#11 support for cryptsetup and homed |
policykit
|
Enable PolicyKit (polkit) authentication support |
pwquality
|
Enable password quality checking in homed |
qrcode
|
Enable qrcode output support in journal |
secureboot
|
Automatically sign efi executables using user specified key |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
split-usr
|
Enable behavior to support maintaining /bin, /lib*, /sbin and /usr/sbin separately from /usr/bin and /usr/lib* |
test
|
Enable dependencies and/or preparations necessary to run tests (usually controlled by FEATURES=test but can be toggled independently) |
tpm
|
Enable TPM support |
ukify
|
Enable systemd-ukify |
vanilla
|
Disable Gentoo-specific behavior and compatibility quirks |
xkb
|
Depend on x11-libs/libxkbcommon to allow logind to control the X11 keymap |
Профиль
Активируйте 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=/lib/systemd/systemd
в командную строку ядра. Соответствующий отрывок grub.conf будет выглядеть примерно так:
/boot/grub/grub.conf
Пример конфигурационного файла GRUB для systemdtitle=Gentoo with systemd root (hd0,0) kernel /vmlinuz root=/dev/sda2 init=/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=/lib/systemd/systemd"
Если конфигурационный файл GRUB 2 написан вручную (только для опытных пользователей), добавьте параметр init=
для команд linux
или linux16
.
/boot/grub/grub.cfg
Фрагмент примера конфигурации GRUB2linux /vmlinuz-3.10.9 root=UUID=508868e4-54c6-4e6b-84b0-b3b28b1656b6 init=/lib/systemd/systemd
YABOOT
Yaboot is a boot loader for PowerPC-based hardware running Linux, particularly New World ROM Macintosh systems.
The init=/usr/lib/systemd/systemd
argument should be added directly after the kernel command-line. An example from yaboot.conf:
/etc/yaboot.conf
Пример конфигурации yaboot для systemdimage=/vmlinux append="init=/usr/lib/systemd/systemd" label=Linux read-only initrd=/initramfs initrd-size=8192
Чтобы изменения в файле yaboot.conf возымели эффект, нужно после каждых изменений запускать команду ybin
.
В конфигурации ядра
Конфигурация init также может быть жёстко сконфигурирована в ядре. Смотрите Processor type and features -> Built-in kernel command line. Обратите внимание, что это работает и для grub, и для grub2.
Обновления
У systemd есть возможность обновляться в уже запущенной системе (без перезагрузки). После установки обновленной версии systemd, запустите следующую команду:
root #
systemctl daemon-reexec
Конфигурация
systemd поддерживает несколько конфигурационных файлов для настройки базовых параметров системы.
В то время, как некоторые параметры системной конфигурации могут быть обновлены путем внесения изменений в соответствующие им файлы, большинство настроек настраиваются с помощью утилит, которым необходим запущенный systemd. В этом случае, необходимо аккуратно перезагрузить компьютер в systemd и использовать требуемые утилиты hostnamectl, localectl и timedatectl.
Machine ID
Создайте machine ID работы журналирования. Это можно сделать следующей командой:
root #
systemd-machine-id-setup
The command
systemd-machine-id-setup
also has an impact on the systemd-networkd
service. If you don't run this command, strange behavior like network interfaces not coming UP or network addresses not being applied will occur.Имя хоста
Чтобы установить имя хоста, создайте или измените /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>
After doing any of the above, update the environment so the changes will take effect:
root #
env-update && source /etc/profile
Время и дата
Время, дату и временную зону можно установить с помощью timedatectl. Эта утилита так же позволит пользователям настроить синхронизацию без необходимости устанавливать net-misc/ntp или другого пакет, полагаясь только на средства systemd.
Чтобы понять, как использовать timedatectl, просто запустите:
root #
timedatectl --help
Автоматическая загрузка модулей
Автоматическая загрузка модулей настраивается с помощью разных файлов, или, скорее, каталога с файлами. Файлы настроек расположены в /etc/modules-load.d. При старте системы каждый такой файл со списком модулей будет загружен. Формат файла - это список модулей, каждый из которых начинается с новой строки, а сам файл может иметь любое имя, любой длины, но заканчивается на .conf. Загрузочные модули можно разделить на модули для программ, сервисов или иные пользовательские предпочтения. В качестве примера ниже файл virtualbox.conf содержит:
/etc/modules-load.d/virtualbox.conf
Пример файла для модулей virtualboxvboxdrv 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. Для того чтобы сделать это просто запустите следующую команду, если используется графическое окружение:
root #
nm-connection-editor
Если это не тот случай и сеть необходимо настроить через консоль, то посмотрите nmcli или следуйте руководству по настройке через nmtui:
root #
nmtui
nmtui - это интерфейс на основе curses, запускаемый в консоле, который может помочь пользователям с настройкой сетевых интерфейсов.
Обработка лог-файлов
systemd имеет возможность обрабатывать лог-файлы без обращения к сторонним системам журналирования (таким как app-admin/syslog-ng или app-admin/rsyslog).
If desired, the logging service be configured to pass log messages to external logging utilities such as sysklog or syslog-ng. See man journald.conf to learn how to configure the systemd-journald service to suit situational needs.
systemd's integrated logging service writes log messages in a secure, binary format. The logs are read by using the journalctl command, which is a separate executable from the systemd-journald logging service.
When using systemd's systemd-journald.service for logging, which is typically the default for systems running systemd, standard users running the journalctl command will be unable to view system logs. To view system logs as a non-root account, users must be in one of the following three user groups in order to view system logs: systemd-journal, adm, or wheel. The simplest method to allow a standard user to view logs is to use the systemd-journal group. Add a user by running the following command where
larry
is the desired username:root #
gpasswd --add larry systemd-journal
System logs can now be read by running journalctl --system as the user(s) added in the previous command.
Некоторые общие опции journalctl:
Command-line options for journalctl | Result |
---|---|
journalctl without options | Show all log entries, starting with earliest. |
-b , --boot |
Show all log entries from the current boot. |
-r , --reverse |
Show the newest log entries first (reverse chronological order). |
-f , --follow |
Show the last few entries and display new log entries as they're being produced. This is similar to running tail -f in text logging utilities. |
-p , --priority= |
Specify (minimum) priority to display messages, with a choice from: "emerg" (0), "alert" (1), "crit" (2), "err" (3), "warning" (4), "notice" (5), "info" (6), "debug" (7). |
--since= , --until= |
Restrict entries by time. Accepts the format "YYYY-MM-DD hh:mm:ss" or the strings "yesterday", "today" and "tomorrow". |
-n , --lines= |
Restrict to a number of entries. |
-k , --dmesg |
Restrict to kernel messages. |
-u , --unit= |
Restrict to a certain systemd unit. |
--system |
View system service and kernel logs. By default, this is only possible as the root user. See man journalctl for how to grant standard users the ability to read the system journal. |
Для более детальной информации обратитесь к man journalctl.
/tmp теперь в tmpfs
Если какая-либо другая файловая система не настроена на монтирование к /tmp в /etc/fstab, то systemd смонтирует /tmp как tmpfs. Это значит, что она будет стираться при каждой загрузке и её размер будет ограничен 50% от объема физической оперативной памяти. Чтобы узнать, почему этот алгоритм предпочтителен и как его изменить, посетите API File Systems.
Настройка процесса загрузки
При переходе на systemd пользователи обычно могут заметить различия в уровне оповещений во время загрузки:
- The kernel command-line option
quiet
not only influences the kernel output, but also that of systemd itself. Then, while setting up systemd for the machine, drop the option to see any errors could arise more easily. After that, add it back to get a quiet (and faster) boot. - Even passing the
quiet
kernel command-line option, systemd can still be configured to show its status by also passingsystemd.show_status=1
. - When not using the
quiet
kernel command-line option, some messages might be overwriting consoles. This could be caused by the kernel configuration (see man 5 proc and look for /proc/sys/kernel/printk). To tweak it pass theloglevel=5
kernel command-line parameter (and update the value according to preference, for instance set a lower value like 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
Путь /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 /lib/systemd/system/mysqld.service /etc/systemd/system/multi-user.target.wants/db.service
Для отключения сервиса просто удалите символическую ссылку:
root #
unlink /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
Вышеуказанные таймер и файлы, описывающие сервис, также могут быть добавлены в /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 на встроенной системе [1]. Решение заключалось в отключении опции ядра 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 включены.
'"`UNIQ--pre-00000022-QINU`"'
Далее, включите 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 -
Убедитесь, что включен флаг cryptsetup
для sys-apps/systemd. Это установит /lib/systemd/system-generators/systemd-cryptsetup-generator, который автоматически создаст сервис (cryptsetup@crypt-home.service
для примера выше) для каждой записи при загрузке.
Проверьте 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' в /lib/systemd/systemd, иначе OpenRC по прежнему будет загружаться в качестве init.
GRSecurity
С включенным grsecurity, 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 ответит на все запросы отрицательно.
|
Смотрите также
- Comparison of init systems — compares and contrasts init systems.
- Sakaki's EFI Install Guide - Configuring systemd and installing necessary tools
- Пакеты, жестко зависящие от systemd
- OpenRC to systemd Cheatsheet — list of commands commonly used in OpenRC and its equivalent systemd command.