Improvements to NVIDIA Patch installation

The GitHub servers had a small outage today while I was working. This prevented the containers from being able to start.
This change allows for the patch to be re-used between container re-creations and also prevents the failure from stopping boot. If the patch fails to download or install, then it will continue with an unpatched driver.
This commit is contained in:
Josh.5
2023-09-06 00:10:02 +12:00
parent 90510bd8ea
commit 3cce8f79f8

View File

@@ -101,27 +101,35 @@ function install_nvidia_driver {
> "${USER_HOME:?}/Downloads/nvidia_gpu_install.log" 2>&1 > "${USER_HOME:?}/Downloads/nvidia_gpu_install.log" 2>&1
fi fi
fi fi
}
function patch_nvidia_driver {
# REF: https://github.com/keylase/nvidia-patch#docker-support # REF: https://github.com/keylase/nvidia-patch#docker-support
if [ "${NVIDIA_PATCH_VERSION:-}X" != "X" ]; then if [ "${NVIDIA_PATCH_VERSION:-}X" != "X" ]; then
echo "Patch NVIDIA Driver" # Don't fail boot if something goes wrong here. Set +e
(
echo " - Fetch NVIDIA NVENC patch" set +e
if [ ! -f "${USER_HOME:?}/Downloads/nvidia-patch.${NVIDIA_PATCH_VERSION:?}.sh" ]; then
echo "Fetch NVIDIA NVENC patch"
wget -q --show-progress --progress=bar:force:noscroll \ wget -q --show-progress --progress=bar:force:noscroll \
-O /usr/local/bin/patch.sh \ -O "${USER_HOME:?}/Downloads/nvidia-patch.${NVIDIA_PATCH_VERSION:?}.sh" \
"https://raw.githubusercontent.com/keylase/nvidia-patch/${NVIDIA_PATCH_VERSION:?}/patch.sh" "https://raw.githubusercontent.com/keylase/nvidia-patch/${NVIDIA_PATCH_VERSION:?}/patch.sh"
echo " - Fetch NVIDIA NvFBC patch" fi
if [ ! -f "${USER_HOME:?}/Downloads/nvidia-patch-fbc.${NVIDIA_PATCH_VERSION:?}.sh" ]; then
echo "Fetch NVIDIA NvFBC patch"
wget -q --show-progress --progress=bar:force:noscroll \ wget -q --show-progress --progress=bar:force:noscroll \
-O /usr/local/bin/patch-fbc.sh \ -O "${USER_HOME:?}/Downloads/nvidia-patch-fbc.${NVIDIA_PATCH_VERSION:?}.sh" \
"https://raw.githubusercontent.com/keylase/nvidia-patch/${NVIDIA_PATCH_VERSION:?}/patch-fbc.sh" "https://raw.githubusercontent.com/keylase/nvidia-patch/${NVIDIA_PATCH_VERSION:?}/patch-fbc.sh"
fi
chmod +x \ chmod +x \
/usr/local/bin/patch.sh \ "${USER_HOME:?}/Downloads/nvidia-patch.${NVIDIA_PATCH_VERSION:?}.sh" \
/usr/local/bin/patch-fbc.sh "${USER_HOME:?}/Downloads/nvidia-patch-fbc.${NVIDIA_PATCH_VERSION:?}.sh"
echo " - Install Patches" echo "Install NVIDIA driver patches"
echo "/patched-lib" > /etc/ld.so.conf.d/000-patched-lib.conf echo "/patched-lib" > /etc/ld.so.conf.d/000-patched-lib.conf
mkdir -p "/patched-lib" mkdir -p "/patched-lib"
PATCH_OUTPUT_DIR="/patched-lib" /usr/local/bin/patch.sh PATCH_OUTPUT_DIR="/patched-lib" "${USER_HOME:?}/Downloads/nvidia-patch.${NVIDIA_PATCH_VERSION:?}.sh"
PATCH_OUTPUT_DIR="/patched-lib" /usr/local/bin/patch-fbc.sh PATCH_OUTPUT_DIR="/patched-lib" "${USER_HOME:?}/Downloads/nvidia-patch-fbc.${NVIDIA_PATCH_VERSION:?}.sh"
pushd "/patched-lib" &> /dev/null || { echo "Error: Failed to push directory to /patched-lib"; exit 1; } pushd "/patched-lib" &> /dev/null || { echo "Error: Failed to push directory to /patched-lib"; exit 1; }
for f in * ; do for f in * ; do
@@ -132,6 +140,9 @@ function install_nvidia_driver {
done done
ldconfig ldconfig
popd &> /dev/null || { echo "Error: Failed to pop directory out of /patched-lib"; exit 1; } popd &> /dev/null || { echo "Error: Failed to pop directory out of /patched-lib"; exit 1; }
)
else
echo "Leaving NVIDIA driver stock without patching"
fi fi
} }
@@ -194,6 +205,7 @@ fi
if [ "${nvidia_pci_address:-}X" != "X" ]; then if [ "${nvidia_pci_address:-}X" != "X" ]; then
echo "**** Found NVIDIA device '${nvidia_gpu_name:?}' ****" echo "**** Found NVIDIA device '${nvidia_gpu_name:?}' ****"
install_nvidia_driver install_nvidia_driver
patch_nvidia_driver
else else
echo "**** No NVIDIA device found ****" echo "**** No NVIDIA device found ****"
fi fi