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

21

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

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

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

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

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


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


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

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

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

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

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

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

ID: 2: initdefault:
c1: 12345: респаун: / sbin / agetty 38400 tty1 linux

Теперь я за systemdэквивалентом.

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

MattBianco
источник
Теперь есть недавняя статья базы знаний RedHat (754933), описывающая загрузку systemd по этому URL: Обзор systemd для RHEL 7
MattBianco
Очень печально видеть, как люди взрывают одну строку конфигурации в большой беспорядок и называют это улучшением.
ceving

Ответы:

17

Прежде всего, systemdэто не традиционный юникс init. 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затем создает эти символические ссылки:

/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.

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

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)странице руководства .


console-getty.service: (Особый случай для agetty на консоли)

[Ед. изм]
Описание = Консоль Getty
After = 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 на% I
After = 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. *.services, которые должны запускаться (которые не являются «специальными» службами), имеют [Service]раздел с ExecStart=директивой, указывающей исполняемый файл для запуска.
MattBianco
источник
1
AFAIK [Install]раздел не используется последовательностью загрузки, только systemctl enable. То, на что смотрит загрузка, это символические ссылки /etc/systemd/system/basic.target.wants/, которые создаются systemctl enable.
Стефан Маевский
6

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 FAQ в ArchWiki

редактировать: я исследовал немного больше в документации .

При загрузке 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Требуется только один из файлов, а каталог не требуется

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

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

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

pqnet
источник
Я хочу знать, какие файлы нужны, и что они должны содержать. Не могли бы вы обобщить свой ответ со списком необходимых файлов и что заставляет их читать в каком порядке? Мне не хватает информации о том, что нужно найти в этом каталоге. Я постараюсь немного уточнить свой вопрос. Благодарность!
MattBianco
@MattBianco, к которому ты безнадежно враждебен systemd. Я немного разбираюсь в этом, и это выглядит довольно просто, когда вы поймете, как все работает
pqnet
1
Да, я избалован документацией из других проектов с открытым исходным кодом. Прошу прощения за то, что звучит враждебно. Просто досадно, что, похоже, нет простого документа, объясняющего процесс загрузки. (Теперь я понимаю, что это потому, что systemd не прост.) Я с юмором хочу сказать, что это, возможно systemd, враждебно, как при выполнении враждебного поглощения способа запуска открытой системы. Это отвлекает GNU / Linux от Unix. Не сказать, что это плохо, но это сильно отличается от того, что было традиционно. И погуглить немного указывает на то, что я не одинок.
MattBianco