Primeiro, systemd
não é um unix tradicional init
. O Systemd é muito mais, então é 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/[email protected] /usr/lib/systemd/system/console-getty.service
A emissão de systemctl enable console-getty.service [email protected]
cria esses links simbólicos:
/etc/systemd/system/default.target.wants/[email protected] -> /lib/systemd/system/getty@service /etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service
OBSERVAÇÃO : Para utilizar os recursos especiais do systemd
para iniciar agetty
dinamicamente, sob demanda ao pressionar Alt + F3 e assim por diante, parece que você também deve ter pelo menos esses dois arquivos:
/etc/systemd/logind.conf /lib/systemd/system/[email protected]
onde [email protected]
é um link simbólico para [email protected]
.
Conteúdo dos arquivos de configuração:
Os arquivos default.target
, getty.target
, sysinit.target
podem estar vazios, exceto pela tag [Unit]
e (provavelmente) Description=xxx
.
basic.target
também contém informações de dependência:
[Unit] Description=Basic System Requires=sysinit.target Wants=sockets.target timers.target paths.target slices.target After=sysinit.target sockets.target timers.target paths.target slices.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 página do manual systemd.special(7)
.
console-getty.service
: (caso especial para agetty no console)
[Unit] Description=Console Getty After=systemd-user-sessions.service plymouth-quit-wait.service Before=getty.target [Service] ExecStart=-/sbin/agetty --noclear --keep-baud console 115200,38400,9600 $TERM Type=idle Restart=always RestartSec=0 UtmpIdentifier=cons TTYPath=/dev/console TTYReset=yes TTYVHangup=yes KillMode=process IgnoreSIGPIPE=no SendSIGHUP=yes [Install] WantedBy=getty.target
[email protected]
: (configuração genérica para todos os serviços getty, exceto console)
[Unit] Description=Getty on %I After=systemd-user-sessions.service plymouth-quit-wait.service Before=getty.target IgnoreOnIsolate=yes ConditionPathExists=/dev/tty0 [Service] ExecStart=-/sbin/agetty --noclear %I $TERM Type=idle Restart=always RestartSec=0 UtmpIdentifier=%I TTYPath=/dev/%I TTYReset=yes TTYVHangup=yes TTYVTDisallocate=no KillMode=process IgnoreSIGPIPE=no SendSIGHUP=yes [Install] WantedBy=getty.target DefaultInstance=tty1
Finalmente, você provavelmente precisará de alguns desses binários especiais (eu não tentei quais são cruciais):
/lib/systemd/systemd (/sbin/init usually points to this) /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-activate /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-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 assim:
- systemd localiza
basic.target
(ou todos os*.target
arquivos?) - as dependências são resolvidas com base nas diretivas
WantedBy=
,Wants=
,Before=
,After=
... na seção[Install]
dos arquivos de configuração*.service
e*.target
. -
*.service
s que devem iniciar (que não são serviços "especiais"), tem uma seção[Service]
com uma diretivaExecStart=
, que indica que o executável deve ser iniciado.