Skip to content

Commit 0f9b25c

Browse files
committed
[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: #601 Signed-off-by: Jose Fernandez <josef@netflix.com>
1 parent acf0357 commit 0f9b25c

8 files changed

Lines changed: 120 additions & 48 deletions

File tree

ubuntu16.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,17 +26,26 @@ _cleanup_package_cache() {
2626

2727
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
2828
_resolve_kernel_version() {
29-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
30-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
31-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
32-
kernel_flavor="${kernel_flavor//virtual/generic}"
33-
3429
echo "Resolving Linux kernel version..."
35-
if [ -z "${version}" ]; then
30+
31+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
32+
if [ -z "${version_info}" ]; then
3633
echo "Could not resolve Linux kernel version" >&2
3734
return 1
3835
fi
3936

37+
local version=$(printf "%s\n" "${version_info}" | \
38+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
39+
40+
if [ -z "${version}" ]; then
41+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
42+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
43+
return 0
44+
fi
45+
46+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
47+
kernel_flavor="${kernel_flavor//virtual/generic}"
48+
4049
KERNEL_VERSION="${version}-${kernel_flavor}"
4150
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
4251
return 0

ubuntu18.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,26 @@ _cleanup_package_cache() {
2929

3030
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
3131
_resolve_kernel_version() {
32-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
33-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
34-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
35-
kernel_flavor="${kernel_flavor//virtual/generic}"
36-
3732
echo "Resolving Linux kernel version..."
38-
if [ -z "${version}" ]; then
33+
34+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
35+
if [ -z "${version_info}" ]; then
3936
echo "Could not resolve Linux kernel version" >&2
4037
return 1
4138
fi
4239

40+
local version=$(printf "%s\n" "${version_info}" | \
41+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
42+
43+
if [ -z "${version}" ]; then
44+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
45+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
46+
return 0
47+
fi
48+
49+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
50+
kernel_flavor="${kernel_flavor//virtual/generic}"
51+
4352
KERNEL_VERSION="${version}-${kernel_flavor}"
4453
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
4554
return 0

ubuntu20.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,26 @@ _update_ca_certificates() {
4646

4747
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
4848
_resolve_kernel_version() {
49-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
50-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
51-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
52-
kernel_flavor="${kernel_flavor//virtual/generic}"
53-
5449
echo "Resolving Linux kernel version..."
55-
if [ -z "${version}" ]; then
50+
51+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
52+
if [ -z "${version_info}" ]; then
5653
echo "Could not resolve Linux kernel version" >&2
5754
return 1
5855
fi
5956

57+
local version=$(printf "%s\n" "${version_info}" | \
58+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
59+
60+
if [ -z "${version}" ]; then
61+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
62+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
63+
return 0
64+
fi
65+
66+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
67+
kernel_flavor="${kernel_flavor//virtual/generic}"
68+
6069
KERNEL_VERSION="${version}-${kernel_flavor}"
6170
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
6271
return 0

ubuntu22.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,26 @@ _update_ca_certificates() {
6262

6363
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
6464
_resolve_kernel_version() {
65-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
66-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
67-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
68-
kernel_flavor="${kernel_flavor//virtual/generic}"
69-
7065
echo "Resolving Linux kernel version..."
71-
if [ -z "${version}" ]; then
66+
67+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
68+
if [ -z "${version_info}" ]; then
7269
echo "Could not resolve Linux kernel version" >&2
7370
return 1
7471
fi
7572

73+
local version=$(printf "%s\n" "${version_info}" | \
74+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
75+
76+
if [ -z "${version}" ]; then
77+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
78+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
79+
return 0
80+
fi
81+
82+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
83+
kernel_flavor="${kernel_flavor//virtual/generic}"
84+
7685
KERNEL_VERSION="${version}-${kernel_flavor}"
7786
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
7887
return 0

ubuntu24.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,26 @@ _update_ca_certificates() {
7272

7373
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
7474
_resolve_kernel_version() {
75-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
76-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
77-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
78-
kernel_flavor="${kernel_flavor//virtual/generic}"
79-
8075
echo "Resolving Linux kernel version..."
81-
if [ -z "${version}" ]; then
76+
77+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
78+
if [ -z "${version_info}" ]; then
8279
echo "Could not resolve Linux kernel version" >&2
8380
return 1
8481
fi
8582

83+
local version=$(printf "%s\n" "${version_info}" | \
84+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
85+
86+
if [ -z "${version}" ]; then
87+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
88+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
89+
return 0
90+
fi
91+
92+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
93+
kernel_flavor="${kernel_flavor//virtual/generic}"
94+
8695
KERNEL_VERSION="${version}-${kernel_flavor}"
8796
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
8897
return 0

vgpu-manager/ubuntu20.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,26 @@ _cleanup_package_cache() {
2727

2828
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
2929
_resolve_kernel_version() {
30-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
31-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
32-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
33-
kernel_flavor="${kernel_flavor//virtual/generic}"
34-
3530
echo "Resolving Linux kernel version..."
36-
if [ -z "${version}" ]; then
31+
32+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
33+
if [ -z "${version_info}" ]; then
3734
echo "Could not resolve Linux kernel version" >&2
3835
return 1
3936
fi
4037

38+
local version=$(printf "%s\n" "${version_info}" | \
39+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
40+
41+
if [ -z "${version}" ]; then
42+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
43+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
44+
return 0
45+
fi
46+
47+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
48+
kernel_flavor="${kernel_flavor//virtual/generic}"
49+
4150
KERNEL_VERSION="${version}-${kernel_flavor}"
4251
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
4352
return 0

vgpu-manager/ubuntu22.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,26 @@ _cleanup_package_cache() {
2929

3030
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
3131
_resolve_kernel_version() {
32-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
33-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
34-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
35-
kernel_flavor="${kernel_flavor//virtual/generic}"
36-
3732
echo "Resolving Linux kernel version..."
38-
if [ -z "${version}" ]; then
33+
34+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
35+
if [ -z "${version_info}" ]; then
3936
echo "Could not resolve Linux kernel version" >&2
4037
return 1
4138
fi
4239

40+
local version=$(printf "%s\n" "${version_info}" | \
41+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
42+
43+
if [ -z "${version}" ]; then
44+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
45+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
46+
return 0
47+
fi
48+
49+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
50+
kernel_flavor="${kernel_flavor//virtual/generic}"
51+
4352
KERNEL_VERSION="${version}-${kernel_flavor}"
4453
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
4554
return 0

vgpu-manager/ubuntu24.04/nvidia-driver

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,26 @@ _cleanup_package_cache() {
2929

3030
# Resolve the kernel version to the form major.minor.patch-revision-flavor where flavor defaults to generic.
3131
_resolve_kernel_version() {
32-
local version=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null | \
33-
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
34-
local kernel_flavor=$(echo ${KERNEL_VERSION} | sed 's/[^a-z]*//')
35-
kernel_flavor="${kernel_flavor//virtual/generic}"
36-
3732
echo "Resolving Linux kernel version..."
38-
if [ -z "${version}" ]; then
33+
34+
local version_info=$(apt-cache show "linux-headers-${KERNEL_VERSION}" 2> /dev/null || true)
35+
if [ -z "${version_info}" ]; then
3936
echo "Could not resolve Linux kernel version" >&2
4037
return 1
4138
fi
4239

40+
local version=$(printf "%s\n" "${version_info}" | \
41+
sed -nE 's/^Version:\s+(([0-9]+\.){2}[0-9]+)[-.]([0-9]+).*/\1-\3/p' | head -1)
42+
43+
if [ -z "${version}" ]; then
44+
# Custom/non-standard kernel: keep KERNEL_VERSION unchanged.
45+
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
46+
return 0
47+
fi
48+
49+
local kernel_flavor=$(echo "${KERNEL_VERSION}" | sed 's/[^a-z]*//')
50+
kernel_flavor="${kernel_flavor//virtual/generic}"
51+
4352
KERNEL_VERSION="${version}-${kernel_flavor}"
4453
echo "Proceeding with Linux kernel version ${KERNEL_VERSION}"
4554
return 0

0 commit comments

Comments
 (0)