From c2cdb88e643c67e74842831c787be2a63816f50b Mon Sep 17 00:00:00 2001 From: Paul Schneider Date: Mon, 17 Aug 2026 19:38:56 +0100 Subject: [PATCH] workflow: also install arm64 runtime libs (libc6:arm64, etc.) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit crossbuild-essential-arm64 only pulls gcc-aarch64-linux-gnu + binutils-aarch64-linux-gnu + dpkg-cross. It does NOT transitively pull libc6:arm64 (verified on the Debian package index: the Depends chain stops at gcc-12-aarch64-linux-gnu, which doesn't depend on libc6:arm64). So dh_makeshlibs works (binutils is there), but dh_shlibdeps has no arm64 shlibs cache to read from. Add explicit runtime libs after a dpkg --add-architecture arm64 + apt-get update: dpkg --add-architecture arm64 apt-get update apt-get install -y --no-install-recommends \ build-essential debhelper imagemagick librsvg2-bin \ ca-certificates crossbuild-essential-arm64 \ libc6:arm64 libstdc++6:arm64 \ libfontconfig1:arm64 libfreetype6:arm64 \ libgtk-3-0:arm64 If the arm64 packages are unavailable from the runner's configured apt sources, this run will fail with 'Unable to locate package libc6:arm64' — but that was a real failure mode already explored in earlier runs (run #31, before we had dpkg --add-architecture arm64 in place). --- .forgejo/workflows/release.yml | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index 6f357ba..d280912 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -74,24 +74,26 @@ jobs: # via `convert`, librsvg2-bin pour le SVG). run: | apt-get update - # crossbuild-essential-arm64 is the official Debian - # meta-package for arm64 cross-compilation. It pulls - # in gcc-aarch64-linux-gnu, binutils-aarch64-linux-gnu, - # libc6-dev:arm64, linux-libc-dev:arm64, and sets up - # dpkg-cross (CONFIG_SITE under /etc/dpkg-cross/). - # For our package, the key bits are: - # - binutils-aarch64-linux-gnu (provides - # aarch64-linux-gnu-objdump needed by dh_makeshlibs) - # - libc6-dev:arm64 and friends (so dpkg-shlibdeps can - # resolve the arm64 binaries' NEEDED entries against - # the cross-arch shlibs cache installed on the host). - # The arm64 gcc isn't strictly needed (we have no C - # code to compile — only dotnet publish), but it doesn't - # hurt and keeps the environment consistent for any - # future C-coded debhelper rules. + # Cross-build deps for arm64: + # 1. dpkg --add-architecture arm64 + apt-get update — make + # apt aware of arm64 packages. + # 2. Install the arm64 RUNTIME libs (libc6:arm64, etc.) + # so dpkg-shlibdeps can resolve the .so dependencies + # of the arm64 binaries via the on-host shlibs cache. + # The runtime libs (not -dev:arm64) is what carries + # the SONAME metadata that dpkg-shlibdeps matches. + # 3. crossbuild-essential-arm64 pulls gcc/binutils for + # arm64, plus dpkg-cross CONFIG_SITE files under + # /etc/dpkg-cross/. The cross-gcc is unused for our + # dotnet-only build but harmless. + dpkg --add-architecture arm64 + apt-get update apt-get install -y --no-install-recommends \ build-essential debhelper imagemagick librsvg2-bin \ - ca-certificates crossbuild-essential-arm64 + ca-certificates crossbuild-essential-arm64 \ + libc6:arm64 libstdc++6:arm64 \ + libfontconfig1:arm64 libfreetype6:arm64 \ + libgtk-3-0:arm64 rm -rf /var/lib/apt/lists/* : > "$STATE_FILE"