nixpkgs mirror (for testing)
github.com/NixOS/nixpkgs
nix
1{
2 lib,
3 glibc,
4 fetchFromGitHub,
5 makeWrapper,
6 buildGoModule,
7 autoAddDriverRunpath,
8}:
9
10let
11 # From https://gitlab.com/nvidia/container-toolkit/container-toolkit/-/blob/03cbf9c6cd26c75afef8a2dd68e0306aace80401/Makefile#L54
12 cliVersionPackage = "github.com/NVIDIA/nvidia-container-toolkit/internal/info";
13in
14buildGoModule (finalAttrs: {
15 pname = "nvidia-container-toolkit";
16 version = "1.18.2";
17
18 src = fetchFromGitHub {
19 owner = "NVIDIA";
20 repo = "nvidia-container-toolkit";
21 tag = "v${finalAttrs.version}";
22 hash = "sha256-OMM7IQ65jPr9I5YUwVR3SXbuARnLjS2GSVq2j4J8uFY=";
23
24 };
25
26 outputs = [
27 "out"
28 "tools"
29 ];
30
31 vendorHash = null;
32
33 patches = [
34 # This patch causes library lookups to first attempt loading via dlopen
35 # before falling back to the regular symlink location and ldcache location.
36 ./0001-Add-dlopen-discoverer.patch
37 ];
38
39 postPatch = ''
40 substituteInPlace internal/config/config.go \
41 --replace-fail '/usr/bin/nvidia-container-runtime-hook' "$tools/bin/nvidia-container-runtime-hook" \
42 --replace-fail '/sbin/ldconfig' '${lib.getBin glibc}/sbin/ldconfig'
43
44 substituteInPlace cmd/nvidia-cdi-hook/update-ldcache/update-ldcache.go \
45 --replace-fail '/sbin/ldconfig' '${lib.getBin glibc}/sbin/ldconfig'
46 '';
47
48 subPackages = [
49 "cmd/nvidia-cdi-hook"
50 "cmd/nvidia-container-runtime"
51 "cmd/nvidia-container-runtime.cdi"
52 "cmd/nvidia-container-runtime-hook"
53 "cmd/nvidia-container-runtime.legacy"
54 "cmd/nvidia-ctk"
55 ];
56
57 # Based on upstream's Makefile:
58 # https://gitlab.com/nvidia/container-toolkit/container-toolkit/-/blob/03cbf9c6cd26c75afef8a2dd68e0306aace80401/Makefile#L64
59 ldflags = [
60 "-extldflags=-Wl,-z,lazy" # May be redunandant, cf. `man ld`: "Lazy binding is the default".
61 "-s" # "disable symbol table"
62
63 # "-X name=value"
64 "-X ${cliVersionPackage}.version=${finalAttrs.version}"
65 "-X ${cliVersionPackage}.gitCommit=${finalAttrs.src.rev}"
66 ];
67
68 nativeBuildInputs = [
69 autoAddDriverRunpath
70 makeWrapper
71 ];
72
73 checkFlags =
74 let
75 skippedTests = [
76 # Disable tests executing nvidia-container-runtime command.
77 "TestGoodInput"
78 "TestDuplicateHook"
79 ];
80 in
81 [ "-skip=^${builtins.concatStringsSep "$|^" skippedTests}$" ];
82
83 postInstall = ''
84 mkdir -p $tools/bin
85 mv $out/bin/{nvidia-cdi-hook,nvidia-container-runtime,nvidia-container-runtime.cdi,nvidia-container-runtime-hook,nvidia-container-runtime.legacy} $tools/bin
86 '';
87
88 meta = {
89 homepage = "https://gitlab.com/nvidia/container-toolkit/container-toolkit";
90 description = "NVIDIA Container Toolkit";
91 mainProgram = "nvidia-ctk";
92 license = lib.licenses.asl20;
93 platforms = lib.platforms.linux;
94 maintainers = with lib.maintainers; [
95 cpcloud
96 christoph-heiss
97 ];
98 };
99})