Build and install NVIDIA open-kernel-module driver packages (nvos-*) for
Unraid, for driver branches the Unraid Nvidia-Driver plugin does not publish
as open modules.
- Blackwell GPUs (RTX 50xx, RTX PRO 6000) only work with NVIDIA's open kernel
modules. The proprietary
nvidia-*packages will not initialise them. - The Unraid plugin publishes
nvos-*packages only for the production branch. Feature-branch drivers (610.x) are proprietary-only there. - NVIDIA's Vulkan AV1 encoder on Blackwell corrupts every inter frame on the
580 to 595 branches; 610 fixes it. So a Blackwell host that needs Vulkan
AV1 needs
nvos-610.57.04, which nobody ships.
build/ produces that package on any Linux box with Docker. install/ drops
it into the plugin on the Unraid host so the plugin installs it at boot.
Packages are tied to one exact Unraid kernel. Check yours first and compare it with the releases:
uname -r # e.g. 6.18.52-Unraid| Driver | Kernel | Release |
|---|---|---|
| 615.78.08 | 6.18.52-Unraid | v615.78.08 |
| 610.57.04 | 6.18.47-Unraid (Unraid 7.4.0-beta.2) | v610.57.04-2 |
The Nvidia-Driver plugin must already be installed (Community Applications). Then, as root on the Unraid host, one command downloads the newest package for your kernel, checks its md5, stages it in the plugin and reboots:
curl -fsSL https://raw.githubusercontent.com/salty2011/unraid-nvos-driver/main/install/install-nvos.sh | bash -s -- --rebootLeave off --reboot to stage it and reboot later. Add --driver 610.57.04
to pick an older driver when a kernel has several. If no release matches
your kernel, the script says so and changes nothing; build one (below).
Offline instead: download the release zip, copy it to the host, and run the script from inside it. It uses the package next to it and downloads nothing:
cd /tmp && unzip nvos-615.78.08-6.18.52-Unraid.zip
cd nvos-615.78.08-6.18.52-Unraid
bash install-nvos.sh --rebootTo install a package from elsewhere, pass its path:
install-nvos.sh /path/to/nvos-…txz --reboot.
After the reboot:
curl -fsSL https://raw.githubusercontent.com/salty2011/unraid-nvos-driver/main/install/verify-nvos.sh | bash -s -- --vulkan-testverify-nvos.sh checks the driver version, module license and glvnd JSON
files; --vulkan-test also proves the Vulkan ICD works in a container. Then
recreate any GPU containers (docker compose up -d --force-recreate), since a
plain restart keeps the old driver wiring.
The installer backs up the plugin's previous packages and settings.cfg to
/boot/config/plugins/nvidia-driver-backup-<timestamp>/, sets
driver_version=latest_nos and update_check=false, and moves any other
package for the same kernel out of the way. The plugin picks the highest
version present locally for the running kernel and does not download when one
exists.
Needs a Linux host with Docker, no NVIDIA kernel modules loaded (the NVIDIA installer refuses to build otherwise), about 6 GB RAM and 15 GB disk. A VM is fine.
./build/build-nvos.sh --kernel 6.18.47-Unraid --driver 610.57.04Roughly 25 minutes on 6 cores. Output lands in ~/nvos-build/src/out/.
The script:
- Finds ich777's pre-compiled Unraid kernel for that version and the matching
ghcr.io/ich777/unraid_kernel:gcc_X.Y.Zimage. - Starts that container with
DL_ON_START=false(its auto-download keys off the host'suname -r, which is wrong on a build box) and prepares the kernel tree. - Runs Unraid's own
compile.shwith--kernel-module-type=open, using the container's Slackwaremakepkg. - Adds the glvnd/EGL JSON files the NVIDIA installer skips in that container (see below), then packages.
Requirements that must exist upstream: a release for the kernel at
ich777/unraid_kernel and
the driver .run on us.download.nvidia.com. Both are checked before starting.
- Kernel-specific. Every Unraid OS update changes the kernel. The plugin
then finds no local package for the new kernel and downloads the newest
published
nvos, which may be an older driver branch. Rebuild before you upgrade Unraid, or right after. - The glvnd JSONs matter. The build container has no libglvnd or Vulkan
loader, so
nvidia-installersilently omits/usr/share/glvnd/egl_vendor.d/10_nvidia.jsonand/usr/share/egl/egl_external_platform.d/*.json. The 610 Vulkan ICD refuses to initialise without them: the loader reportsCould not get 'vkCreateInstance' via 'vk_icdGetInstanceProcAddr' for ICD libGLX_nvidia.so.0, CUDA, NVENC andnvidia-smikeep working, and Vulkan quietly lands on whatever other GPU is in the box.container-build.shcopies the files from the.runpayload;verify-nvos.shchecks for them. ERROR: driverInitFileInfo ... result=11printed at container start is noise from the NVIDIA container runtime hook, seen on many Unraid hosts with working GPUs. Ignore it.- Containers created before the driver change keep their old device
injection.
docker restartis not enough; recreate them (docker compose up -d --force-recreate <service>). - Rebooting over SSH: Unraid 7.4 has no
/sbin/powerdown; use/usr/local/sbin/powerdown -r, and detach it (setsid nohup … & disown) or it dies with the SSH session before doing anything.
build/build-nvos.sh host-side driver: docker container, kernel prep, build
build/container-build.sh runs inside the ich777 container
install/install-nvos.sh stage package into the Unraid plugin, fix settings, reboot
install/verify-nvos.sh post-boot checks, optional container Vulkan test
Packages are release assets, not committed files (GitHub's 100 MB limit).