我想要systemd-nspawn
一个 Ubuntu 镜像(yakkety,主机也在 yakkety 上)。这曾经工作得没有问题,所以我猜想在过去的 6 个月里发生了一些变化。
我通过以下方式创建了图像debootstrap
:
# debootstrap --variant=minbase --include=nano,dbus,isc-dhcp-client,iputils-ping,iproute2,python3 yakkety yakkety http://fr.archive.ubuntu.com/ubuntu
然后我尝试启动它:
# machinectl start yakkety
没有错误消息,但容器未启动。journalctl -xe
暴露了错误:
Feb 27 13:24:27 srv systemd-nspawn[27348]: execv(/usr/lib/systemd/systemd, /lib/systemd/systemd, /sbin/init) failed: No such file or directory
好像没有什么可以初始化的?通过创建的图像怎么可能做到这一点debootstrap
?否则图像看起来正常(它包含常见的文件夹和二进制文件 - 除了上面的文件夹和二进制文件,因为它们不存在而无法启动)
直接调用会systemd-nspawn
产生相同的错误:
# systemd-nspawn -b -D yakkety -n
Spawning container yakkety on /var/lib/machines/yakkety.
Press ^] three times within 1s to kill container.
execv(/usr/lib/systemd/systemd, /lib/systemd/systemd, /sbin/init) failed: No such file or directory
Container yakkety failed with error code 1.
systemd
我尝试通过将和init
软件包添加到要预安装的软件包的 luist 中来重新创建图像(python3
在上面的示例中之后),但这并没有改变任何内容。
问题是什么?我需要安装额外的软件包吗? (我之前没有安装任何特殊的东西xenial
,如果我没有记错的话,也没有安装任何特殊的东西yakkety
)。
所有软件包都是最新版本,包括systemd
(233)。
答案1
您需要在容器内安装 init 系统,例如 systemd:
chroot /var/lib/machines/yakkety
apt-get install systemd
我在 Debian 上遇到了同样的问题,这解决了问题。