最小的 systemd 啟動需要什麼才能在虛擬控制台上啟動 getty?
對於 SysV
init
,我需要/etc/inittab
重新生成 getty 條目、/sbin/init
二進製文件、shell 的二進製文件和共享庫、login
、getty
、 PAM/security/shadow 的東西,以及一些設備文件。因為
upstart
我需要幾乎相同的要求,但是/etc/inittab
我在下面有幾個*.conf
文件/etc/init
:一個 *.conf 用於start on startup
設置執行級別telinit
,以及一個 *.conf 用於每個 ttygetty
在適當的執行級別上啟動/重生.我需要什麼配置和二進製文件
systemd
init
?我發現的所有文件似乎都集中在如何使用已安裝的系統來啟動和停止服務。
從正在執行的Arch或fedora安裝中複製的最小文件列表(核心/initrd 除外)就可以了,但我似乎找不到關於
systemd
.我想知道的是,對於
systemd
在 initramfsswitch_root
呼叫systemd
/sbin/init
.例如
upstart
,二進製文件和兩個*.conf
文件:文件
/etc/init/whatever.conf
:啟動時開始 發出執行級別 任務 腳本 遠端啟動 2 結束腳本
文件
/etc/init/tty1.conf
:從執行級別開始 [12345] 重生 執行 /sbin/agetty -8 --noclear 38400 tty1 linux
例如
sysvinit
,二進製文件和 1 個名為 的 conf 文件/etc/inittab
:id:2:initdefault: c1:12345:respawn:/sbin/agetty 38400 tty1 linux
現在我追求
systemd
等價物。
*.service
我假設某處至少需要一個文件,其中一個[Service]
條目包含ExecStart=-/sbin/agetty --noclear %I linux
andRestart=always
,但還需要什麼?
首先,
systemd
不是傳統的 unixinit
。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
’s 的特殊功能來動態啟動,按+等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 Wants=sockets.target timers.target paths.target slices.target After=sysinit.target sockets.target timers.target paths.target slices.target
我不確定是否需要對不作為文件存在的目標的引用。它們在
systemd.special(7)
手冊頁上進行了描述。
console-getty.service
:(控制台上的特殊情況)[單元] 描述=控制台蓋蒂 After=systemd-user-sessions.service plymouth-quit-wait.service 之前=getty.target [服務] ExecStart=-/sbin/agetty --noclear --keep-baud 控制台 115200,38400,9600 $TERM 類型=空閒 重啟=總是 重啟秒=0 UtmpIdentifier=缺點 TTYPath=/dev/console TTYReset=是 TTYVHangup=是 KillMode=程序 忽略SIGPIPE=否 發送SIGHUP=是 [安裝] WantedBy=getty.target
getty@.service
: (除控制台外的所有 getty 服務的通用配置)[單元] 描述=蓋蒂在 %I After=systemd-user-sessions.service plymouth-quit-wait.service 之前=getty.target IgnoreOnIsolate=是 ConditionPathExists=/dev/tty0 [服務] ExecStart=-/sbin/agetty --noclear %I $TERM 類型=空閒 重啟=總是 重啟秒=0 UtmpIdentifier=%I TTYPath=/dev/%I TTYReset=是 TTYVHangup=是 TTYVTDisallocate=否 KillMode=程序 忽略SIGPIPE=否 發送SIGHUP=是 [安裝] WantedBy=getty.target 預設實例=tty1
最後,您可能需要一些特殊的二進製文件(我沒有嘗試過哪些是關鍵的):
/lib/systemd/systemd(/sbin/init 通常指向這個) /lib/systemd/systemd-logind /lib/systemd/systemd-cgroups-agent /lib/systemd/systemd-使用者會話 /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-啟動 /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-主機名 /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-線上等待 /lib/systemd/systemd-quotacheck /lib/systemd/systemd-隨機種子 /lib/systemd/systemd-readahead /lib/systemd/systemd-remount-fs /lib/systemd/systemd-resolved /lib/systemd/systemd-rfkill /lib/systemd/systemd-關閉 /lib/systemd/systemd-shutdownd /lib/systemd/systemd-socket-proxyd /lib/systemd/systemd-timedated /lib/systemd/systemd-timesyncd /lib/systemd/systemd-udevd /lib/systemd/systemd-更新-完成
總結 systemd 啟動過程,我認為它的工作原理如下:
- systemd 定位
basic.target
(或所有*.target
文件?)- 依賴關係是基於
WantedBy=
,Wants=
,Before=
,After=
…和配置文件[Install]
部分中的指令解析的。*.service``*.target
*.service
應該啟動的s(不是“特殊”服務),有一個[Service]
帶有ExecStart=
指令的部分,指出要啟動的執行檔。