和screen
你必须为你的来宾容器应用一个补丁,在我的例子中,我必须使用 gentoo 的规范,使我能够以 root 身份登录而无需密码
请注意,在没有密码的情况下以 root 身份启用控制台登录以进行自动魔法冒险的说明因发行版而异。请检查您的发行版文档。更具体地说,
如果您使用的是 OpenRC ,则在agetty
OR上。inittab
就我而言,我使用的是/usr/lib/systemd/systemd
,所以我就是这样做的agetty
# reset the root password
sed -i -e 's/^root:\*/root:/' /mnt/etc/shadow 2>/dev/null
# patch agetty to autologin as root.
mkdir /mnt/etc/systemd/system/console-getty.service.d
cat <<EOF > /mnt/etc/systemd/system/console-getty.service.d/autologin.conf
[Service]
ExecStart=
ExecStart=-/sbin/agetty --noclear --autologin root --keep-baud console 115200,38400,9600 $TERM
EOF
然后,您可以使用 screen 的 stuff 功能写入您想要发送的任何内容:
它是一个黑客,但我无法让“棘手的方式”正常工作。至少不是在来宾决定接管控制台设备的 systemd-nspawn 中。这可能不是最好的解决方案,但它是一个可行的解决方案。屏幕可能是资源密集型的,所以我绝对不会将其称为“最佳方式”,而只是一种“工作方式”。
# SCREEN POWERUP
screen -AmdS myguest /bin/bash
screen -S myguest -p 0 -X stuff $'systemd-nspawn -D /mnt --machine my-pc -b 3 --link-journal host'$(echo -ne '\015')
read -t 5
# ------ put whatever you want here: -------
# screen -S myguest -p 0 -X stuff $'yourBashCommandsGoHere'$(echo -ne '\015')
# GUEST AND SCREEN SHOTDOWN
screen -S myguest -p 0 -X stuff $'poweroff'$(echo -ne '\015')
read -t 1
screen -S myguest -p 0 -X stuff $'exit'$(echo -ne '\015')
# Done
echo ":-)"