diff --git a/internal/discover/ldconfig.go b/internal/discover/ldconfig.go index 76817a48f..6111cb17d 100644 --- a/internal/discover/ldconfig.go +++ b/internal/discover/ldconfig.go @@ -50,6 +50,9 @@ func (d ldconfig) Hooks() ([]Hook, error) { } libraryFolders := uniqueFolders(getLibraryPaths(mounts)) + if len(libraryFolders) == 0 { + return nil, nil + } return d.hookCreator.Create(UpdateLDCacheHook, libraryFolders...).Hooks() } diff --git a/internal/discover/ldconfig_test.go b/internal/discover/ldconfig_test.go index 31243551e..a1005aedb 100644 --- a/internal/discover/ldconfig_test.go +++ b/internal/discover/ldconfig_test.go @@ -41,15 +41,8 @@ func TestLDCacheUpdateHook(t *testing.T) { expectedHooks []Hook }{ { - description: "empty mounts", - expectedHooks: []Hook{ - { - Lifecycle: "createContainer", - Path: testNvidiaCDIHookPath, - Args: []string{"nvidia-cdi-hook", "update-ldcache"}, - Env: []string{"NVIDIA_CTK_DEBUG=false"}, - }, - }, + description: "empty mounts", + expectedHooks: nil, }, { description: "mount error", @@ -101,11 +94,16 @@ func TestLDCacheUpdateHook(t *testing.T) { { description: "explicit ldconfig path is passed", ldconfigPath: testLdconfigPath, + mounts: []Mount{ + { + Path: "/usr/local/lib/libfoo.so", + }, + }, expectedHooks: []Hook{ { Lifecycle: "createContainer", Path: testNvidiaCDIHookPath, - Args: []string{"nvidia-cdi-hook", "update-ldcache", "--ldconfig-path", testLdconfigPath}, + Args: []string{"nvidia-cdi-hook", "update-ldcache", "--ldconfig-path", testLdconfigPath, "--folder", "/usr/local/lib"}, Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, diff --git a/pkg/nvcdi/lib-csv_test.go b/pkg/nvcdi/lib-csv_test.go index 3b8507362..c5ed3d8df 100644 --- a/pkg/nvcdi/lib-csv_test.go +++ b/pkg/nvcdi/lib-csv_test.go @@ -205,7 +205,17 @@ func TestDeviceSpecGenerators(t *testing.T) { }, expectedCommonEdits: &cdi.ContainerEdits{ ContainerEdits: &specs.ContainerEdits{ + Mounts: []*specs.Mount{ + {HostPath: "/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1.1", ContainerPath: "/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1.1", Options: []string{"ro", "nosuid", "nodev", "rbind", "rprivate"}}, + {HostPath: "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ml.so.1", ContainerPath: "/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ml.so.1", Options: []string{"ro", "nosuid", "nodev", "rbind", "rprivate"}}, + }, Hooks: []*specs.Hook{ + { + HookName: "createContainer", + Path: "/usr/bin/nvidia-cdi-hook", + Args: []string{"nvidia-cdi-hook", "create-symlinks", "--link", "libcuda.so.1::/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so"}, + Env: []string{"NVIDIA_CTK_DEBUG=false"}, + }, { HookName: "createContainer", Path: "/usr/bin/nvidia-cdi-hook", @@ -215,7 +225,7 @@ func TestDeviceSpecGenerators(t *testing.T) { { HookName: "createContainer", Path: "/usr/bin/nvidia-cdi-hook", - Args: []string{"nvidia-cdi-hook", "update-ldcache"}, + Args: []string{"nvidia-cdi-hook", "update-ldcache", "--folder", "/usr/lib/aarch64-linux-gnu/nvidia"}, Env: []string{"NVIDIA_CTK_DEBUG=false"}, }, }, diff --git a/testdata/lookup/rootfs-thor-dgpu/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1.1 b/testdata/lookup/rootfs-thor-dgpu/usr/lib/aarch64-linux-gnu/nvidia/libcuda.so.1.1 new file mode 100644 index 000000000..e69de29bb diff --git a/testdata/lookup/rootfs-thor-dgpu/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ml.so.1 b/testdata/lookup/rootfs-thor-dgpu/usr/lib/aarch64-linux-gnu/nvidia/libnvidia-ml.so.1 new file mode 100644 index 000000000..e69de29bb