From 0f9b25c21717ce1c9928332b72012bb0b74563b8 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 7786b22d..933d8c91 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 c61c8454..9a250d2f 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 6222e350..357296f3 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 0039a674..094bc13d 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 b272fcd8..e24c6f7d 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 bce3d1ca..74696be9 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 5a12f0a6..1e2913e7 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 b16bc2ef..36c3b241 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