LXD:运行具有外部架构的映像

我想使用LXD来引导根文件系统,以便在运行ubuntu 16.04的AMD64主机上的嵌入式ARM系统上进行部署。 以前,我用脚本和chroot命令完成了这个,但是我使用的脚本容易出错并且习惯于删除我的/ dev条目。

我已经能够使用lxc image copy images:ubuntu/16.04/arm64 --alias=ubuntu-server-arm64映像在本地lxc image copy images:ubuntu/16.04/arm64 --alias=ubuntu-server-arm64 ,并且安装了qemu-user-static,但是无法从此实际启动容器图片。 我收到以下错误:

 $ lxc launch ubuntu-server-arm64 bootstrap Creating bootstrap error: Requested architecture isn't supported by this host 

有没有办法强制lxd忽略架构不匹配,并使用qemu-user-static来运行子容器?

根据负责LXC / LXD项目的Stephane Graber(回应我在他们的讨论网站上的询问):

qemu-user-static是一个binfmt帮助程序,它允许您在体系结构之间进行即时转换。 它有效地允许您为当前体系结构之外的体系结构运行二进制文件。

qemu-user-static本身应该在容器内正常工作,并允许你在其中运行一些外部架构的二进制文件。

尝试通过qemu-user-static运行整个容器是非常不切实际的,因为qemu-user-static有一些很大的限制,例如,任何依赖于ptrace(init系统和调试工具),netlink(所有网络工具和一些初始化系统)或线程(更多软件)通常会失败。

我在LXC中实现的方法是创建一个混合容器,其中大多数包都是外部体系结构,但init系统,网络工具……都是本机体系结构。 这是有点工作,但也没有特别有用,更不用说非常慢。

因为就我们而言,这实际上是不受支持的,我们不会为LXD提供任何外观架构图像。 然而,您可以通过组装外部体系结构的rootfs来构建自己的,然后包含所需的qemu-user-static二进制文件,替换任何不能用于模拟的二进制文件,并将其生成为LXD图像(使用其预期的体系结构标记它)运行而不是它包含的架构)。

因此,有效地,尝试在LXD上运行外部架构是不受支持的,并且LXC方法或多或少是“混合环境”类型的黑客。

听起来它也可以完成,但是需要你创建一个外部架构的rootfs,并且基本上自己创建运行所有这些的“图像”,由于各种原因,这可能是一件令人头疼的事情,需要做很多工作。