Po pierwsze, systemd
nie jest to tradycyjny unix init
. Systemd to o wiele więcej, więc porównywanie tych dwóch jest trochę niesprawiedliwe.
Aby odpowiedzieć na pytanie, niezbędne wydają się niektóre pliki binarne i następujące pliki konfiguracyjne:
/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
wydanie systemctl enable console-getty.service getty@tty2.service
następnie tworzy następujące dowiązania symboliczne:
/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
UWAGA : Aby skorzystać systemd
ze specjalnych funkcji do agetty
dynamicznego uruchamiania , na żądanie po naciśnięciu Alt+ F3i tak dalej, wydaje się, że musisz mieć co najmniej te dwa pliki:
/etc/systemd/logind.conf
/lib/systemd/system/autovt@.service
gdzie autovt@.service
jest dowiązanie symboliczne do getty@.service
.
Zawartość plików konfiguracyjnych:
default.target
, getty.target
, sysinit.target
Pliki mogą być pusta z wyjątkiem [Unit]
zmiennej i (prawdopodobnie) Description=xxx
.
basic.target
zawiera również informacje o zależnościach:
[Jednostka]
Opis = system podstawowy
Wymaga = sysinit.target
Wants = sockets.target timers.target paths.target slices.target
After = sysinit.target sockets.target timers.target paths.target slices.target
Nie jestem pewien, czy potrzebne są odniesienia do celów, które nie istnieją jako pliki, czy nie. Są one opisane na stronie systemd.special(7)
man.
console-getty.service
: (Specjalny przypadek agetty na konsoli)
[Jednostka]
Opis = Konsola Getty
After = systemd-user-session.service plymouth-quit-wait.service
Przed = getty.target
[Usługa]
ExecStart = - / sbin / agetty --noclear --keep-baud console 115200,38400,9600 $ TERM
Typ = bezczynny
Uruchom ponownie = zawsze
RestartSec = 0
UtmpIdentifier = minus
TTYPath = / dev / console
TTYReset = tak
TTYVHangup = tak
KillMode = proces
IgnoreSIGPIPE = nie
SendSIGHUP = tak
[Zainstalować]
WantedBy = getty.target
getty@.service
: (ogólna konfiguracja dla wszystkich usług Getty oprócz konsoli)
[Jednostka]
Opis = Getty na% I
After = systemd-user-session.service plymouth-quit-wait.service
Przed = getty.target
IgnoreOnIsolate = tak
ConditionPathExists = / dev / tty0
[Usługa]
ExecStart = - / sbin / agetty --noclear% I $ TERM
Typ = bezczynny
Uruchom ponownie = zawsze
RestartSec = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = tak
TTYVHangup = tak
TTYVTDisallocate = no
KillMode = proces
IgnoreSIGPIPE = nie
SendSIGHUP = tak
[Zainstalować]
WantedBy = getty.target
DefaultInstance = tty1
Wreszcie prawdopodobnie potrzebujesz kilku z tych specjalnych plików binarnych (nie próbowałem tych, które są kluczowe):
/ lib / systemd / systemd (/ sbin / init zwykle wskazuje na to)
/ 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-sleep
/ lib / systemd / systemd-sysctl
/ lib / systemd / systemd-initctl
/ lib / systemd / systemd-odpowiedz-hasło
/ lib / systemd / systemd-ac-power
/ lib / systemd / systemd-Activ
/ lib / systemd / systemd-backlight
/ 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-machined
/ lib / systemd / systemd-modules-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-resolved
/ lib / systemd / systemd-rfkill
/ lib / systemd / systemd-shutdown
/ lib / systemd / systemd-shutdownd
/ lib / systemd / systemd-socket-proxyyd
/ lib / systemd / systemd-timedated
/ lib / systemd / systemd-timesyncd
/ lib / systemd / systemd-udevd
/ lib / systemd / systemd-update-done
Podsumowując systemowy proces uruchamiania, myślę, że działa on mniej więcej tak:
- systemd lokalizuje
basic.target
(lub wszystkie *.target
pliki?)
- Zależności są rozwiązywane na podstawie
WantedBy=
, Wants=
, Before=
, After=
... dyrektyw w [Install]
sekcji *.service
i *.target
konfiguracji plików.
*.service
s, które powinny się uruchomić (które nie są „specjalnymi” usługami), mają [Service]
sekcję z ExecStart=
dyrektywą, która wskazuje plik wykonywalny do uruchomienia.