Что необходимо для минимальной загрузки systemd для запуска getty на виртуальной консоли?

Для SysV init мне нужны /etc/inittab respawning записи getty, двоичные файлы /sbin/init , двоичные файлы и общие библиотеки для оболочки, login , getty , getty PAM / security / shadow и несколько файлов устройств.

Для upstart мне нужны в основном те же требования, но вместо /etc/inittab меня есть несколько файлов *.conf в /etc/init : один * .conf, который start on startup который устанавливает уровень запуска с telinit и один * .conf для каждого tty, который запускает / respawn getty на этом tty на соответствующих уровнях запуска.

Какая конфигурация и двоичные файлы мне нужны для systemd init ?

Документация, на которую я нахожу все, похоже, сосредоточена на том, как использовать уже установленную систему для запуска и остановки служб.

Минимальный список файлов для копирования (кроме ядра / initrd) из запущенной установки Arch или Fedora будет работать нормально, но я не могу найти такую ​​информацию о systemd .


Я хотел бы знать, что для systemd какие файлы необходимы и что они должны содержать, чтобы запустить оболочку входа после запуска initramfs, это вызов switch_root для systemd /sbin/init .


Пример для upstart , двоичные файлы и два файла *.conf :

Файл /etc/init/whatever.conf :

 начать с запуска
 испускает уровень запуска
 задача
 скрипт
   telinit 2
 конец скрипта

Файл /etc/init/tty1.conf :

 начать с уровня запуска [12345]
 респаун
 exec / sbin / agetty -8 --noclear 38400 tty1 linux

Пример для sysvinit , двоичные файлы и 1 файл conf с именем /etc/inittab :

 ID: 2: initdefault:
 c1: 12345: respawn: / sbin / agetty 38400 tty1 linux

Теперь я получаю эквивалент systemd .

Я предполагаю, что где-то требуется, по крайней мере, *.service файл *.service , с записью [Service] содержащей ExecStart=-/sbin/agetty --noclear %I linux и Restart=always , но что еще нужно?

2 Solutions collect form web for “Что необходимо для минимальной загрузки systemd для запуска getty на виртуальной консоли?”

Прежде всего, systemd не является традиционным init unix. Systemd – это намного больше, поэтому сравнивать их можно немного несправедливо.

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

 /usr/lib/systemd/system/default.target
 /usr/lib/systemd/system/basic.target
 /usr/lib/systemd/system/sysinit.target
 /usr/lib/systemd/system/getty.target
 /usr/lib/systemd/system/getty@.service
 /usr/lib/systemd/system/console-getty.service

выдача systemctl enable console-getty.service getty@tty2.service затем создает эти символические systemctl enable console-getty.service getty@tty2.service :

 /etc/systemd/system/default.target.wants/getty@tty2.service -> / lib / systemd / system / getty @ service
 /etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service

ПРИМЕЧАНИЕ . Чтобы использовать специальные функции systemd для динамического запуска agetty , по требованию при нажатии Alt + F3 и т. Д., Похоже, что вы также должны иметь по крайней мере эти два файла:

 /etc/systemd/logind.conf
 /lib/systemd/system/autovt@.service

где autovt@.service – символическая ссылка на getty@.service .

Содержимое конфигурационных файлов:

getty.target default.target , getty.target , sysinit.target могут быть пустыми, за исключением тега [Unit] и (возможно) Description=xxx .

basic.target также содержит информацию о зависимости:

 [Ед. изм]
 Описание = Базовая система
 Требуется = sysinit.target
 Wants = sockets.target timers.target paths.target slices.target
 After = sysinit.target sockets.target timers.target paths.target slices.target

Я не уверен, нужны ли ссылки на цели, которые не существуют в виде файлов или нет. Они описаны на systemd.special(7) странице systemd.special(7) .


console-getty.service : (Специальный случай для agetty на консоли)

 [Ед. изм]
 Описание = Консоль Getty
 После = systemd-user-sessions.service plymouth-quit-wait.service
 Перед = getty.target

 [Обслуживание]
 ExecStart = - / sbin / agetty --noclear --keep-baud console 115200,38400,9600 $ TERM
 Тип = простаивает
 Restart = всегда
 RestartSec = 0
 UtmpIdentifier = минусы
 TTYPath = / DEV / консоли
 TTYReset = да
 TTYVHangup = да
 KillMode = процесс
 IgnoreSIGPIPE = нет
 SendSIGHUP = да

 [Установить]
 WantedBy = getty.target

