Merge pull request #291828 from SomeoneSerge/refactor/cdi-nvidia

nixos/cdi.dynamic.nvidia: expose driverLink
This commit is contained in:
Someone 2024-03-04 18:32:34 +00:00 committed by GitHub
commit 46b75bf589
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 44 additions and 21 deletions

View File

@ -1,37 +1,58 @@
{ config, lib, pkgs }: let {
addDriverRunpath,
glibc,
jq,
lib,
nvidia-container-toolkit,
nvidia-driver,
runtimeShell,
writeScriptBin,
}:
let
mountOptions = { options = ["ro" "nosuid" "nodev" "bind"]; }; mountOptions = { options = ["ro" "nosuid" "nodev" "bind"]; };
mounts = [ mounts = [
{ hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-cuda-mps-control"; # FIXME: Making /usr mounts optional
{ hostPath = lib.getExe' nvidia-driver "nvidia-cuda-mps-control";
containerPath = "/usr/bin/nvidia-cuda-mps-control"; } containerPath = "/usr/bin/nvidia-cuda-mps-control"; }
{ hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-cuda-mps-server"; { hostPath = lib.getExe' nvidia-driver "nvidia-cuda-mps-server";
containerPath = "/usr/bin/nvidia-cuda-mps-server"; } containerPath = "/usr/bin/nvidia-cuda-mps-server"; }
{ hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-debugdump"; { hostPath = lib.getExe' nvidia-driver "nvidia-debugdump";
containerPath = "/usr/bin/nvidia-debugdump"; } containerPath = "/usr/bin/nvidia-debugdump"; }
{ hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-powerd"; { hostPath = lib.getExe' nvidia-driver "nvidia-powerd";
containerPath = "/usr/bin/nvidia-powerd"; } containerPath = "/usr/bin/nvidia-powerd"; }
{ hostPath = "${lib.getBin config.hardware.nvidia.package}/bin/nvidia-smi"; { hostPath = lib.getExe' nvidia-driver "nvidia-smi";
containerPath = "/usr/bin/nvidia-smi"; } containerPath = "/usr/bin/nvidia-smi"; }
{ hostPath = "${pkgs.nvidia-container-toolkit}/bin/nvidia-ctk"; { hostPath = lib.getExe' nvidia-container-toolkit "nvidia-ctk";
containerPath = "/usr/bin/nvidia-ctk"; } containerPath = "/usr/bin/nvidia-ctk"; }
{ hostPath = "${pkgs.glibc}/lib"; { hostPath = "${lib.getLib glibc}/lib";
containerPath = "${pkgs.glibc}/lib"; } containerPath = "${lib.getLib glibc}/lib"; }
{ hostPath = "${pkgs.glibc}/lib64";
containerPath = "${pkgs.glibc}/lib64"; } # FIXME: use closureinfo
{
hostPath = addDriverRunpath.driverLink;
containerPath = addDriverRunpath.driverLink;
}
{ hostPath = "${lib.getLib glibc}/lib";
containerPath = "${lib.getLib glibc}/lib"; }
{ hostPath = "${lib.getLib glibc}/lib64";
containerPath = "${lib.getLib glibc}/lib64"; }
]; ];
jqAddMountExpression = ".containerEdits.mounts[.containerEdits.mounts | length] |= . +"; jqAddMountExpression = ".containerEdits.mounts[.containerEdits.mounts | length] |= . +";
mountsToJq = lib.concatMap mountsToJq = lib.concatMap
(mount: (mount:
["${pkgs.jq}/bin/jq '${jqAddMountExpression} ${builtins.toJSON (mount // mountOptions)}'"]) ["${lib.getExe jq} '${jqAddMountExpression} ${builtins.toJSON (mount // mountOptions)}'"])
mounts; mounts;
in '' in
#! ${pkgs.runtimeShell} writeScriptBin "nvidia-cdi-generator"
''
#! ${runtimeShell}
function cdiGenerate { function cdiGenerate {
${pkgs.nvidia-container-toolkit}/bin/nvidia-ctk cdi generate \ ${lib.getExe' nvidia-container-toolkit "nvidia-ctk"} cdi generate \
--format json \ --format json \
--ldconfig-path ${pkgs.glibc.bin}/bin/ldconfig \ --ldconfig-path ${lib.getExe' glibc "ldconfig"} \
--library-search-path ${config.hardware.nvidia.package}/lib \ --library-search-path ${lib.getLib nvidia-driver}/lib \
--nvidia-ctk-path ${pkgs.nvidia-container-toolkit}/bin/nvidia-ctk --nvidia-ctk-path ${lib.getExe' nvidia-container-toolkit "nvidia-ctk"}
} }
cdiGenerate | \ cdiGenerate | \

View File

@ -26,9 +26,11 @@
serviceConfig = { serviceConfig = {
RuntimeDirectory = "cdi"; RuntimeDirectory = "cdi";
RemainAfterExit = true; RemainAfterExit = true;
ExecStart = let ExecStart =
script = (pkgs.writeScriptBin "nvidia-cdi-generator" let
(import ./cdi-generate.nix { inherit config lib pkgs; })); in (lib.getExe script); script = pkgs.callPackage ./cdi-generate.nix { nvidia-driver = config.hardware.nvidia.package; };
in
lib.getExe script;
Type = "oneshot"; Type = "oneshot";
}; };
}; };