From e912fa584f2e1fa87aad7ad9abaeb689670c1712 Mon Sep 17 00:00:00 2001 From: Jason Pascucci Date: Wed, 28 Oct 2026 09:14:31 -0700 Subject: [PATCH 1/3] Fix CI driver builds after Ubuntu runner kernel updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For kernels newer than 6.8.0-142, detect the kernel’s GCC major version from /proc/version, install matching gcc/g++ packages, and export CC/CXX for the driver build. Preserve existing compiler selection on older kernels. This addresses the 580.65.06 DKMS failure on 6.8.0-147, where GCC 13 rejects the kernel’s GCC 14 compiler flags, while retaining older-driver coverage. Validated shell syntax, lint, and eight mocked regression cases. Live GPU validation remains pending CI. --- ci/tools/install_gpu_driver.sh | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/ci/tools/install_gpu_driver.sh b/ci/tools/install_gpu_driver.sh index 7edfaf03580..335dfe6e99f 100755 --- a/ci/tools/install_gpu_driver.sh +++ b/ci/tools/install_gpu_driver.sh @@ -90,7 +90,27 @@ in_container() { } host_install() { - apt-get -y install build-essential dkms "linux-headers-$(uname -r)" psmisc kmod + local kernel_release kernel_version gcc_major="" + local -a compiler_packages=() + kernel_release=$(uname -r) + # Compare the Ubuntu ABI version without the flavor (e.g. -generic). + kernel_version=$(echo "$kernel_release" | sed -E 's/-[^0-9].*$//') + if dpkg --compare-versions "$kernel_version" gt 6.8.0-142; then + # Newer runner kernels may require flags missing from build-essential's GCC. + gcc_major=$(sed -nE 's/.*gcc(-[0-9]+)? (\([^)]*\) )?([0-9]+)\..*/\3/p' /proc/version) + if [ -z "$gcc_major" ]; then + echo "::error::cannot detect the kernel GCC version from /proc/version" >&2 + return 1 + fi + compiler_packages=("gcc-${gcc_major}" "g++-${gcc_major}") + fi + apt-get -y install build-essential "${compiler_packages[@]}" dkms "linux-headers-${kernel_release}" psmisc kmod + + if [ -n "$gcc_major" ]; then + # Installing a versioned compiler does not change the default; select it for DKMS. + export CC="gcc-${gcc_major}" CXX="g++-${gcc_major}" + echo "Kernel ${kernel_release}: using CC=${CC} CXX=${CXX}" >&2 + fi # Download and verify the installer before tearing down the existing # host driver so a download failure or SHA-256 mismatch leaves the From 97c7336eda3c378e4c72b81f7abd93de7929e172 Mon Sep 17 00:00:00 2001 From: Jason Pascucci Date: Wed, 28 Oct 2026 09:42:25 -0700 Subject: [PATCH 2/3] Follow Ralf J's comments, but slightly better. --- ci/tools/install_gpu_driver.sh | 27 ++++++++++----------------- 1 file changed, 10 insertions(+), 17 deletions(-) diff --git a/ci/tools/install_gpu_driver.sh b/ci/tools/install_gpu_driver.sh index 335dfe6e99f..2b347e2efb2 100755 --- a/ci/tools/install_gpu_driver.sh +++ b/ci/tools/install_gpu_driver.sh @@ -90,25 +90,18 @@ in_container() { } host_install() { - local kernel_release kernel_version gcc_major="" - local -a compiler_packages=() + local kernel_release kernel_gcc default_gcc kernel_release=$(uname -r) - # Compare the Ubuntu ABI version without the flavor (e.g. -generic). - kernel_version=$(echo "$kernel_release" | sed -E 's/-[^0-9].*$//') - if dpkg --compare-versions "$kernel_version" gt 6.8.0-142; then - # Newer runner kernels may require flags missing from build-essential's GCC. - gcc_major=$(sed -nE 's/.*gcc(-[0-9]+)? (\([^)]*\) )?([0-9]+)\..*/\3/p' /proc/version) - if [ -z "$gcc_major" ]; then - echo "::error::cannot detect the kernel GCC version from /proc/version" >&2 - return 1 - fi - compiler_packages=("gcc-${gcc_major}" "g++-${gcc_major}") - fi - apt-get -y install build-essential "${compiler_packages[@]}" dkms "linux-headers-${kernel_release}" psmisc kmod - - if [ -n "$gcc_major" ]; then + apt-get -y install build-essential dkms "linux-headers-${kernel_release}" psmisc kmod + + # Match the kernel's GCC major only when the default compiler differs. + kernel_gcc=$(sed -nE 's/.*gcc(-[0-9]+)? (\([^)]*\) )?([0-9]+)\..*/\3/p' /proc/version) + default_gcc=$(gcc -dumpversion | cut -d. -f1) + echo "Kernel ${kernel_release}: GCC major=${kernel_gcc:-unknown}, default GCC major=${default_gcc}" >&2 + if [ -n "$kernel_gcc" ] && [ "$kernel_gcc" != "$default_gcc" ]; then + apt-get -y install "gcc-${kernel_gcc}" "g++-${kernel_gcc}" # Installing a versioned compiler does not change the default; select it for DKMS. - export CC="gcc-${gcc_major}" CXX="g++-${gcc_major}" + export CC="gcc-${kernel_gcc}" CXX="g++-${kernel_gcc}" echo "Kernel ${kernel_release}: using CC=${CC} CXX=${CXX}" >&2 fi From 1cfdc45cd068b96b5fd69e9501080ca9d10a1732 Mon Sep 17 00:00:00 2001 From: Jason Pascucci Date: Wed, 28 Oct 2026 09:52:53 -0700 Subject: [PATCH 3/3] Coderabbit's suggestion --- ci/tools/install_gpu_driver.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci/tools/install_gpu_driver.sh b/ci/tools/install_gpu_driver.sh index 2b347e2efb2..3205f4fc403 100755 --- a/ci/tools/install_gpu_driver.sh +++ b/ci/tools/install_gpu_driver.sh @@ -92,7 +92,7 @@ in_container() { host_install() { local kernel_release kernel_gcc default_gcc kernel_release=$(uname -r) - apt-get -y install build-essential dkms "linux-headers-${kernel_release}" psmisc kmod + apt-get -y install build-essential # Match the kernel's GCC major only when the default compiler differs. kernel_gcc=$(sed -nE 's/.*gcc(-[0-9]+)? (\([^)]*\) )?([0-9]+)\..*/\3/p' /proc/version) @@ -105,6 +105,9 @@ host_install() { echo "Kernel ${kernel_release}: using CC=${CC} CXX=${CXX}" >&2 fi + # Header installation can trigger DKMS builds, so select the compiler first. + apt-get -y install dkms "linux-headers-${kernel_release}" psmisc kmod + # Download and verify the installer before tearing down the existing # host driver so a download failure or SHA-256 mismatch leaves the # runner's current driver intact.