The Clean Build: How Source-Based Kernel and Driver Compilation Rescued an 8× Blackwell GPU Node

Introduction

In the sprawling, multi-month journey of provisioning a high-performance machine learning infrastructure, few moments carry the quiet weight of a successful summary message. Message 8516 in this opencode session is one such moment. After a grueling sequence of system bricking, physical rescue from a live ISO, and a complete architectural pivot in approach, the assistant delivers a terse, four-bullet summary that belies the complexity of what was accomplished:

All 8 GPUs up and running. Summary of the clean approach:

>

- Kernel: PVE 6.14.11-9, built from source (git://git.proxmox.com/git/pve-kernel.git, branch bookworm-6.14) with the system's native GCC 12.2.0 - NVIDIA: open kernel modules 595.71.05, built from source (github.com/NVIDIA/open-gpu-kernel-modules, tag 595.71.05) against the same kernel headers, same compiler — zero patches needed - Userspace: .run installer with --no-kernel-modules - Result: 8× RTX PRO 6000 Blackwell Server Edition, 96 GB each, CUDA 13.2

>

Ready for the LXC container whenever you want to proceed.

This message is the capstone of Segment 49, which documents the provisioning of "kpro6," a new Proxmox host equipped with eight NVIDIA RTX PRO 6000 Blackwell GPUs and a 14 TB NVMe drive. To understand why this message matters—and why its brevity is itself a statement—we must trace the catastrophic failure that preceded it and the engineering philosophy shift that this summary codifies.

The Context: A Bricked System and a Hard Lesson

The story of message 8516 begins not with success but with disaster. Earlier in Segment 49, the assistant attempted a seemingly reasonable shortcut: install a community-built 6.19 kernel (from the "jaminmc" repository) and compile the NVIDIA 595.71.05 open driver against it using DKMS. The rationale was pragmatic—community kernels are pre-built and readily available, and DKMS automates driver recompilation across kernel updates.

What the assistant did not fully account for was the GCC version mismatch. The community 6.19 kernel had been compiled with GCC 14 from Debian Trixie (testing), while the host ran Debian Bookworm's GCC 12.2.0. When the NVIDIA driver modules were built via DKMS against this kernel, the resulting .ko files were compiled with GCC 12 but expected to link against a kernel built with GCC 14. The kernel's internal ABIs—particularly around gendwarfksyms, objtool, and MODVERSIONS—are sensitive to compiler version. The mismatch caused the kernel modules to fail verification, and the assistant spiraled into a series of increasingly desperate workarounds: patching kernel headers, rebuilding gendwarfksyms and objtool binaries, and even crafting a GLIBC_2.38 shim library to bridge the gap between the kernel's expectations and the host's runtime.

The shim library, however, poisoned the system's dynamic linker. SSH access was lost. The machine was effectively bricked, requiring a physical intervention with a live ISO to restore functionality.

This failure is the essential backdrop for message 8516. The assistant learned—the hard way—that binary compatibility across compiler versions is not something to be patched around. The user's explicit directive after recovery was unambiguous: no hacks. Build everything from source with the native toolchain.

The Pivot: Source-Based Everything

Message 8516 documents the result of that pivot. The assistant completely removed all traces of the community kernel and the DKMS-based driver build. Instead, it cloned the official Proxmox VE kernel repository (git://git.proxmox.com/git/pve-kernel.git, branch bookworm-6.14) and compiled the kernel from source using the system's native GCC 12.2.0. This is not the typical path for Proxmox users—most rely on the pre-packaged kernels from the Proxmox repository. Building from source requires resolving the kernel configuration, installing build dependencies, and managing the resulting .deb packages manually.

The NVIDIA driver followed the same philosophy. Rather than relying on DKMS or pre-compiled modules, the assistant cloned the NVIDIA open-gpu-kernel-modules repository at tag 595.71.05 and compiled the five kernel modules (nvidia.ko, nvidia-modeset.ko, nvidia-drm.ko, nvidia-uvm.ko, nvidia-peermem.ko) directly against the freshly built kernel headers. The compilation completed with zero errors and zero patches—a stark contrast to the earlier approach that required multiple workarounds and still failed.

The Firmware Snag and the Final Boot

Even with a clean kernel and driver build, the first boot attempt failed with a kernel panic ("no working init found"). This was not a compiler mismatch but a firmware version mismatch. The community kernel had installed a custom firmware package (pve-firmware 3.19-4-jaminmc) that was incompatible with the official PVE 6.14 kernel. The assistant diagnosed this by comparing the firmware versions, downgrading to the official pve-firmware 3.16-3, rebuilding the initramfs, and refreshing both ESPs (EFI System Partitions) on the dual-disk setup.

The second boot succeeded. The assistant's message 8513 captured the moment: 6.14.11-9-bpo12-pve—the custom kernel was alive. Message 8514 confirmed all eight GPUs were recognized by nvidia-smi.

Why This Message Matters

Message 8516 is not merely a status update. It is a philosophical statement about system reliability. The assistant could have simply said "it works now" and moved on. Instead, it explicitly enumerates the three components—kernel, NVIDIA modules, userspace—and emphasizes that each was built from source with the same compiler. The phrase "zero patches needed" is a quiet rebuke to the earlier approach that required shims, workarounds, and hacks.

The message also serves as a knowledge artifact for future provisioning efforts. It encodes a reproducible recipe:

  1. Clone the official PVE kernel source for the desired branch.
  2. Build with the system's native GCC.
  3. Clone the NVIDIA open kernel modules at the matching driver tag.
  4. Build against the same kernel headers with the same compiler.
  5. Install userspace via the .run installer with --no-kernel-modules. This recipe is portable, auditable, and resistant to the kind of toolchain rot that plagues binary-only approaches.

Assumptions and Knowledge

The assistant made several implicit assumptions in this message, all validated by the successful outcome:

Conclusion

Message 8516 is the quiet after the storm. It represents not just a technical success but a methodological one: the recognition that building from source with consistent tooling is not merely an aesthetic preference but a reliability imperative. The eight Blackwell GPUs, each with 96 GB of VRAM, are now ready for the DFlash drafter training pipeline that motivated this entire provisioning effort. The message's final line—"Ready for the LXC container whenever you want to proceed"—is an understated invitation to move from infrastructure to purpose. The node is built. The training can begin.