一直在尝试理解和使用 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)
。
所以我真的不确定下一步该怎么做。尝试在线搜索此问题并没有找到太多结果,而且我不确定发生了什么。尝试学习这些东西并让它工作时有点令人沮丧……我尝试做的任何事情似乎都不起作用……
任何帮助表示赞赏!
好的,所以我终于让它再次登录了。检查我的目录后,我意识到有一些文件属于
root:root
,然后其他文件属于(random id):(random id)
,但是在再次重建之后debootstrap
,绝对确保它完成没有任何错误,然后尝试使用运行systemd-nspawn
命令-U
标记它让我登录就好了。我真的只是希望那些不熟悉容器的人能有更好的错误消息,这些消息清楚地表明出了什么问题。因为我坚持了几天,不知道我的容器目录/root 是坏的。所以只是......是的,这一切都很糟糕。我现在肯定会确保对我的容器文件夹进行快照和备份,因为显然它们很容易因为忘记使用非特权用户而被破坏。哎呀。IMO,我仍然觉得容器的稳定性和易用性还有很长的路要走。