Primeiro de tudo, systemd
não é um unix tradicional init
. Systemd é muito mais, por isso é um pouco injusto comparar os dois.
Para responder à pergunta, o que parece ser necessário são alguns binários e os seguintes arquivos de configuração:
/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
emissão systemctl enable console-getty.service getty@tty2.service
cria esses links simbólicos:
/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
NOTA : Para utilizar systemd
os recursos especiais para iniciar agetty
dinamicamente, sob demanda ao pressionar Alt+ F3e assim por diante, parece que você também deve ter pelo menos esses dois arquivos:
/etc/systemd/logind.conf
/lib/systemd/system/autovt@.service
para onde autovt@.service
está um link simbólico getty@.service
.
Conteúdo dos arquivos de configuração:
A default.target
, getty.target
, sysinit.target
os arquivos podem estar vazios, exceto para o [Unit]
tag e (provavelmente) Description=xxx
.
basic.target
também contém informações de dependência:
[Unidade]
Descrição = Sistema Básico
Requer = sysinit.target
Quer = sockets.target timers.target paths.target slice.target
Depois = sysinit.target sockets.target timers.target paths.target slice.target
Não tenho certeza se as referências a destinos que não existem como arquivos são necessárias ou não. Eles são descritos na systemd.special(7)
página de manual.
console-getty.service
: (Caso especial para agetty no console)
[Unidade]
Descrição = Console Getty
Depois = systemd-user-sessions.service plymouth-quit-wait.service
Antes = getty.target
[Serviço]
ExecStart = - / sbin / agetty --noclear - console de manutenção / manutenção 115200,38400,9600 $ TERM
Tipo = inativo
Reiniciar = sempre
RestartSec = 0
UtmpIdentifier = contras
TTYPath = / dev / console
TTYReset = yes
TTYVHangup = yes
KillMode = processo
IgnoreSIGPIPE = no
SendSIGHUP = yes
[Instalar]
WantedBy = getty.target
getty@.service
: (configuração genérica para todos os serviços getty, exceto o console)
[Unidade]
Descrição = Getty em% I
Depois = systemd-user-sessions.service plymouth-quit-wait.service
Antes = getty.target
IgnoreOnIsolate = yes
ConditionPathExists = / dev / tty0
[Serviço]
ExecStart = - / sbin / agetty --noclear% I $ TERM
Tipo = inativo
Reiniciar = sempre
RestartSec = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = yes
TTYVHangup = yes
TTYVTDisallocate = no
KillMode = processo
IgnoreSIGPIPE = no
SendSIGHUP = yes
[Instalar]
WantedBy = getty.target
DefaultInstance = tty1
Finalmente, você provavelmente precisará de alguns desses binários especiais (não tentei quais são cruciais):
/ lib / systemd / systemd (/ sbin / init geralmente aponta para isso)
/ lib / systemd / systemd-logind
/ lib / systemd / systemd-cgroups-agent
/ lib / systemd / systemd-user-sessions
/ 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-reply-password
/ lib / systemd / systemd-ac-power
/ lib / systemd / systemd-activar
/ 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-usinado
/ lib / systemd / systemd-modules-load
/ lib / systemd / systemd-multi-lugar-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-proxyd
/ lib / systemd / systemd-timedated
/ lib / systemd / systemd-timesyncd
/ lib / systemd / systemd-udevd
/ lib / systemd / systemd-update-done
Para resumir o processo de inicialização do systemd, acho que funciona algo como isto:
- systemd localiza
basic.target
(ou todos os *.target
arquivos?)
- dependências são resolvidas com base em
WantedBy=
, Wants=
, Before=
, After=
... directivas na [Install]
secção dos *.service
e *.target
arquivos de configuração.
*.service
s que devem iniciar (que não são serviços "especiais"), possuem uma [Service]
seção com uma ExecStart=
diretiva que indica o executável para iniciar.