From 306d8f289a9b77cf64792ef844b6048dceddb409 Mon Sep 17 00:00:00 2001 From: Kannan J Date: Wed, 27 May 2026 04:27:08 +0000 Subject: [PATCH] build: downgrade multiarch to Ubuntu 20.04 and consolidate images Downgrades the multiarch build environment from Ubuntu 24.04 to 20.04. This ensures that native artifacts for aarch64 and ppc64le are linked against glibc 2.31, providing better compatibility with older but still-supported distributions (like RHEL 8 and Ubuntu 20.04). Additionally, this consolidates s390x cross-compilation into the multiarch image, removing the need for a separate ubuntu2004 base image. - Update Dockerfile.multiarch.base to use ubuntu:20.04 - Add g++-s390x-linux-gnu to multiarch image - Update linux_artifacts.sh to use multiarch for all cross-builds - Remove references to Dockerfile.ubuntu2004.base in build scripts Summary of what this commit achieves: 1. Improves Compatibility: Lowering the glibc requirement from 2.39 (Ubuntu 24.04) to 2.31 (Ubuntu 20.04) prevents "version `GLIBC_2.XX' not found" errors when users try to run the artifacts on older systems. 2. Simplifies CI: Merges the s390x toolchain into the multiarch image, reducing the number of Docker images the project needs to build and maintain. 3. Addresses Reviewer Feedback: Directly implements the "choice" of Ubuntu 20.04 suggested by the reviewer as a safer stopgap for the build. Fixes #12797. --- buildscripts/build_docker.sh | 1 - .../Dockerfile.multiarch.base | 8 +++----- .../Dockerfile.ubuntu2004.base | 19 ------------------- buildscripts/kokoro/linux_artifacts.sh | 4 +--- 4 files changed, 4 insertions(+), 28 deletions(-) delete mode 100644 buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base diff --git a/buildscripts/build_docker.sh b/buildscripts/build_docker.sh index b34f9a6e542..fa75c07c1eb 100755 --- a/buildscripts/build_docker.sh +++ b/buildscripts/build_docker.sh @@ -4,5 +4,4 @@ set -eu -o pipefail readonly buildscripts_dir="$(dirname "$(readlink -f "$0")")" docker build -t grpc-java-artifacts-x86 "$buildscripts_dir"/grpc-java-artifacts docker build -t grpc-java-artifacts-multiarch -f "$buildscripts_dir"/grpc-java-artifacts/Dockerfile.multiarch.base "$buildscripts_dir"/grpc-java-artifacts -docker build -t grpc-java-artifacts-ubuntu2004 -f "$buildscripts_dir"/grpc-java-artifacts/Dockerfile.ubuntu2004.base "$buildscripts_dir"/grpc-java-artifacts diff --git a/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base b/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base index 6b670994677..b2f5625afe3 100644 --- a/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base +++ b/buildscripts/grpc-java-artifacts/Dockerfile.multiarch.base @@ -1,7 +1,4 @@ -FROM ubuntu:24.04 - -# Redirect to the internal mirror to bypass the Kokoro network block -RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|http://mirror.bazel.build/archive.ubuntu.com/ubuntu/|g' /etc/apt/sources.list +FROM ubuntu:20.04 RUN export DEBIAN_FRONTEND=noninteractive && \ apt-get update && \ @@ -12,8 +9,9 @@ RUN export DEBIAN_FRONTEND=noninteractive && \ curl \ g++-aarch64-linux-gnu \ g++-powerpc64le-linux-gnu \ + g++-s390x-linux-gnu \ openjdk-11-jdk \ - pkgconf \ + pkg-config \ && \ rm -rf /var/lib/apt/lists/* diff --git a/buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base b/buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base deleted file mode 100644 index e987fb3e684..00000000000 --- a/buildscripts/grpc-java-artifacts/Dockerfile.ubuntu2004.base +++ /dev/null @@ -1,19 +0,0 @@ -FROM ubuntu:20.04 - -RUN export DEBIAN_FRONTEND=noninteractive && \ - apt-get update && \ - apt-get upgrade -y && \ - apt-get install -y --no-install-recommends \ - build-essential \ - ca-certificates \ - curl \ - g++-s390x-linux-gnu \ - openjdk-8-jdk \ - pkg-config \ - && \ - rm -rf /var/lib/apt/lists/* - -RUN curl -Ls https://github.com/Kitware/CMake/releases/download/v3.26.3/cmake-3.26.3-linux-x86_64.tar.gz | \ - tar xz -C /var/local -ENV PATH /var/local/cmake-3.26.3-linux-x86_64/bin:$PATH - diff --git a/buildscripts/kokoro/linux_artifacts.sh b/buildscripts/kokoro/linux_artifacts.sh index 49d9932dfa0..778826b2fc2 100755 --- a/buildscripts/kokoro/linux_artifacts.sh +++ b/buildscripts/kokoro/linux_artifacts.sh @@ -17,7 +17,5 @@ trap spongify_logs EXIT SKIP_TESTS=true ARCH=aarch_64 /grpc-java/buildscripts/kokoro/unix.sh "$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-multiarch env \ SKIP_TESTS=true ARCH=ppcle_64 /grpc-java/buildscripts/kokoro/unix.sh -# Use a newer GCC version. GCC 7 in multiarch has a bug: -# internal compiler error: output_operand: invalid %-code -"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-ubuntu2004 env \ +"$GRPC_JAVA_DIR"/buildscripts/run_in_docker.sh grpc-java-artifacts-multiarch env \ SKIP_TESTS=true ARCH=s390_64 /grpc-java/buildscripts/kokoro/unix.sh