getty@.service : (общая конфигурация для всех служб getty, кроме консоли)

 [Ед. изм]
 Описание = Getty on% I
 После = systemd-user-sessions.service plymouth-quit-wait.service
 Перед = getty.target
 IgnoreOnIsolate = да
 ConditionPathExists = / DEV / tty0

 [Обслуживание]
 ExecStart = - / sbin / agetty --noclear% I $ TERM
 Тип = простаивает
 Restart = всегда
 RestartSec = 0
 UtmpIdentifier =% I
 TTYPath = / DEV /% Я
 TTYReset = да
 TTYVHangup = да
 TTYVTDisallocate = нет
 KillMode = процесс
 IgnoreSIGPIPE = нет
 SendSIGHUP = да

 [Установить]
 WantedBy = getty.target
 DefaultInstance = tty1

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

 / lib / systemd / systemd (/ sbin / init обычно указывает на это)
 / Библиотека / Systemd / Systemd-logind
 / Библиотека / Systemd / Systemd-контрольные группы агентов
 / Lib / Systemd / Systemd-пользовательские сеансы
 / Библиотека / Systemd / Systemd-vconsole-установка
 / Библиотека / Systemd / Systemd-обновление-utmp
 / Библиотека / Systemd / Systemd-сон
 / Библиотека / Systemd / Systemd-Sysctl
 / Библиотека / Systemd / Systemd-initctl
 / Библиотека / Systemd / Systemd-ответ-пароль
 / Библиотека / Systemd / Systemd-ас-мощность
 / Библиотека / Systemd / Systemd реактивировать
 / Библиотека / Systemd / Systemd-подсветка
 / Библиотека / Systemd / Systemd-binfmt
 / Библиотека / Systemd / Systemd-Bootchart
 / Библиотека / Systemd / Systemd-шины proxyd
 / Библиотека / Systemd / Systemd-CoreDump
 / Библиотека / Systemd / Systemd-Cryptsetup
 / Библиотека / Systemd / Systemd-Fsck
 / Библиотека / Systemd / Systemd-hostnamed
 / Библиотека / Systemd / Systemd-journald
 / Библиотека / Systemd / Systemd-журнально-gatewayd
 / Библиотека / Systemd / Systemd-журнально-пульт
 / Библиотека / Systemd / Systemd-localed
 / Библиотека / Systemd / Systemd-механическая обработка
 / Библиотека / Systemd / Systemd-модули нагрузки
 / Библиотека / Systemd / Systemd-многоместный-х
 / Библиотека / Systemd / Systemd-networkd
 / Библиотека / Systemd / Systemd-networkd-выжидательную онлайн
 / Библиотека / Systemd / Systemd-Quotacheck
 / Библиотека / Systemd / Systemd-случайные семена
 / Библиотека / Systemd / Systemd-Readahead
 / Библиотека / Systemd / Systemd-перемонтирования фс
 / Библиотека / Systemd / Systemd-разрешенная
 / Библиотека / Systemd / Systemd-rfkill
 / Библиотека / Systemd / Systemd-выключение
 / Библиотека / Systemd / Systemd-shutdownd
 / Библиотека / Systemd / Systemd-сокет-proxyd
 / Библиотека / Systemd / Systemd-timedated
 / Библиотека / Systemd / Systemd-timesyncd
 / Библиотека / Systemd / Systemd-udevd
 / Библиотека / Systemd / Systemd-обновление-сделано

Чтобы суммировать процесс запуска systemd, я думаю, что он работает примерно так:

  1. systemd находит basic.target (или все *.target файлы?)
  2. зависимостей разрешаются на основе WantedBy= , Wants= , Before= , After= … в разделе [Install] конфигурационных файлов *.service и *.target .
  3. *.service которые должны запускаться (которые не являются «специальными» службами), имеют раздел [Service] с директивой ExecStart= , указывающий на запуск исполняемого файла.

systemd автоматически создает getty при переключении на терминалы до определенного максимального числа. По умолчанию 6 (так что вы получаете автоматически getty для alt + f1 до alt + f6). Если вы хотите изменить этот параметр, вы можете отредактировать /etc/systemd/logind.conf чтобы изменить параметр NAutoVTs на другой номер (макс. 12)

Если вы хотите, чтобы getty появлялся, даже если вы не переключаетесь вручную, вы можете добавить символическую ссылку в /usr/lib/systemd/system/getty@.service в каталог /etc/systemd/system/getty.target.wants/ :

 ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service 

это приведет к тому, что getty.target потребует еще одну услугу getty@ . Цель – это набор служб, которые необходимо создать, заменяя уровни выполнения, которые поддерживают зависимости. Цель по умолчанию зависит от getty.target

См. Часто задаваемые вопросы systemd в ArchWiki

edit: Я еще немного изучил документацию .

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

 /etc/systemd/system/default.target /usr/lib/systemd/system/default.target 

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

 /etc/systemd/system/default.target.wants /usr/lib/systemd/system/default.target.wants 

Версия /etc переопределяет значения по умолчанию в /usr/lib . .target только один из файлов .target , но ни один из них не требуется.

getty – это всего лишь одна из служб среди других, которые могут запускаться скриптами init. В дистрибутиве, который я проверил (fedora, arch), getty запускается двумя разными способами:

  1. Начинаются определенные сценарии для каждого терминала (ссылки на файл /usr/lib/systemd/system/getty@.service в котором имя tty заменяется на systemd из имени файла ссылки )
  2. При необходимости пользователь logind переключается на виртуальный терминал (подобно тому, как старый inetd службы только при поступлении запроса), когда пользователь переключается на виртуальный терминал. logind – это другой демон, распространяемый вместе с systemd , и считывает его конфигурацию из файла /etc/systemd/logind.conf .

Надеюсь, это удовлетворительно.

  • systemd: преобразовать путь в формат имени системы systemd
  • Список журналов до начала последнего запуска
  • в чем разница между cron и systemd?
  • Процессы CGroup не завершаются, даже когда основной процесс был убит командой Systemctl stop
  • Понимание systemd Параметр «Требуется =»
  • Что такое параметр для "systemctl list-units"
  • Как войти в syslog, если служба остановлена ​​с помощью systemd
  • systemctl не может точно сообщить о статусе демонов, если они были запущены с помощью механизма, отличного от systemctl
  • Нужен ли мне набор ulimit для системных служб, таких как nginx.service (systemd) / nginx (sysv)?
  • VPN-сервер в systemd-nspawn machine
  • Два сетевых интерфейса, пытающихся получить IP через DHCP
  • Linux и Unix - лучшая ОС в мире.