[PR #48] [MERGED] Rebuild NVIDIA driver volume when host driver version changes (#47) #64

Closed
opened 2026-10-15 12:55:18 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/unraid-plugin/pull/48
Author: @JBailes
Created: 6/5/2026
Status: ✅ Merged
Merged: 6/5/2026
Merged by: @JBailes

Base: main ← Head: fix/nvidia-driver-version-mismatch


📝 Commits (1)

  • 3931dee Rebuild NVIDIA driver volume when host driver version changes (#47)

📊 Changes

1 file changed (+16 additions, -2 deletions)

View changed files

📝 scripts/deploy.sh (+16 -2)

📄 Description

Problem

Closes the root cause described in #47.

The nvidia-driver-vol Docker volume bakes in the NVIDIA userspace driver libraries for a specific driver version at build time (--build-arg NV_VERSION). build_nvidia_volume() only checked whether the volume existed, so after a host driver upgrade (the reporter went 580 → 610) the volume was never rebuilt. The container kept serving the old 580 userspace libs against the new 610 kernel module.

NVIDIA requires the userspace libs to exactly match the loaded kernel module, so the mismatch fails EGL initialization:

[EGL] BAD_ALLOC eglQueryDevicesEXT: Failed to allocate device list
[EGL] NOT_INITIALIZED ... eglInitialize

which cascades into WaylandDisplay::get_render_device failing and Wolf's wayland GStreamer source panicking with RecvError.

Removing Docker/images did not help the reporter because the named volume (and gow/nvidia-driver:latest image) survived, so the rebuild stayed skipped.

Fix

  • Stamp the volume with the driver version it was built for via a Docker volume label (org.games-on-whales.nv_version).
  • Skip the build only when the label matches the currently-detected host driver version.
  • Otherwise log the mismatch, docker volume rm the stale volume, and rebuild + re-label it.

The main flow already runs docker compose down before build_nvidia_volume, so the volume is free when removed; if removal fails it errors with a clear message instead of silently continuing.

Existing users have an unlabeled volume, so they get a one-time rebuild on next deploy — which is exactly the self-heal #47 needs.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/unraid-plugin/pull/48 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 6/5/2026 **Status:** ✅ Merged **Merged:** 6/5/2026 **Merged by:** [@JBailes](https://github.com/JBailes) **Base:** `main` ← **Head:** `fix/nvidia-driver-version-mismatch` --- ### 📝 Commits (1) - [`3931dee`](https://github.com/games-on-whales/unraid-plugin/commit/3931deee41819875e5eb0fcc8a346d70fc2f883f) Rebuild NVIDIA driver volume when host driver version changes (#47) ### 📊 Changes **1 file changed** (+16 additions, -2 deletions) <details> <summary>View changed files</summary> 📝 `scripts/deploy.sh` (+16 -2) </details> ### 📄 Description ## Problem Closes the root cause described in #47. The `nvidia-driver-vol` Docker volume bakes in the NVIDIA userspace driver libraries for a specific driver version at build time (`--build-arg NV_VERSION`). `build_nvidia_volume()` only checked whether the volume *existed*, so after a host driver upgrade (the reporter went 580 → 610) the volume was never rebuilt. The container kept serving the old 580 userspace libs against the new 610 kernel module. NVIDIA requires the userspace libs to exactly match the loaded kernel module, so the mismatch fails EGL initialization: ``` [EGL] BAD_ALLOC eglQueryDevicesEXT: Failed to allocate device list [EGL] NOT_INITIALIZED ... eglInitialize ``` which cascades into `WaylandDisplay::get_render_device` failing and Wolf's wayland GStreamer source panicking with `RecvError`. Removing Docker/images did not help the reporter because the named volume (and `gow/nvidia-driver:latest` image) survived, so the rebuild stayed skipped. ## Fix - Stamp the volume with the driver version it was built for via a Docker volume label (`org.games-on-whales.nv_version`). - Skip the build only when the label matches the currently-detected host driver version. - Otherwise log the mismatch, `docker volume rm` the stale volume, and rebuild + re-label it. The main flow already runs `docker compose down` before `build_nvidia_volume`, so the volume is free when removed; if removal fails it errors with a clear message instead of silently continuing. Existing users have an unlabeled volume, so they get a one-time rebuild on next deploy — which is exactly the self-heal #47 needs. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 12:55:18 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/unraid-plugin#64
No description provided.