From bbf2bf361b5b04077dc928611c6c5fc9d1ae0f02 Mon Sep 17 00:00:00 2001 From: Jose Fernandez Date: Fri, 6 Feb 2026 08:22:51 -0700 Subject: [PATCH] [ubuntu] Support non-standard kernel version naming Query apt-cache for linux-headers package info once and attempt to parse the version using the existing major.minor.patch-revision regex. When the regex does not match (e.g. custom/distro kernels with non-standard naming), keep KERNEL_VERSION unchanged instead of failing. This preserves the existing resolution logic for standard Ubuntu kernels while allowing custom kernels to work without modification. Applied to all Ubuntu/Debian variants and vgpu-manager Ubuntu variants. Closes: https://github.com/NVIDIA/gpu-driver-container/issues/601 Signed-off-by: Jose Fernandez --- ubuntu16.04/nvidia-driver | 21 +++++++++++++++------ ubuntu18.04/nvidia-driver | 21 +++++++++++++++------ ubuntu20.04/nvidia-driver | 21 +++++++++++++++------ ubuntu22.04/nvidia-driver | 21 +++++++++++++++------ ubuntu24.04/nvidia-driver | 21 +++++++++++++++------ vgpu-manager/ubuntu20.04/nvidia-driver | 21 +++++++++++++++------ vgpu-manager/ubuntu22.04/nvidia-driver | 21 +++++++++++++++------ vgpu-manager/ubuntu24.04/nvidia-driver | 21 +++++++++++++++------ 8 files changed, 120 insertions(+), 48 deletions(-) diff --git a/ubuntu16.04/nvidia-driver b/ubuntu16.04/nvidia-driver index 7786b22df..a0bf3117d 100755 --- a/ubuntu16.04/nvidia-driver +++ b/ubuntu16.04/nvidia-driver @@ -26,17 +26,26 @@ _cleanup_package_cache() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/ubuntu18.04/nvidia-driver b/ubuntu18.04/nvidia-driver index c61c8454c..4c3344269 100755 --- a/ubuntu18.04/nvidia-driver +++ b/ubuntu18.04/nvidia-driver @@ -29,17 +29,26 @@ _cleanup_package_cache() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/ubuntu20.04/nvidia-driver b/ubuntu20.04/nvidia-driver index 6222e3506..dd8f6e465 100755 --- a/ubuntu20.04/nvidia-driver +++ b/ubuntu20.04/nvidia-driver @@ -46,17 +46,26 @@ _update_ca_certificates() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/ubuntu22.04/nvidia-driver b/ubuntu22.04/nvidia-driver index 0039a674d..eb037872b 100755 --- a/ubuntu22.04/nvidia-driver +++ b/ubuntu22.04/nvidia-driver @@ -62,17 +62,26 @@ _update_ca_certificates() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/ubuntu24.04/nvidia-driver b/ubuntu24.04/nvidia-driver index b272fcd86..b60e6356d 100755 --- a/ubuntu24.04/nvidia-driver +++ b/ubuntu24.04/nvidia-driver @@ -72,17 +72,26 @@ _update_ca_certificates() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/vgpu-manager/ubuntu20.04/nvidia-driver b/vgpu-manager/ubuntu20.04/nvidia-driver index bce3d1caa..5d899b984 100755 --- a/vgpu-manager/ubuntu20.04/nvidia-driver +++ b/vgpu-manager/ubuntu20.04/nvidia-driver @@ -27,17 +27,26 @@ _cleanup_package_cache() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/vgpu-manager/ubuntu22.04/nvidia-driver b/vgpu-manager/ubuntu22.04/nvidia-driver index 5a12f0a6f..216f10c98 100755 --- a/vgpu-manager/ubuntu22.04/nvidia-driver +++ b/vgpu-manager/ubuntu22.04/nvidia-driver @@ -29,17 +29,26 @@ _cleanup_package_cache() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0 diff --git a/vgpu-manager/ubuntu24.04/nvidia-driver b/vgpu-manager/ubuntu24.04/nvidia-driver index b16bc2ef2..b09734dc8 100644 --- a/vgpu-manager/ubuntu24.04/nvidia-driver +++ b/vgpu-manager/ubuntu24.04/nvidia-driver @@ -29,17 +29,26 @@ _cleanup_package_cache() { # Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic. _resolve_kernel_version() { - local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \ - sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1) - local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//') - kernel_flavor="${kernel_flavor//virtual/generic}" - echo "Resolving Linux kernel version..." - if [ -z "${version}" ]; then + + local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true) + if [ -z "${version_info}" ]; then echo "Could not resolve Linux kernel version" >&2 return 1 fi + local version=$(printf "%s\n" "${version_info}" | \ + sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+)\..*/\1-\3/p' | head -1) + + if [ -z "${version}" ]; then + # Custom/non-standard kernel: keep KERNEL_VERSION unchanged. + echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" + return 0 + fi + + local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//') + kernel_flavor="${kernel_flavor//virtual/generic}" + KERNEL_VERSION="${version}-${kernel_flavor}" echo "Proceeding with Linux kernel version ${KERNEL_VERSION}" return 0