workflow: also install arm64 runtime libs (libc6:arm64, etc.)
Some checks failed
Forgejo Release postit-deb / release (push) Failing after 2m5s

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).
This commit is contained in:
Paul Schneider 2026-08-17 19:38:56 +01:00
commit c2cdb88e64
No known key found for this signature in database
GPG key ID: 1E66C65EE2B46F1B

View file

@ -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"