Перш за все, 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, я думаю, він працює приблизно так:
- systemd знаходить
basic.target(чи всі *.targetфайли?)
- Залежно вирішуються на основі
WantedBy=, Wants=, Before=, After=... директиви в [Install]розділі про *.serviceі *.targetконфігураційних файлів.
*.services, які повинні запускатися (які не є "спеціальними" послугами), мають [Service]розділ з ExecStart=директивою, яка вказує на виконання файлу для запуску.