From e19dedfe17a5957618e67e6ab4d3840fd4e1a73e Mon Sep 17 00:00:00 2001 From: Mitchell R Date: Wed, 20 May 2026 01:42:30 +0200 Subject: [PATCH] ci(pi-gen): native arm64 runner skips QEMU entirely MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit usimd/pi-gen-action#179: Trixie + QEMU breaks on x86 runners (arch-test "arm64: not supported"). Native arm64 runner means no qemu, no binfmt registration dance — pi-gen runs the chroot directly. Faster too. --- .github/workflows/build.yml | 31 ++++--------------------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18bec62..0f2ff35 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -125,10 +125,13 @@ jobs: retention-days: 14 # ---- Flashable Pi OS Trixie image (aarch64 only) ------------------------- + # Native arm64 runner avoids QEMU entirely — pi-gen runs faster + sidesteps + # the Trixie binfmt regression (usimd/pi-gen-action#179). With native arm64 + # the chroot's binaries match the kernel, so arch-test passes immediately. image: if: ${{ inputs.build-image }} needs: binary - runs-on: ubuntu-latest + runs-on: blacksmith-4vcpu-ubuntu-2404-arm steps: - uses: actions/checkout@v6 with: @@ -168,32 +171,6 @@ jobs: deploy/pi-gen/stage-betterframe-client/01-install-kiosk/files/ chmod +x deploy/pi-gen/stage-betterframe-client/01-install-kiosk/00-run-chroot.sh - # x86 runner can't natively execute the arm64 binaries pi-gen drops - # into the chroot. tonistiigi/binfmt registers QEMU with the F flag - # (kernel preloads the static binary), making it visible inside - # pi-gen's nested container kernel-namespace-share. This is what - # docker/setup-qemu-action wraps, called directly here so we control - # the flags + can sanity-check after. - - name: Register QEMU binfmt for arm64 - # Host-install qemu-user-static (Debian/Ubuntu package). It auto- - # registers binfmt_misc entries pointing at - # /usr/bin/qemu-aarch64-static. The Debian post-install also sets - # the F (fix-binary) flag so the kernel preloads the static binary - # bytes — meaning the chroot inside pi-gen doesn't need a copy. - # tonistiigi/binfmt only ships /usr/bin/qemu-aarch64 (dynamic), - # which fails inside a chroot at exec time when ld.so + libs are - # missing. Pi-gen specifically wants the -static path. - run: | - sudo apt-get update - sudo apt-get install -y --no-install-recommends \ - qemu-user-static binfmt-support - sudo update-binfmts --enable qemu-aarch64 - echo "--- binfmt_misc registrations ---" - ls -la /proc/sys/fs/binfmt_misc/ || true - echo "--- qemu-aarch64 detail (interpreter should be -static) ---" - cat /proc/sys/fs/binfmt_misc/qemu-aarch64 || true - file /usr/bin/qemu-aarch64-static || true - - name: Build Pi image (pi-gen) uses: usimd/pi-gen-action@v1 with: