From 671d66c35cd7825e650dce668f3a73fa7a9ed47c Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Wed, 13 Aug 2025 23:31:29 -0400 Subject: [PATCH] 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. --- README.md | 6 +++--- build.py | 2 ++ build.yaml | 2 ++ debian/docker/Dockerfile | 8 +++++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c66a3ed..1a7ae4b 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/build.py b/build.py index 5187777..2c06824 100755 --- a/build.py +++ b/build.py @@ -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 diff --git a/build.yaml b/build.yaml index c501200..9c37347 100644 --- a/build.yaml +++ b/build.yaml @@ -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' diff --git a/debian/docker/Dockerfile b/debian/docker/Dockerfile index 06269c0..ce952c3 100644 --- a/debian/docker/Dockerfile +++ b/debian/docker/Dockerfile @@ -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} \