Skip to content

Commit c93cc31

Browse files
author
billy
committed
fix: nvidia-container-toolkit missing files when mounting to Docker
Because NVIDIA never does it correctly, we have to do this ourselves. - NVIDIA doesn't provide DRI3 support - NVIDIA never fixes this issue properly - NVIDIA likes to do things their own way - Top 3 public clouds are obsessed with NVIDIA, so we have no choice but to support it Ported from: https://github.com/selkies-project/docker-selkies-egl-desktop/blob/8dd03fba2a33ac774d61f46375a19ed1d9c5b51a/Dockerfile#L248-L264
1 parent 464ef4b commit c93cc31

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

  • root/etc/s6-overlay/s6-rc.d/init-video

root/etc/s6-overlay/s6-rc.d/init-video/run

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,48 @@ do
3333
fi
3434
fi
3535
done
36+
37+
# check if nvidia gpu is present
38+
if which nvidia-smi >/dev/null 2>&1; then
39+
# nvidia-container-toolkit may not place files correctly, so we set them up here
40+
echo "**** NVIDIA GPU detected ****"
41+
42+
OPENCL_ICDS=$(find /etc/OpenCL/vendors -name '*nvidia*.icd' 2>/dev/null)
43+
# if no opencl icd found
44+
if [ -z "${OPENCL_ICDS}" ]; then
45+
echo "**** Setting up OpenCL ICD for NVIDIA ****"
46+
mkdir -pm755 /etc/OpenCL/vendors/
47+
echo "libnvidia-opencl.so.1" > /etc/OpenCL/vendors/nvidia.icd
48+
fi
49+
50+
# find vulkan icds
51+
ICDS=$(find /usr/share/vulkan/icd.d /etc/vulkan/icd.d -name '*nvidia*.json' 2>/dev/null)
52+
# if no icd found
53+
if [ -z "${ICDS}" ]; then
54+
echo "**** Setting up Vulkan ICD for NVIDIA ****"
55+
# get vulkan api version
56+
VULKAN_API_VERSION=$(ldconfig -p | grep "libvulkan.so" | awk '{print $NF}' | xargs readlink | grep -oE "[0-9]+\.[0-9]+\.[0-9]+")
57+
mkdir -pm755 /etc/vulkan/icd.d/
58+
echo "{\n\
59+
\"file_format_version\" : \"1.0.0\",\n\
60+
\"ICD\": {\n\
61+
\"library_path\": \"libGLX_nvidia.so.0\",\n\
62+
\"api_version\" : \"${VULKAN_API_VERSION}\"\n\
63+
}\n\
64+
}" > /etc/vulkan/icd.d/nvidia_icd.json
65+
fi
66+
67+
# find glvnd egl_vendor files
68+
EGLS=$(find /usr/share/glvnd/egl_vendor.d /etc/glvnd/egl_vendor.d -name '*nvidia*.json' 2>/dev/null)
69+
# if no egl_vendor file found
70+
if [ -z "${EGLS}" ]; then
71+
echo "**** Setting up EGL vendor file for NVIDIA ****"
72+
mkdir -pm755 /etc/glvnd/egl_vendor.d/
73+
echo "{\n\
74+
\"file_format_version\" : \"1.0.0\",\n\
75+
\"ICD\": {\n\
76+
\"library_path\": \"libEGL_nvidia.so.0\"\n\
77+
}\n\
78+
}" > /etc/glvnd/egl_vendor.d/10_nvidia.json
79+
fi
80+
fi

0 commit comments

Comments
 (0)