Documentsbluefin
NVIDIA Variant Architecture
NVIDIA Variant Architecture
Type
Topic
Status
Published
Created
Jun 29, 2026
Updated
Jun 29, 2026

NVIDIA Variant Architecture#

The dakota-nvidia variant is built by composing a hardware-specific NVIDIA OCI layer on top of the same base oci/bluefin.bst used for the default variant — the two variants share identical GNOME/system sources. NVIDIA-specific packages are never mixed into the base; they live in an isolated parallel element tree that merges cleanly at a single stack element.

The top-level assembly element is elements/oci/bluefin-nvidia.bst, which produces ghcr.io/projectbluefin/dakota-nvidia:latest. Both dakota and dakota-nvidia are released together under :testing:stable tags via the same promotion pipeline .

Layer Dependency Tree#

The NVIDIA variant's BuildStream element graph mirrors the base layer hierarchy, merging at bluefin-nvidia-stack.bst:

Base branch:
  bluefin-stack.bst
      └── bluefin-runtime.bst
              └── layers/bluefin.bst
                      └── oci/bluefin.bst ← default variant image + parent for NVIDIA

NVIDIA branch:
  bluefin-stack.bst ←── shared
  bluefin-nvidia/deps.bst ←── NVIDIA packages
      └── bluefin-nvidia-stack.bst ← MERGE POINT (also runs depmod)
              └── bluefin-nvidia-runtime.bst
                      └── layers/bluefin-nvidia.bst
                              └── oci/bluefin-nvidia.bst ← NVIDIA variant image

bluefin-nvidia-stack.bst is the sole merge point: it depends on bluefin-stack.bst (the shared base) and adds bluefin-nvidia/deps.bst. It also runs depmod at integration time so the NVIDIA kernel modules are registered alongside the base system's modules .

NVIDIA Component Elements#

All NVIDIA-specific packages are aggregated in elements/bluefin-nvidia/deps.bst :

ElementPurpose
nvidia-drivers.bstProprietary driver userspace + kernel modules (Turing+ GPUs)
egl-external-platform.bstEGL platform plugin headers
nvidia-egl-wayland.bstDirect EGL/GBM Wayland support for GNOME Shell
nvidia-kargs.bstKernel arguments: blacklist nouveau, enable KMS/framebuffer device
nvidia-modprobe-config.bstmodprobe.d / modules-load.d config for correct driver load order
nvidia-container-toolkit.bstnvidia-ctk + nvidia-cdi-hook for GPU passthrough in containers
nvidia-container-toolkit-preset.bstSystemd preset enabling the CDI device refresh service

OCI Image Assembly#

oci/bluefin-nvidia.bst calls build-oci with two inputs:

  • parent: /parent — the full base oci/bluefin.bst image
  • layer: /layer — the NVIDIA-only compose layer oci/layers/bluefin-nvidia.bst

This produces a derived OCI image where the NVIDIA layer is appended to the base — not a fork. The element also assigns a distinct sysroot-seed UUID (7f9c5d11-...) so deployed NVIDIA and default systems never share machine IDs or partition UUIDs.

Pre-assembly steps run against /layer to prepare the NVIDIA rootfs: prepare-image.sh, systemd-sysusers, glib-compile-schemas, dconf update, and a usr/etcetc migration required by bootc .

CI Build Matrix#

build.yml defines a two-entry matrix for default and nvidia variants :

VariantElementImage suffixcontinue-on-error
defaultoci/bluefin.bst(none)false
nvidiaoci/bluefin-nvidia.bst-nvidiatrue

Builds run serially (max-parallel: 1) due to the shared remote CAS at cache.projectbluefin.io being rate-limited to a single concurrent build . The nvidia variant has continue: true so a driver build failure doesn't block the base image release. After each build, artifacts are pushed to the remote CAS explicitly with bst artifact push --deps run .

ISO Packaging Note#

The dakota-iso build uses dakota-nvidia:stable as its payload — the live ISO boots the NVIDIA variant and auto-rebases to the non-NVIDIA image on first upgrade if NVIDIA hardware is not detected . This means dakota-nvidia is the universal install medium.