【发布时间】:2021-12-17 04:55:50
【问题描述】:
好的,这是一个复杂的话题,非常感谢所有花时间阅读本文的人。这一切都始于尝试从 python 脚本创建一个可执行文件以在目标架构上运行。
目标拱门是 arm64。我在 MAC 上完成所有这些工作。主要问题是目标设备使用 uclibc。如果它使用 glibc 或 musl,我将能够使用下面描述的 ubuntu 容器或带有 python 的 alpine 容器进行交叉编译。 (使用 pyinstaller 创建可执行文件)
我创建了一个 buildx 容器并在 arm64 架构上运行了一个 ubuntu 容器(已确认)。从那里我在 ubunutu 容器中使用一个名为 Buildroot 的工具来创建一个自定义的 linux 文件系统。经过漫长的等待创建“rootfs.tar”
现在好了,把所有非 docker 的东西都扔掉了。我将此 rootfs.tar 文件复制到我的主机并尝试构建一个映像来运行我的自定义 linux。
Docker 文件
FROM scratch
MAINTAINER peskyadmin
ADD rootfs.tar /
构建命令
docker buildx build -t "${DOCKER_USER}/testrtfs:latest" --platform linux/arm64 --push .
运行命令
docker run --privileged --entrypoint "/bin/sh" -it "$DOCKER_USER/testrtfs:latest" --platform linux/arm64
运行输出
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
standard_init_linux.go:228: exec user process caused: exec format error
使用最新版本的 Docker Desktop。我认为警告不是问题,因为当我运行使用 buildx 创建的 ubunutu 容器时,它会显示相同的错误消息,但正在目标架构上运行
我的问题是我做错了什么?我不明白这个错误。我的直觉告诉我这个问题与 dockerfile 有关,但我不确定,因为在使用 buildroot 创建 rootfs.tar 时这可能是一个问题?
目标 cpu 是一个 cortex A53,与树莓派 3 中的相同。我想我可以尝试将映像直接安装到裸机 pi 上,然后尝试在那里进行交叉编译。但我真的很想在我的 Mac 上保持一切虚拟化。
【问题讨论】:
-
问题是什么?
-
@DanielCampos 我更新了我的问题以更直接。
-
问:简单地确保您的目标安装了 Python 不是更容易/更高效/更健壮吗?
标签: linux docker dockerfile buildroot