使用 GitLab 运行器在 x64 docker 容器中构建 aarch64 NVIDIA Jetson Nano 映像

使用 GitLab 运行器在 x64 docker 容器中构建 aarch64 NVIDIA Jetson Nano 映像

我正在尝试在 Docker 容器(运行 Ubuntu 20.04 x64)内构建自定义 NVIDIA Jetson Nano 映像(aarch64 架构)。我跳过了 NVIDIA 工具部分,因为在创建证明时我卡在第一部分。我使用以下命令:

apt-get update
apt-get install --no-install-recommends -q -y ca-certificates curl dialog apt-utils bzip2 python gdisk binfmt-support qemu qemu-user-static debootstrap
mkdir -p rootfs
qemu-debootstrap --arch=arm64 --variant=minbase --keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg focal rootfs

我也试过

debootstrap --arch=arm64 --foreign --variant=minbase --keyring=/usr/share/keyrings/ubuntu-archive-keyring.gpg focal rootfs
chroot rootfs qemu-aarch64-static /bin/bash -c '/debootstrap/debootstrap --second-stage'

但是当我使用 GitLab CI 执行此操作时总是出现以下错误。

I: Running command: chroot test /debootstrap/debootstrap --second-stage
chroot: failed to run command '/debootstrap/debootstrap': Exec format error
ERROR: Job failed: exit code 1

当我在 WSL 中或甚至在本地 Docker 容器中本地运行它时,它可以工作。

我还尝试了 Ubuntu 18.04.4 或完全跳过“自定义 rootfs”部分。但是,无论如何我都需要模拟部分,因为 NVIDIA 工具无论如何都在执行 aarch64 二进制文件。

Installing BSP Debian packages in /builds/richardds/jetson-nano-image/build/rootfs
chroot: failed to run command 'dpkg': Exec format error
ERROR: Job failed: exit code 1

您能否建议我如何修复它或在 GitLab-CI 环境(运行 Docker 容器)中创建自定义 aarch64 rootfs 的任何其他可行方法?

答案1

主持人运行Docker 守护进程的操作系统必须binfmt-support安装软件包并binfmt_misc加载模块。

apt-get install binfmt-support
modprobe binfmt_misc

相关内容