Pau*_*ger 3 lxc lxd 16.04 arm64
我想使用 LXD 引导根文件系统,以便从运行 ubuntu 16.04 的 AMD64 主机部署在嵌入式 ARM 系统上。以前,我使用脚本和chroot
命令完成了此操作,但我使用的脚本容易出错,并且有删除 /dev 条目的坏习惯。
我已经能够使用 本地复制映像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
Run Code Online (Sandbox Code Playgroud)
有没有办法强制 lxd 忽略架构不匹配并用于
qemu-user-static
运行子容器?
小智 5
我能够让一个外国架构与 LXD 一起工作。我拍摄了一个 ARMv7 映像,从中创建了一个 squashfs,添加qemu-arm-static
到/usr/bin
. 让它与 LXD 一起工作的技巧是让元数据 tarball 说图像是 x86_64(或任何你的主机架构)。导入并运行这个镜像是可行的,LXD 认为它是一个受支持的架构(匹配主机)并且它能够运行因为qemu-arm-static
和binfmt
。
ALPINE_MIRROR_URL="http://ams.edge.kernel.org/alpine"
ALPINE_VERSION="3.11.5"
ALPINE_ARCH="armhf"
version=$(echo $ALPINE_VERSION | cut -d '.' -f 1-2)
curl -O ${ALPINE_MIRROR_URL}/v${version}/releases/${ALPINE_ARCH}/alpine-minirootfs-${ALPINE_VERSION}-${ALPINE_ARCH}.tar.gz
ROOTFS=alpine-rootfs
mkdir ${ROOTFS}
tar xzf alpine-minirootfs-${ALPINE_VERSION}-${ALPINE_ARCH}.tar.gz -C ${ROOTFS}
cp /usr/bin/qemu-arm-static ${ROOTFS}/usr/bin/
mksquashfs ${ROOTFS} rootfs.squashfs
lxc import meta.tar.xz rootfs.squashfs --alias crossx
lxc launch crossx x
lxc exec x -- uname -a
Linux x 4.15.0-50-generic #54-Ubuntu SMP Mon May 6 18:46:08 UTC 2019 armv7l Linux
lxc image ls
| crossx | 1e5e5a2dafb8 | no | Alpinelinux x86_64 (20200330_1354) | x86_64 | CONTAINER | 5.45MB | Apr 2, 2020 at 6:25pm (UTC) |
Run Code Online (Sandbox Code Playgroud)
您可以在最后两个命令中看到容器实际上是,armv7l
但 LXD 认为它是 x86_64。
归档时间: |
|
查看次数: |
1888 次 |
最近记录: |