Що потрібно для мінімального завантаження системи, щоб запустити 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 - незрозуміло 38400 tty1 linux

Приклад для sysvinitфайлів бінарних файлів та файлу 1 конф /etc/inittab:

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

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

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


Зараз є остання стаття бази даних RedHat (754933), яка описує завантаження systemd за цією URL-адресою: Огляд systemd для RHEL 7
MattBianco

Настільки гнітюче бачити, як люди підірвають одну конфігураційну лінію в великий безлад і називають це вдосконаленням.
припинення

Відповіді:


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
Хоче = sockets.target timers.target paths.target slices.target
Після = sysinit.target sockets.target timers.target paths.target slices.target

Я не впевнений, потрібні посилання на цілі, які не існують як файли. Вони описані на сторінці systemd.special(7)man.


console-getty.service: (Спеціальний випадок для зручності на консолі)

[Одиниця]
Опис = Консоль Getty
After = systemd-user-session.service plymouth-quit-wait.service
Перед = getty.target

[Сервіс]
ExecStart = - / sbin / agetty - незрозуміло - консоль "boep-boud" 115200,38400,9600 $ TERM
Тип = простоювати
Перезапуск = завжди
RestartSec = 0
UtmpIdentifier = мінуси
TTYPath = / dev / консоль
TTYReset = так
TTYVHangup = так
KillMode = процес
ІгноруватиSIGPIPE = ні
SendSIGHUP = так

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

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

[Одиниця]
Опис = Getty на% I
After = systemd-user-session.service plymouth-quit-wait.service
Перед = getty.target
IgnoreOnIsolate = так
ConditionPathExists = / dev / tty0

[Сервіс]
ExecStart = - / sbin / agetty - незрозуміло% I $ TERM
Тип = простоювати
Перезапуск = завжди
RestartSec = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = так
TTYVHangup = так
TTYVTDisallocate = ні
KillMode = процес
ІгноруватиSIGPIPE = ні
SendSIGHUP = так

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

Нарешті, напевно, вам знадобиться кілька цих спеціальних бінарних файлів (я не пробував, які з них є вирішальними):

/ lib / systemd / systemd (/ sbin / init зазвичай вказує на це)
/ lib / systemd / systemd-logind
/ lib / systemd / systemd-cgroups-agent
/ lib / systemd / systemd-user-session
/ lib / systemd / systemd-vconsole-setup
/ lib / systemd / systemd-update-utmp
/ lib / systemd / systemd-сон
/ lib / systemd / systemd-sysctl
/ lib / systemd / systemd-initctl
/ lib / systemd / systemd-відповідь-пароль
/ lib / systemd / systemd-ac-power
/ lib / systemd / systemd-activate
/ lib / systemd / systemd-підсвітка
/ lib / systemd / systemd-binfmt
/ lib / systemd / systemd-bootchart
/ lib / systemd / systemd-bus-proxyd
/ lib / systemd / systemd-coredump
/ lib / systemd / systemd-cryptsetup
/ lib / systemd / systemd-fsck
/ lib / systemd / systemd-hostnamed
/ lib / systemd / systemd-journald
/ lib / systemd / systemd-journal-gatewayd
/ lib / systemd / systemd-journal-remote
/ lib / systemd / systemd-localed
/ lib / systemd / systemd-обробляється
/ lib / systemd / systemd-module-load
/ lib / systemd / systemd-multi-seat-x
/ lib / systemd / systemd-networkd
/ lib / systemd / systemd-networkd-wait-online
/ lib / systemd / systemd-quotacheck
/ lib / systemd / systemd-random-seed
/ lib / systemd / systemd-readahead
/ lib / systemd / systemd-remount-fs
/ lib / systemd / systemd-вирішено
/ lib / systemd / systemd-rfkill
/ lib / systemd / systemd-shutdown
/ lib / systemd / systemd-shutdownnd
/ lib / systemd / systemd-socket-proxyd
/ lib / systemd / systemd-timeedated
/ lib / systemd / systemd-timesyncd
/ lib / systemd / systemd-udevd
/ lib / systemd / systemd-update-done

Підсумовуючи процес запуску systemd, я думаю, він працює приблизно так:

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

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)

Якщо ви хочете Гетті на нерест , навіть якщо ви не вручну перемикатися ви можете додати символічне посилання /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

Дивіться на системний 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це лише одна з послуг серед інших, яку можна запускати за допомогою скриптів init. У перевіреному вами дистрибутиві (Fedora, Arch) gettyвиконується двома різними способами:

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

Сподіваюся, це задовольняє.


Я хочу знати, які файли потрібні та що вони містять. Не могли б ви узагальнити свою відповідь зі списком необхідних файлів і що змушує їх читати в якому порядку? Мені не вистачає інформації про те, що потрібно знайти в цьому каталозі. Спробую трохи розробити своє запитання. Спасибі!
MattBianco

@MattBianco ви без сумніву ворожі погляди systemd. Я трохи досліджую це, і це виглядає досить просто, як тільки ви зрозумієте, як працюють речі
pqnet

1
Так, мене псує документація з інших проектів з відкритим кодом. Мені шкода, що звучать вороже. Це просто засмучує, що, здається, не існує простого документа, що пояснює процес завантаження. (Я зараз розумію, що це тому, що systemd не простий.) Жартівливо прокоментую, що це, мабуть systemd, вороже, як у здійсненні ворожих захоплень способом запуску відкритої системи. Це відвертає GNU / Linux від Unix. Не кажучи про те, що це погано, але це дуже відрізняється від того, як це було традиційно. І трохи погуглившись вказує на те, що я не один.
MattBianco
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.