about summary refs log tree commit diff
path: root/nixpkgs/nixos/modules/services/hardware/nvidia-container-toolkit-cdi-generator/cdi-generate.nix
blob: a90d234f65c0c9d078972a004294bd2b4a66e880 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{ config, lib, pkgs }: let
  mountOptions = { options = ["ro" "nosuid" "nodev" "bind"]; };
  mounts = [
    { hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-cuda-mps-control";
      containerPath = "/usr/bin/nvidia-cuda-mps-control"; }
    { hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-cuda-mps-server";
      containerPath = "/usr/bin/nvidia-cuda-mps-server"; }
    { hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-debugdump";
      containerPath = "/usr/bin/nvidia-debugdump"; }
    { hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-powerd";
      containerPath = "/usr/bin/nvidia-powerd"; }
    { hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-smi";
      containerPath = "/usr/bin/nvidia-smi"; }
    { hostPath = "${pkgs.nvidia-container-toolkit}/bin/nvidia-ctk";
      containerPath = "/usr/bin/nvidia-ctk"; }
    { hostPath = "${pkgs.glibc}/lib";
      containerPath = "${pkgs.glibc}/lib"; }
    { hostPath = "${pkgs.glibc}/lib64";
      containerPath = "${pkgs.glibc}/lib64"; }
  ];
  jqAddMountExpression = ".containerEdits.mounts[.containerEdits.mounts | length] |= . +";
  mountsToJq = lib.concatMap
    (mount:
      ["${pkgs.jq}/bin/jq '${jqAddMountExpression} ${builtins.toJSON (mount // mountOptions)}'"])
    mounts;
in ''
#! ${pkgs.runtimeShell}

function cdiGenerate {
  ${pkgs.nvidia-container-toolkit}/bin/nvidia-ctk cdi generate \
    --format json \
    --ldconfig-path ${pkgs.glibc.bin}/bin/ldconfig \
    --library-search-path ${config.hardware.nvidia.package}/lib \
    --nvidia-ctk-path ${pkgs.nvidia-container-toolkit}/bin/nvidia-ctk
}

cdiGenerate | \
  ${lib.concatStringsSep " | " mountsToJq} > $RUNTIME_DIRECTORY/nvidia-container-toolkit.json
''