一直在尝试理解和使用 systemd-nspawn,因为我想为自己运行 Debian 测试安装,而不在我的主要 Debian 稳定系统上启用测试存储库。
我编写了这个 shell 脚本来帮助设置 Debootstrap 进程:
#!/bin/sh
dirpath="$1"
if [ -z "$dirpath" ]; then
dirpath="debian-testing-devel"
elif ! [ -d "$dirpath" ]; then
mkdir -p "$dirpath"
fi
echo "NOTICE: You must run `debootstrap` as a root user! Requesting sudo privilage..."
sudo debootstrap --include="dbus,systemd-container" testing "$dirpath" "https://deb.debian.org/debian"
echo "Debootstrap has finished!"
echo "You may log in to your system by using: systemd-nspawn -D ${dirpath} -U --machine debian-testing-devel"
echo "Make sure to set a secure root password!"
基本上就是这样。我将其命名为“debian-testing-devel”。然后我很快了解到machinectl
只能访问“/var/lib/machines/”中的内容,所以我将我创建的目录移动到那里。反正...
然后我使用 登录systemd-nspawn -D /var/lib/machines/debian-testing-devel/ -U --machine debian-testing-devel
,并设置密码,并且必须将“pts/0”和“pts/1”添加到“/etc/securetty”,以便我可以以 root 身份登录。
当我尝试使用 登录时machinectl login debian-testing-devel
,出现“无法登录 PTY:协议错误”
所以我再次登录到容器systemd-nspawn
,发现软件包安装由于某种原因被破坏了dbus
,所以我运行了apt -f install
,这似乎修复了它......有点。另一个在线来源声称我还必须安装systemd
在容器本身中,而不仅仅是 DBus,以消除协议错误,所以我尝试了!
最后,当我尝试machinectl login debian-testing-devel
再次运行时,我仍然卡在“无法登录 PTY:...”,这次它说,Failed to get login PTY: Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms)
。
所以我真的不知道下一步该做什么。尝试在线搜索这个问题并没有得到太多结果,我不确定发生了什么。当我试图学习这些东西并让它发挥作用时,我感到有点沮丧……我尝试做的事情似乎都不起作用……
任何帮助表示赞赏!
答案1
好的,我终于可以再次登录了。检查我的目录后,我意识到有一些文件由 拥有root:root
,然后其他文件由 拥有(random id):(random id)
,但在debootstrap
再次重建后,绝对确保它完成而没有任何错误,然后尝试systemd-nspawn
使用该标志运行命令-U
,它让我登录得很好。我真的只是希望对于刚接触容器的人来说,会有更好的错误消息,清楚地表明出了什么问题。因为我被困在这个问题上几天了,不知道我的容器目录/根目录是坏的。所以只是……是的,这一切都有点糟糕。我现在肯定会确保对我的容器文件夹进行快照和备份,因为显然,只要忘记使用非特权用户,它们就很容易被损坏。哎呀。我仍然觉得容器的稳定性和易用性还有很长的路要走,IMO。