Skip to content

Commit

Permalink
install: handle nvidia driver version != component version
Browse files Browse the repository at this point in the history
Often (always?) the `ubuntu-drivers list --recommended` version is going
to be newer than what's actually available as a pc-kernel component.
Handle that version mismatch.
  • Loading branch information
dbungert committed Feb 25, 2025
1 parent ecdd31d commit 34e409e
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 2 deletions.
14 changes: 14 additions & 0 deletions subiquity/server/controllers/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -675,15 +675,29 @@ def kernel_components(self) -> List[str]:
return []
info: VariationInfo = self.app.controllers.Filesystem._info
kernel_components = info.available_kernel_components
nvidia_driver_offered: bool = False
# for first pass, accept the matching version, if that's an option
for driver in sorted(self.app.controllers.Drivers.drivers, reverse=True):
m = re.fullmatch("nvidia-driver-([0-9]+)", driver)
if not m:
continue
nvidia_driver_offered = True
v = m.group(1)
ko = f"nvidia-{v}-ko"
user = f"nvidia-{v}-user"
if ko in kernel_components and user in kernel_components:
return [ko, user]
# if we don't match there, accept the newest reasonable version
if nvidia_driver_offered:
for component in sorted(kernel_components, reverse=True):
m = re.fullmatch("nvidia-([0-9]+)-ko", component)
if not m:
continue
ko = component
v = m.group(1)
user = f"nvidia-{v}-user"
if user in kernel_components:
return [ko, user]
return []

@with_context(
Expand Down
26 changes: 24 additions & 2 deletions subiquity/server/controllers/tests/test_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -396,8 +396,12 @@ def setUp(self):
(["nvidia-510-ko"], ["nvidia-driver-510"], []),
# missing ko component
(["nvidia-510-user"], ["nvidia-driver-510"], []),
# wrong driver version
(["nvidia-510-ko", "nvidia-510-user"], ["nvidia-driver-999"], []),
# mismatched component versions, nothing usable available
(
["nvidia-2-ko", "nvidia-1-user"],
["nvidia-driver-999"],
[],
),
# match
(
["nvidia-510-ko", "nvidia-510-user"],
Expand All @@ -415,6 +419,24 @@ def setUp(self):
["nvidia-driver-2", "nvidia-driver-1"],
["nvidia-2-ko", "nvidia-2-user"],
),
# wrong driver version
(
["nvidia-510-ko", "nvidia-510-user"],
["nvidia-driver-999"],
["nvidia-510-ko", "nvidia-510-user"],
),
# wrong driver version, use newer
(
["nvidia-1-ko", "nvidia-2-user", "nvidia-2-ko", "nvidia-1-user"],
["nvidia-driver-999"],
["nvidia-2-ko", "nvidia-2-user"],
),
# mismatched component versions, something usable available
(
["nvidia-1-ko", "nvidia-2-ko", "nvidia-1-user"],
["nvidia-driver-999"],
["nvidia-1-ko", "nvidia-1-user"],
),
)
)
def test_kernel_components(self, comps, drivers, expected):
Expand Down

0 comments on commit 34e409e

Please sign in to comment.