Systemd
內部帶有 systemd 的 nspawn 容器的“無法獲取 shell PTY:協議錯誤”
我創建容器
# debootstrap --variant=minbase --include=systemd,iproute2 buster "/var/lib/machines/test"
然後我執行它:
# systemd-nspawn --machine test
僅用於測試目的。容器啟動,當我嘗試使用它訪問它時,
machinectl
出現錯誤:# machinectl shell test Failed to get shell PTY: Protocol error
經過一番Google搜尋,我意識到有一個舊的錯誤導致了這種行為,但這在systemd v226中得到了修復,並且
/usr/bin/systemd --version
在我的 debian 上顯示了 246 版本。我可以使用“非 systemd 容器”方法進入容器,但我的容器執行 systemd,我應該可以使用
machinectl
.
看起來我
dbus
在容器內失踪了。# chroot /var/lib/machines/test apt install dbus
或者從頭開始使用:
# debootstrap --variant=minbase --include=systemd,dbus buster "/var/lib/machines/test"
兩者都解決了問題。
教程
創建 Debian 容器
此步驟創建最小容器,包括兩個基本包,稍後可以輕鬆啟用“machinectl login debiancontainer”,而不會出現任何“無法獲取登錄 PTY”錯誤。注意 minbase 的缺失(這避免了使用 passwd 時的錯誤)。
debootstrap --include=systemd,dbus unstable /var/lib/machines/debiancontainer
設置root密碼
這一一次性步驟在新容器內配置 root 密碼。
systemd-nspawn --machine debiancontainer
應遵循的範例輸出
systemd-nspawn --machine debiancontainer Spawning container debiancontainer on /var/lib/machines/debiancontainer. Press ^] three times within 1s to kill container. root@debiancontainer:~#
現在只需執行並使用 exit 或 CTRL-D 完成
root@debiancontainer:~# passwd New password: Retype new password: passwd: password updated successfully root@debiancontainer:~# logout
使用 machinectl 啟動容器
注意:這些命令可以作為普通使用者使用,因此請在請求者對話框中提供適用的密碼。
machinectl start debiancontainer machinectl list
範例輸出:
local@yourhost:~$ machinectl list MACHINE CLASS SERVICE OS VERSION ADDRESSES debiancontainer container systemd-nspawn debian - - 1 machines listed.
使用 machinectl 登錄
範例輸出
$ machinectl login debiancontainer Connected to machine debiancontainer. Press ^] three times within 1s to exit session. Debian GNU/Linux bookworm/sid yourhost pts/1 yourhost login: root Password: Linux yourhost 5.13.19-2 #1 SMP 5.13.19-4 (Mon, 29 Nov 2021 12:10:09 +0100) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. root@yourhost:~#