From 9c220b5ef076930a4c4e87e553ba02721177d70c Mon Sep 17 00:00:00 2001 From: Elaheh Dehghani Date: Fri, 24 Apr 2026 19:01:46 +0000 Subject: [PATCH] build nvidia open kmod as part of kernel build --- base/comps/kernel/kernel.comp.toml | 179 ++++++++++ .../kernel/kmod-nvidia-open-modprobe.conf | 8 + .../nvidia-cuda-driver.comp.toml | 15 + .../nvidia-cuda-driver.spec | 316 ++++++++++++++++++ .../nvidia-persistenced.service | 14 + base/comps/nvidia-cuda-driver/nvidia.icd | 1 + .../nvidia-cuda-driver/tmpfiles-nvidia.conf | 2 + 7 files changed, 535 insertions(+) create mode 100644 base/comps/kernel/kmod-nvidia-open-modprobe.conf create mode 100644 base/comps/nvidia-cuda-driver/nvidia-cuda-driver.comp.toml create mode 100644 base/comps/nvidia-cuda-driver/nvidia-cuda-driver.spec create mode 100644 base/comps/nvidia-cuda-driver/nvidia-persistenced.service create mode 100644 base/comps/nvidia-cuda-driver/nvidia.icd create mode 100644 base/comps/nvidia-cuda-driver/tmpfiles-nvidia.conf diff --git a/base/comps/kernel/kernel.comp.toml b/base/comps/kernel/kernel.comp.toml index 25e4b5dec06..a99f5c61aaa 100644 --- a/base/comps/kernel/kernel.comp.toml +++ b/base/comps/kernel/kernel.comp.toml @@ -12,6 +12,8 @@ azl_pkgrelease = "8" kextraversion = "1" # CBL-Mariner branch number (used in tarball path) azurelinux_version = "3" +# NVIDIA open GPU kernel module version (built as a subpackage of the kernel) +nvidia_open_version = "595.58.03" # Download the source tarball from the AzureLinux kernel repo [[components.kernel.source-files]] @@ -20,6 +22,13 @@ hash = "0d8c755e02857704eb4c4396657ad30b22b474296233b8681365aeaa2fc16926afe31f55 hash-type = "SHA512" origin = { type = "download", uri = "https://github.com/microsoft/CBL-Mariner-Linux-Kernel/archive/rolling-lts/mariner-3/6.18.5.1.tar.gz" } +# Download the NVIDIA open GPU kernel module source tarball +[[components.kernel.source-files]] +filename = "open-gpu-kernel-modules-595.58.03.tar.gz" +hash = "e0c4659ddf15e4f4e19cee05b49f88c9ba08ef3add0dfe08249798f58d0fe75e" +hash-type = "SHA256" +origin = { type = "download", uri = "https://github.com/NVIDIA/open-gpu-kernel-modules/archive/refs/tags/595.58.03.tar.gz" } + # Insert version and release information from the component defines into the spec file, and update the source URL to match the AzureLinux kernel source structure [[components.kernel.overlays]] description = "Set specrpmversion to 6.18.5" @@ -149,3 +158,173 @@ lines = [ "cd ../..", "%endif", ] + +# ============================================================================ +# kmod-nvidia-open subpackage — NVIDIA open GPU kernel modules built alongside +# the kernel. NOTE: The subpackage inherits the kernel's Version (6.18.5), NOT +# the NVIDIA driver version (595.58.03). This is an RPM limitation. +# The NVIDIA driver version is tracked via Provides: nvidia-open-kmod-version. +# ============================================================================ + +# Register the NVIDIA source tarball as Source6000 +[[components.kernel.overlays]] +description = "Register NVIDIA open-gpu-kernel-modules tarball as Source6000 for the kmod-nvidia-open subpackage" +type = "spec-insert-tag" +tag = "Source6000" +value = "open-gpu-kernel-modules-%{nvidia_open_version}.tar.gz" + +# Register the NVIDIA modprobe config as Source6001 +[[components.kernel.overlays]] +description = "Add NVIDIA modprobe config file for kmod-nvidia-open subpackage" +type = "file-add" +file = "kmod-nvidia-open-modprobe.conf" +source = "kmod-nvidia-open-modprobe.conf" + +[[components.kernel.overlays]] +description = "Register NVIDIA modprobe config as Source6001" +type = "spec-insert-tag" +tag = "Source6001" +value = "kmod-nvidia-open-modprobe.conf" + +# Define kmod-nvidia-open subpackage +# Uses spec-append-lines on the main %description section to inject the subpackage +# block right after the main description body. This places it alongside the other +# subpackage declarations (perf, tools, headers, etc.). +[[components.kernel.overlays]] +description = "Add kmod-nvidia-open subpackage declaration after main %description — NVIDIA open GPU kernel modules built as a kernel subpackage" +type = "spec-append-lines" +section = "%description" +lines = [ + "", + "%package -n kmod-nvidia-open", + "Summary: NVIDIA open GPU kernel modules (driver %{nvidia_open_version})", + "# NOTE: Version is inherited from kernel (%{version}), NOT nvidia_open_version.", + "# Track the actual NVIDIA driver version via Provides for dependency resolution.", + "Provides: nvidia-open-kmod-version = %{nvidia_open_version}", + "Provides: kmod-nvidia-open = %{version}-%{release}", + "Provides: kmod-nvidia-open-%{KVERREL} = %{version}-%{release}", + "Requires: %{name}-core-uname-r = %{KVERREL}", + "Requires(post): kmod", + "Requires(postun): kmod", + "Conflicts: nvidia-closed-kmod", + "Conflicts: nvidia-open", + "ExclusiveArch: x86_64 aarch64", + "", + "%description -n kmod-nvidia-open", + "Open-source NVIDIA GPU kernel modules (driver version %{nvidia_open_version})", + "built from the official NVIDIA/open-gpu-kernel-modules repository for", + "kernel %{KVERREL}.", + "", + "These modules support CUDA workloads on NVIDIA GPUs (Turing and later).", + "Modules: nvidia.ko, nvidia-modeset.ko, nvidia-drm.ko, nvidia-uvm.ko,", + "nvidia-peermem.ko.", + "", + "NOTE: This subpackage has the kernel version (%{version}-%{release}), not the", + "NVIDIA driver version. Use 'Requires: nvidia-open-kmod-version = 595.58.03'", + "to depend on a specific NVIDIA driver version.", +] + +# Extract the NVIDIA source in %prep +[[components.kernel.overlays]] +description = "Extract NVIDIA open-gpu-kernel-modules source tarball at end of %prep for kmod-nvidia-open subpackage build" +type = "spec-append-lines" +section = "%prep" +lines = [ + "# AZL: Extract NVIDIA open GPU kernel module sources for kmod-nvidia-open subpackage", + "%ifnarch noarch %nobuildarches", + "cd %{_builddir}", + "tar -xf %{SOURCE6000}", + "cd -", + "%endif", +] + +# Build NVIDIA modules after the base kernel build +# This appends to %build — after all BuildKernel calls complete, we build the +# NVIDIA modules against the just-built kernel source tree. +[[components.kernel.overlays]] +description = "Build NVIDIA open GPU kernel modules after the base kernel build in %build — uses the kernel source tree from the just-completed BuildKernel" +type = "spec-append-lines" +section = "%build" +lines = [ + "# AZL: Build NVIDIA open GPU kernel modules (kmod-nvidia-open subpackage)", + "%if %{with_up_base}", + "%ifnarch noarch %nobuildarches", + '%{log_msg "Building NVIDIA open GPU kernel modules %{nvidia_open_version} for %{KVERREL}"}', + "pushd %{_builddir}/open-gpu-kernel-modules-%{nvidia_open_version}", + "# Unset LDFLAGS — NVIDIA kbuild invokes ld directly, not via gcc", + "unset LDFLAGS", + 'make %{?_smp_mflags} modules \', + ' KERNEL_UNAME="%{KVERREL}" \', + ' SYSSRC="%{_builddir}/kernel-%{tarfile_release}/linux-%{KVERREL}" \', + ' SYSOUT="%{_builddir}/kernel-%{tarfile_release}/linux-%{KVERREL}" \', + ' IGNORE_CC_MISMATCH=1 \', + ' IGNORE_XEN_PRESENCE=1 \', + ' IGNORE_PREEMPT_RT_PRESENCE=1 \', + ' NV_EXCLUDE_BUILD_MODULES=""', + "popd", + "%endif", + "%endif", +] + +# Install NVIDIA modules +[[components.kernel.overlays]] +description = "Install NVIDIA open GPU kernel modules and config files into BUILDROOT for kmod-nvidia-open subpackage" +type = "spec-append-lines" +section = "%install" +lines = [ + "# AZL: Install NVIDIA open GPU kernel modules (kmod-nvidia-open subpackage)", + "%if %{with_up_base}", + "%ifnarch noarch %nobuildarches", + '%{log_msg "Installing NVIDIA open GPU kernel modules for %{KVERREL}"}', + "install -d $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/extra/nvidia", + "for mod in nvidia nvidia-modeset nvidia-drm nvidia-uvm nvidia-peermem; do", + ' ko="%{_builddir}/open-gpu-kernel-modules-%{nvidia_open_version}/kernel-open/${mod}.ko"', + ' if [ -f "${ko}" ]; then', + ' install -m 0644 "${ko}" $RPM_BUILD_ROOT/lib/modules/%{KVERREL}/extra/nvidia/', + " fi", + "done", + "# Install modprobe config to blacklist conflicting modules", + "install -D -m 0644 %{SOURCE6001} $RPM_BUILD_ROOT%{_sysconfdir}/modprobe.d/kmod-nvidia-open.conf", + "# Install depmod override config", + "install -d $RPM_BUILD_ROOT%{_sysconfdir}/depmod.d", + "cat > $RPM_BUILD_ROOT%{_sysconfdir}/depmod.d/kmod-nvidia-open.conf << 'DEPMOD_EOF'", + "override nvidia %{KVERREL} extra/nvidia", + "override nvidia-modeset %{KVERREL} extra/nvidia", + "override nvidia-drm %{KVERREL} extra/nvidia", + "override nvidia-uvm %{KVERREL} extra/nvidia", + "override nvidia-peermem %{KVERREL} extra/nvidia", + "DEPMOD_EOF", + "# Install NVIDIA license file (source is a sibling of buildsubdir, so install explicitly)", + "install -D -m 0644 %{_builddir}/open-gpu-kernel-modules-%{nvidia_open_version}/COPYING $RPM_BUILD_ROOT%{_datadir}/licenses/kmod-nvidia-open/COPYING", + "%endif", + "%endif", +] + +# %post, %postun, and %files for kmod-nvidia-open +# These must appear as their own sections BEFORE %changelog. +# We append to the last %files section before %changelog (modules-extra-matched), +# which places our new sections between it and %changelog. +[[components.kernel.overlays]] +description = "Add %post, %postun, and %files sections for kmod-nvidia-open subpackage after %files modules-extra-matched (last section before %changelog)" +type = "spec-append-lines" +section = "%files" +package = "modules-extra-matched" +lines = [ + "", + "%post -n kmod-nvidia-open", + "/usr/sbin/depmod -a %{KVERREL} || :", + "", + "%postun -n kmod-nvidia-open", + "/usr/sbin/depmod -a %{KVERREL} || :", + "", + "%files -n kmod-nvidia-open", + "%license %{_datadir}/licenses/kmod-nvidia-open/COPYING", + "/lib/modules/%{KVERREL}/extra/nvidia/nvidia.ko.xz", + "/lib/modules/%{KVERREL}/extra/nvidia/nvidia-modeset.ko.xz", + "/lib/modules/%{KVERREL}/extra/nvidia/nvidia-drm.ko.xz", + "/lib/modules/%{KVERREL}/extra/nvidia/nvidia-uvm.ko.xz", + "/lib/modules/%{KVERREL}/extra/nvidia/nvidia-peermem.ko.xz", + "%config(noreplace) %{_sysconfdir}/modprobe.d/kmod-nvidia-open.conf", + "%{_sysconfdir}/depmod.d/kmod-nvidia-open.conf", + "", +] diff --git a/base/comps/kernel/kmod-nvidia-open-modprobe.conf b/base/comps/kernel/kmod-nvidia-open-modprobe.conf new file mode 100644 index 00000000000..43be4bf4efa --- /dev/null +++ b/base/comps/kernel/kmod-nvidia-open-modprobe.conf @@ -0,0 +1,8 @@ +# Block conflicting kernel modules +blacklist nouveau +blacklist nvidiafb +blacklist rivafb + +# Load NVIDIA modules with recommended options +options nvidia NVreg_OpenRmEnableUnsupportedGpus=1 +options nvidia-drm modeset=1 diff --git a/base/comps/nvidia-cuda-driver/nvidia-cuda-driver.comp.toml b/base/comps/nvidia-cuda-driver/nvidia-cuda-driver.comp.toml new file mode 100644 index 00000000000..30c5e17617e --- /dev/null +++ b/base/comps/nvidia-cuda-driver/nvidia-cuda-driver.comp.toml @@ -0,0 +1,15 @@ +[components.nvidia-cuda-driver] +# Headless compute-only: no graphics/display components. +spec = { type = "local", path = "nvidia-cuda-driver.spec" } + +[[components.nvidia-cuda-driver.source-files]] +filename = "NVIDIA-Linux-x86_64-595.58.03-no-compat32.run" +hash-type = "SHA256" +hash = "b66c59b9bebc191b9c21bad7476da1486dd390198223a548892110bca5fb91f9" +origin = { type = "download", uri = "https://download.nvidia.com/XFree86/Linux-x86_64/595.58.03/NVIDIA-Linux-x86_64-595.58.03-no-compat32.run" } + +[[components.nvidia-cuda-driver.source-files]] +filename = "NVIDIA-Linux-aarch64-595.58.03.run" +hash-type = "SHA256" +hash = "873cc8298d537bc424081591f87e64d4507f1cad5480685a8ba725df011a3d3f" +origin = { type = "download", uri = "https://download.nvidia.com/XFree86/Linux-aarch64/595.58.03/NVIDIA-Linux-aarch64-595.58.03.run" } diff --git a/base/comps/nvidia-cuda-driver/nvidia-cuda-driver.spec b/base/comps/nvidia-cuda-driver/nvidia-cuda-driver.spec new file mode 100644 index 00000000000..4687a125f20 --- /dev/null +++ b/base/comps/nvidia-cuda-driver/nvidia-cuda-driver.spec @@ -0,0 +1,316 @@ +%global debug_package %{nil} +# Prebuilt proprietary binaries — do not strip or modify +%global __strip /bin/true +%global __brp_ldconfig %{nil} + +%global nvidia_driver_version 595.58.03 +%global nvidia_libdir %{_libdir} +%global nvidia_bindir %{_bindir} +%global nvidia_fwdir /lib/firmware/nvidia/%{nvidia_driver_version} +%global nvidia_datadir %{_datadir}/nvidia + +Name: nvidia-cuda-driver +Version: %{nvidia_driver_version} +Release: 1%{?dist} +Summary: NVIDIA user-space GPU driver components +License: NVIDIA Proprietary +URL: https://www.nvidia.com/en-us/drivers/ +Vendor: Microsoft Corporation +Distribution: Azure Linux +ExclusiveArch: x86_64 aarch64 + +BuildRequires: systemd-rpm-macros + +# Architecture-specific .run installer +# x86_64: use no-compat32 variant (64-bit only, smaller download) +# aarch64: single variant (no 32-bit compat layer on ARM) +%ifarch x86_64 +Source0: https://us.download.nvidia.com/XFree86/Linux-x86_64/%{version}/NVIDIA-Linux-x86_64-%{version}-no-compat32.run +%endif +%ifarch aarch64 +Source0: https://us.download.nvidia.com/XFree86/Linux-aarch64/%{version}/NVIDIA-Linux-aarch64-%{version}.run +%endif + +# nvidia-persistenced systemd unit +Source1: nvidia-persistenced.service + +# Persistent software state directory for the NVIDIA driver +Source2: tmpfiles-nvidia.conf + +# Configuration file to register the NVIDIA OpenCL ICD with the ICD loader +Source3: nvidia.icd + +Requires: kmod-nvidia-open = %{version} +Requires: nvidia-cuda-driver-libs%{?_isa} = %{version}-%{release} +Requires: nvidia-cuda-driver-firmware = %{version}-%{release} + +%description +User-space NVIDIA GPU driver components for headless CUDA workloads on +Azure Linux. + +This package is the companion to kmod-nvidia-open (which provides the open-source +NVIDIA kernel modules). It installs the proprietary user-space libraries, +management tools, and firmware needed to run CUDA applications on NVIDIA +GPUs (Turing and later). + +This is a compute-only package — no graphics, X11, Vulkan, or display +components are included. Azure Linux is a headless distro. + +# --------------------------------------------------------------------------- +# Sub-packages +# --------------------------------------------------------------------------- + +%package libs +Summary: NVIDIA CUDA driver shared libraries (compute-only) +Requires: libelf + +%description libs +Core NVIDIA shared libraries for headless GPU compute, including the CUDA +runtime, NVML management library, PTX JIT compiler, NVVM compiler, OpenCL +implementation, and hardware video encode/decode (NVENC/NVCUVID). + +No OpenGL, EGL, Vulkan, or display libraries are included. + +%package firmware +Summary: NVIDIA GSP firmware +# Firmware is architecture-independent content but packaged per-arch +# because it is extracted from an arch-specific installer. + +%description firmware +GPU System Processor (GSP) firmware images for NVIDIA GPUs. These are +required by the NVIDIA kernel modules to offload tasks to the GPU's +on-board processor. + +%package tools +Summary: NVIDIA GPU management and diagnostic tools +Requires: nvidia-cuda-driver-libs%{?_isa} = %{version}-%{release} + +%description tools +Command-line tools for managing and monitoring NVIDIA GPUs: + - nvidia-smi (system management interface) + - nvidia-persistenced (persistence daemon) + - nvidia-cuda-mps-control (multi-process service control) + - nvidia-cuda-mps-server (multi-process service server) + - nvidia-debugdump (GPU state dump for bug reports) + - nvidia-bug-report.sh (automated bug report generator) + - nvidia-modprobe (kernel module loader / device node creator) + +%package devel +Summary: NVIDIA CUDA driver development symlinks +Requires: nvidia-cuda-driver-libs%{?_isa} = %{version}-%{release} + +%description devel +Unversioned .so symlinks for linking against NVIDIA CUDA driver libraries +at build time (compute-only — no graphics libraries). + +# --------------------------------------------------------------------------- +# Prep — extract the self-extracting .run archive +# --------------------------------------------------------------------------- + +%prep +# The .run file is a shell-based self-extracting archive. +# --extract-only: extract without running the installer +# --target: directory name for the extracted contents +sh %{SOURCE0} --extract-only --target nvidia-installer +cd nvidia-installer + +# --------------------------------------------------------------------------- +# Build — nothing to build, all binaries are prebuilt +# --------------------------------------------------------------------------- + +%build +# Prebuilt proprietary binaries — nothing to compile. + +# --------------------------------------------------------------------------- +# Install — compute-only components (no graphics/display) +# --------------------------------------------------------------------------- + +%install +cd nvidia-installer + +install -d %{buildroot}%{nvidia_libdir} +install -d %{buildroot}%{nvidia_bindir} +install -d %{buildroot}%{nvidia_fwdir} +install -d %{buildroot}%{nvidia_datadir} +install -d %{buildroot}%{_sysconfdir}/OpenCL/vendors +install -d %{buildroot}%{_unitdir} +install -d %{buildroot}%{_tmpfilesdir} + +# -- Core CUDA and compute libraries -- +for lib in \ + libcuda.so.%{version} \ + libnvidia-ml.so.%{version} \ + libnvidia-ptxjitcompiler.so.%{version} \ + libnvidia-nvvm.so.%{version} \ + libnvidia-opencl.so.%{version} \ + libnvidia-cfg.so.%{version} \ + libnvidia-tls.so.%{version} \ + libnvidia-gpucomp.so.%{version} \ + libnvidia-pkcs11.so.%{version} \ + libnvidia-pkcs11-openssl3.so.%{version} \ + libcudadebugger.so.%{version} \ +; do + if [ -f "$lib" ]; then + install -m 0755 "$lib" %{buildroot}%{nvidia_libdir}/ + fi +done + +# -- Video encode/decode libraries (headless compute pipelines) -- +for lib in \ + libnvcuvid.so.%{version} \ + libnvidia-encode.so.%{version} \ + libnvidia-opticalflow.so.%{version} \ +; do + if [ -f "$lib" ]; then + install -m 0755 "$lib" %{buildroot}%{nvidia_libdir}/ + fi +done + +# -- Versioned soname symlinks -- +ln -sf libcuda.so.%{version} %{buildroot}%{nvidia_libdir}/libcuda.so.1 +ln -sf libnvidia-ml.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-ml.so.1 +ln -sf libnvidia-ptxjitcompiler.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-ptxjitcompiler.so.1 +ln -sf libnvidia-nvvm.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-nvvm.so.4 +ln -sf libnvidia-opencl.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-opencl.so.1 +ln -sf libnvidia-cfg.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-cfg.so.1 +ln -sf libcudadebugger.so.%{version} %{buildroot}%{nvidia_libdir}/libcudadebugger.so.1 +ln -sf libnvcuvid.so.%{version} %{buildroot}%{nvidia_libdir}/libnvcuvid.so.1 +ln -sf libnvidia-encode.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-encode.so.1 +ln -sf libnvidia-opticalflow.so.%{version} %{buildroot}%{nvidia_libdir}/libnvidia-opticalflow.so.1 + +# -- Unversioned development symlinks -- +ln -sf libcuda.so.1 %{buildroot}%{nvidia_libdir}/libcuda.so +ln -sf libnvidia-ml.so.1 %{buildroot}%{nvidia_libdir}/libnvidia-ml.so +ln -sf libnvidia-ptxjitcompiler.so.1 %{buildroot}%{nvidia_libdir}/libnvidia-ptxjitcompiler.so +ln -sf libnvidia-nvvm.so.4 %{buildroot}%{nvidia_libdir}/libnvidia-nvvm.so +ln -sf libnvidia-opencl.so.1 %{buildroot}%{nvidia_libdir}/libnvidia-opencl.so +ln -sf libcudadebugger.so.1 %{buildroot}%{nvidia_libdir}/libcudadebugger.so +ln -sf libnvcuvid.so.1 %{buildroot}%{nvidia_libdir}/libnvcuvid.so +ln -sf libnvidia-encode.so.1 %{buildroot}%{nvidia_libdir}/libnvidia-encode.so +ln -sf libnvidia-opticalflow.so.1 %{buildroot}%{nvidia_libdir}/libnvidia-opticalflow.so + +# -- Tools / binaries (compute & management only) -- +for bin in \ + nvidia-smi \ + nvidia-persistenced \ + nvidia-cuda-mps-control \ + nvidia-cuda-mps-server \ + nvidia-debugdump \ + nvidia-bug-report.sh \ + nvidia-modprobe \ +; do + if [ -f "$bin" ]; then + install -m 0755 "$bin" %{buildroot}%{nvidia_bindir}/ + fi +done + +# -- GSP firmware -- +if [ -d "firmware" ]; then + install -d %{buildroot}%{nvidia_fwdir} + install -m 0644 firmware/gsp_*.bin %{buildroot}%{nvidia_fwdir}/ +fi + +# -- Data files (container runtime file list) -- +if [ -f sandboxutils-filelist.json ]; then + install -d %{buildroot}%{_datadir}/nvidia/files.d + install -m 0644 sandboxutils-filelist.json %{buildroot}%{_datadir}/nvidia/files.d/ +fi + +# -- OpenCL ICD registration -- +install -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/OpenCL/vendors/nvidia.icd + +# -- systemd service for nvidia-persistenced -- +install -m 0644 %{SOURCE1} %{buildroot}%{_unitdir}/nvidia-persistenced.service + +# -- tmpfiles.d for /var/run/nvidia-persistenced -- +install -m 0644 %{SOURCE2} %{buildroot}%{_tmpfilesdir}/nvidia.conf + +# --------------------------------------------------------------------------- +# Post-install / uninstall scriptlets +# --------------------------------------------------------------------------- + +%post libs -p /sbin/ldconfig +%postun libs -p /sbin/ldconfig + +%post tools +%systemd_post nvidia-persistenced.service + +%preun tools +%systemd_preun nvidia-persistenced.service + +%postun tools +%systemd_postun_with_restart nvidia-persistenced.service + +# --------------------------------------------------------------------------- +# Files +# --------------------------------------------------------------------------- + +%files +%license nvidia-installer/LICENSE +%doc nvidia-installer/README.txt +%{_sysconfdir}/OpenCL/vendors/nvidia.icd +%dir %{_datadir}/nvidia +%dir %{_datadir}/nvidia/files.d +%{_datadir}/nvidia/files.d/sandboxutils-filelist.json + +%files libs +# Core CUDA / compute libraries +%{nvidia_libdir}/libcuda.so.%{version} +%{nvidia_libdir}/libcuda.so.1 +%{nvidia_libdir}/libnvidia-ml.so.%{version} +%{nvidia_libdir}/libnvidia-ml.so.1 +%{nvidia_libdir}/libnvidia-ptxjitcompiler.so.%{version} +%{nvidia_libdir}/libnvidia-ptxjitcompiler.so.1 +%{nvidia_libdir}/libnvidia-nvvm.so.%{version} +%{nvidia_libdir}/libnvidia-nvvm.so.4 +%{nvidia_libdir}/libnvidia-opencl.so.%{version} +%{nvidia_libdir}/libnvidia-opencl.so.1 +%{nvidia_libdir}/libnvidia-cfg.so.%{version} +%{nvidia_libdir}/libnvidia-cfg.so.1 +%{nvidia_libdir}/libnvidia-tls.so.%{version} +%{nvidia_libdir}/libnvidia-gpucomp.so.%{version} +%{nvidia_libdir}/libnvidia-pkcs11.so.%{version} +%{nvidia_libdir}/libnvidia-pkcs11-openssl3.so.%{version} +%{nvidia_libdir}/libcudadebugger.so.%{version} +%{nvidia_libdir}/libcudadebugger.so.1 +# Video encode/decode (headless compute pipelines) +%{nvidia_libdir}/libnvcuvid.so.%{version} +%{nvidia_libdir}/libnvcuvid.so.1 +%{nvidia_libdir}/libnvidia-encode.so.%{version} +%{nvidia_libdir}/libnvidia-encode.so.1 +%{nvidia_libdir}/libnvidia-opticalflow.so.%{version} +%{nvidia_libdir}/libnvidia-opticalflow.so.1 + +%files firmware +%dir %{nvidia_fwdir} +%{nvidia_fwdir}/gsp_*.bin + +%files tools +%{nvidia_bindir}/nvidia-smi +%{nvidia_bindir}/nvidia-persistenced +%{nvidia_bindir}/nvidia-cuda-mps-control +%{nvidia_bindir}/nvidia-cuda-mps-server +%{nvidia_bindir}/nvidia-debugdump +%{nvidia_bindir}/nvidia-bug-report.sh +%{nvidia_bindir}/nvidia-modprobe +%{_unitdir}/nvidia-persistenced.service +%{_tmpfilesdir}/nvidia.conf + +%files devel +%{nvidia_libdir}/libcuda.so +%{nvidia_libdir}/libnvidia-ml.so +%{nvidia_libdir}/libnvidia-ptxjitcompiler.so +%{nvidia_libdir}/libnvidia-nvvm.so +%{nvidia_libdir}/libnvidia-opencl.so +%{nvidia_libdir}/libcudadebugger.so +%{nvidia_libdir}/libnvcuvid.so +%{nvidia_libdir}/libnvidia-encode.so +%{nvidia_libdir}/libnvidia-opticalflow.so + +%changelog +* Fri Apr 10 2026 Elaheh Dehghani - 595.58.03-1 +- Initial Azure Linux 4.0 package (headless / compute-only) +- User-space NVIDIA GPU driver components for CUDA workloads +- Companion to kmod-nvidia-open (open-source kernel modules) +- Based on NVIDIA-Linux-x86_64-595.58.03 driver release +- No graphics/display components (X11, GLX, EGL, Vulkan, OptiX, NGX) diff --git a/base/comps/nvidia-cuda-driver/nvidia-persistenced.service b/base/comps/nvidia-cuda-driver/nvidia-persistenced.service new file mode 100644 index 00000000000..178fccc030b --- /dev/null +++ b/base/comps/nvidia-cuda-driver/nvidia-persistenced.service @@ -0,0 +1,14 @@ +[Unit] +Description=NVIDIA Persistence Daemon +# Keep the NVIDIA kernel module loaded and GPU state initialized +# even when no user-space clients are running. This reduces latency +# for the first CUDA application launch. +Wants=syslog.target + +[Service] +Type=forking +ExecStart=/usr/bin/nvidia-persistenced --user nvidia-persistenced --persistence-mode +ExecStopPost=/bin/rm -rf /var/run/nvidia-persistenced + +[Install] +WantedBy=multi-user.target diff --git a/base/comps/nvidia-cuda-driver/nvidia.icd b/base/comps/nvidia-cuda-driver/nvidia.icd new file mode 100644 index 00000000000..9712af911b8 --- /dev/null +++ b/base/comps/nvidia-cuda-driver/nvidia.icd @@ -0,0 +1 @@ +libnvidia-opencl.so.1 diff --git a/base/comps/nvidia-cuda-driver/tmpfiles-nvidia.conf b/base/comps/nvidia-cuda-driver/tmpfiles-nvidia.conf new file mode 100644 index 00000000000..39c52702ca2 --- /dev/null +++ b/base/comps/nvidia-cuda-driver/tmpfiles-nvidia.conf @@ -0,0 +1,2 @@ +# Runtime directory for nvidia-persistenced +d /var/run/nvidia-persistenced 0755 nvidia-persistenced nvidia-persistenced -