Fix Trixie cross-building

Debian 13 removed the `cross-gcc-dev` package as it was unmaintained
(Debian bug #1107126). This broke the existing cross build setup.

Instead, switch to using binary cross-gcc packages, which work the same
without having to manually generate the libraries. This is still fully
symmetrical.
This commit is contained in:
Joshua M. Boniface
2025-08-13 23:31:29 -04:00
parent 6c2a024157
commit 671d66c35c
4 changed files with 12 additions and 6 deletions

View File

@@ -48,7 +48,7 @@ This repository contains operating system and Docker packaging for Jellyfin, for
## Quickstart
To build Jellyfin packages for yourself, follow this quickstart guide. You will need to be running on a Linux system, preferably Debian- or Ubuntu-based, with Docker, Python3 and the Python packages `PyYAML` and `git` (`python3-yaml` and `python3-git` in Debian). Other systems including WSL are untested.
To build Jellyfin packages for yourself, follow this quickstart guide. You will need to be running on an amd64 Linux system, preferably Debian- or Ubuntu-based, with Docker, Python3 and the Python packages `PyYAML` and `git` (`python3-yaml` and `python3-git` in Debian). Other systems including WSL are untested.
1. Install Docker on your system. The build scripts leverage Docker containers to perform clean builds and avoid contaminating the host system with dependencies.
@@ -68,7 +68,7 @@ If you want a non-Docker image output (`.deb`, `tar`/`zip` archive, etc.) follow
* The second argument is the "platform" you want to build for. The available options are listed as top-level keys in the `build.yaml` configuration file or in the `-h` help output.
* The third argument is, for all platforms except `portable` (DotNET portable), the architecture you want to build for. For each platform, the available architectures can be found as the keys under `archmaps` in the `build.yaml` configuration file.
* The third argument is, for all platforms except `portable` (DotNET portable), the architecture you want to build for. For each platform, the available architectures can be found as the keys under `archmaps` in the `build.yaml` configuration file. Cross-building of `arm64` on `amd64` is supported, but not the other way around.
* The fourth argument is exclusive to `debian` and `ubuntu` `.deb` packages, and is the release codename of Debian or Ubuntu to build for. For each platform, the available releases can be found as the keys under `releases` in the `build.yaml` configuration file.
@@ -114,7 +114,7 @@ If you want a Docker image output follow this process:
* The second argument is the "platform" you want to build for. For Docker images, this should be `docker`.
* The third argument is the architecture you wish to build for. This argument is optional, and not providing it will build images for all supported architectures (sequentially).
* The third argument is the architecture you wish to build for. This argument is optional, and not providing it will build images for all supported architectures (sequentially). Cross-building of `arm64` on `amd64` is supported, but not the other way around.
* The fourth argument is `--local`, which should be provided to prevent the script from trying to generate image manifests and push the resulting images to our repositories.

View File

@@ -106,6 +106,7 @@ def build_package_deb(
f"{build_version} is not a valid {build_type} version in {configurations[build_type]['releases'].keys()}"
)
PACKAGE_ARCH = _determine_arch(build_type, build_arch, build_version)
GCC_ARCH = configurations[build_type]["archmaps"][build_arch]["GCC_ARCH"]
except Exception as e:
log(f"Invalid/unsupported arguments: {e}")
exit(1)
@@ -147,6 +148,7 @@ def build_package_deb(
build_args.append(f"--build-arg PACKAGE_TYPE={os_type}")
build_args.append(f"--build-arg PACKAGE_VERSION={os_version}")
build_args.append(f"--build-arg PACKAGE_ARCH={PACKAGE_ARCH}")
build_args.append(f"--build-arg GCC_ARCH={GCC_ARCH}")
build_args.append(f"--build-arg GCC_VERSION={crossgccvers}")
# Determine framework versions

View File

@@ -30,8 +30,10 @@ debian:
archmaps:
amd64:
PACKAGE_ARCH: amd64
GCC_ARCH: x86-64
arm64:
PACKAGE_ARCH: arm64
GCC_ARCH: aarch64
cross-gcc:
bullseye: '10'
bookworm: '12'

View File

@@ -7,6 +7,7 @@ ARG GCC_VERSION=12
ARG PACKAGE_TYPE
ARG PACKAGE_VERSION
ARG PACKAGE_ARCH
ARG GCC_ARCH
FROM ${PACKAGE_TYPE}:${PACKAGE_VERSION}
@@ -17,6 +18,7 @@ ARG NODEJS_VERSION
ARG PACKAGE_TYPE
ARG PACKAGE_VERSION
ARG PACKAGE_ARCH
ARG GCC_ARCH
ARG GCC_VERSION
# Docker run environment
@@ -26,6 +28,7 @@ ENV DEB_BUILD_OPTIONS=noddebs
ENV TYPE=${PACKAGE_TYPE}
ENV VERSION=${PACKAGE_VERSION}
ENV ARCH=${PACKAGE_ARCH}
ENV GCC_ARCH=${GCC_ARCH}
# Prepare Debian build environment
RUN apt-get update -y \
@@ -69,9 +72,6 @@ RUN if test "${PACKAGE_ARCH}" != "$( dpkg --print-architecture )"; then \
&& set -o xtrace \
&& dpkg --add-architecture ${PACKAGE_ARCH} \
&& apt-get update -y \
&& apt-get install --no-install-recommends -y cross-gcc-dev \
&& TARGET_LIST="${PACKAGE_ARCH}" cross-gcc-gensource ${GCC_VERSION} \
&& cd cross-gcc-packages-amd64/cross-gcc-${GCC_VERSION}-${PACKAGE_ARCH} \
&& DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC \
apt-get -f install --no-install-recommends -o Dpkg::Options::="--force-overwrite" -y \
bison \
@@ -92,6 +92,8 @@ RUN if test "${PACKAGE_ARCH}" != "$( dpkg --print-architecture )"; then \
binutils-aarch64-linux-gnu \
binutils-arm-linux-gnueabihf \
gcc-${GCC_VERSION}-source \
gcc-${GCC_ARCH}-linux-gnu \
binutils-${GCC_ARCH}-linux-gnu \
libstdc++-${GCC_VERSION}-dev-${PACKAGE_ARCH}-cross \
libc6-dev:${PACKAGE_ARCH} \
linux-libc-dev:${PACKAGE_ARCH} \