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. На данный момент это означает использование или  до поддержки  в. Выделите время для миграции:

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

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

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

Использование 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 - это интерфейс на основе curses, запускаемый в консоле, который может помочь пользователям с настройкой сетевых интерфейсов.

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Замена cron
Вышеуказанные таймер и файлы, описывающие сервис, также могут быть добавлены в для того, чтобы сделать их доступными в масштабах всей системы. Для запуска сервиса вместе с системой нужно прописать в секцию install.

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

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

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

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

 * Проблема: Когда при загрузке системы на экран выводится бесконечный цикл . Консольный экран входа никогда не появится пока система не перестанет зацикливаться в процессе загрузки.


 * Решение: В большинстве случаев такая ошибка возникает когда в ядре включена опция CONFIG_POWER_SUPPLY_DEBUG . Обходной путь состоит в отключении этой опции и пересборке нового ядра. Решение так же может быть найдено на форуме Gentoo. Для одного пользователя форума эта проблема была обнаружена при использовании I2C EEPROM на встроенной системе . Решение заключалось в отключении опции ядра CONFIG_I2C_DEBUG_CORE.

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

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

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

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

systemd-bootchart
Когда systemd-bootchart пытается запустить, перенастройте его для вызова systemd:

Результат bootchart - это отчет в фомате SVG файла, который распологается в.

syslog-ng конфликтует с systemd
systemd создает как дейтаграммный сокет , так что syslog-ng должен быть настроен на чтение в формате unix-dgram вместо unix-stream, в противном случае syslog-ng будет использовать "неправильный" поток:

syslog-ng для systemd
Не нужно добавлять  в файл. Это приведет к сбою (как минимум в syslog-ng-3.7.2). Измените строку  как упомянуто в статье Syslog-ng:

Настройка sys-fs/cryptsetup
systemd не совсем коректно работает с (см. ), так что его необходимо настроить в файле :

На основе можно создать новый файл, описывающий сервис. Для того, чтобы сделать это, включите  USE-флаг для. Такая настройка установит. При выполнении создастся файл сервиса в, который теперь можно скопировать в , вручную настроив его и добавив на желательный уровень запуска.

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

Включение режима отладки
Для получения более детальной информации в настройте следующее:

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

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

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

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

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

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

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

 * Comparison of init systems - В статье сравниваются системы инициализации Gentoo.
 * Sakaki's EFI Install Guide - Configuring systemd and installing necessary tools
 * OpenRC to Systemd Cheatsheet

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

 * FAQ
 * Tips and tricks