This repository has been archived on 2025-02-03. You can view files and clone it, but cannot push or open issues or pull requests.
Files
unraid-nvidia-driver/source/compile.sh

185 lines
6.8 KiB
Bash

#!/bin/bash
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# Please go to the end of this script for usage examples
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if [ -z "${1}" ]; then
echo "No Nvidia Driver version specified!"
exit 1
fi
VERSIONS="$(wget -qO- https://github.com/ich777/versions/raw/refs/heads/master/Unraid-Kernel-Helper)"
if [ -z "${VERSIONS}" ]; then
echo "ERROR: Can't get versions!"
exit 1
fi
LIBNVIDIA_CONTAINER_V="$(echo "${VERSIONS}" | grep "LIBNVIDIA_CONTAINER_V" | cut -d '=' -f2 | sed 's/"//g')"
CONTAINER_TOOLKIT_V="$(echo "${VERSIONS}" | grep "CONTAINER_TOOLKIT_V" | cut -d '=' -f2 | sed 's/"//g')"
nvidia_driver () {
if [ "${2}" == "opensource" ]; then
NV_PROPRIETARY="--kernel-module-type=open"
else
# Version compare for 560 driver
TARGET_V="560"
COMPARE="${1%%-*}
$TARGET_V"
if [ "$TARGET_V" == "$(echo "$COMPARE" | sort -V | tail -1)" ]; then
NV_PROPRIETARY=""
else
NV_PROPRIETARY="--kernel-module-type=proprietary \
"
fi
fi
cd ${DATA_DIR}
rm -rf /NVIDIA /lib/firmware/nvidia
if [ ! -f ${DATA_DIR}/NVIDIA_v${1}.run ]; then
wget -q -nc --show-progress --progress=bar:force:noscroll -O ${DATA_DIR}/NVIDIA_v${1}.run http://us.download.nvidia.com/XFree86/Linux-x86_64/${1}/NVIDIA-Linux-x86_64-${1}.run
fi
chmod +x ${DATA_DIR}/NVIDIA_v${1}.run
mkdir -p /NVIDIA/usr/lib64/xorg/modules/{drivers,extensions} /NVIDIA/usr/bin /NVIDIA/etc /NVIDIA/lib/modules/${UNAME}/kernel/drivers/video /NVIDIA/lib/firmware
# Patch incompatible version
if [ "${1}" == "470.256.02" ]; then
${DATA_DIR}/NVIDIA_v${1}.run --extract-only
cd NVIDIA*-${1}
patch -p0 < ${DATA_DIR}/nvidia-patch_470.256.02.patch
./nvidia-installer --kernel-name=$UNAME \
--no-precompiled-interface \
--disable-nouveau \
--x-prefix=/NVIDIA/usr \
--x-library-path=/NVIDIA/usr/lib64 \
--x-module-path=/NVIDIA/usr/lib64/xorg/modules \
--opengl-prefix=/NVIDIA/usr \
--installer-prefix=/NVIDIA/usr \
--utility-prefix=/NVIDIA/usr \
--documentation-prefix=/NVIDIA/usr \
--application-profile-path=/NVIDIA/usr/share/nvidia \
--proc-mount-point=/NVIDIA/proc \
--kernel-install-path=/NVIDIA/lib/modules/${UNAME}/kernel/drivers/video \
--compat32-prefix=/NVIDIA/usr \
--compat32-libdir=/lib \
--install-compat32-libs \
--no-x-check \
--no-nouveau-check \
--no-systemd \
--skip-depmod \
--j${CPU_COUNT} \
--silent
cd ${DATA_DIR}
rm -rf NVIDIA*-${1}
else
${DATA_DIR}/NVIDIA_v${1}.run --kernel-name=$UNAME \
--no-precompiled-interface \
--disable-nouveau \
--x-prefix=/NVIDIA/usr \
--x-library-path=/NVIDIA/usr/lib64 \
--x-module-path=/NVIDIA/usr/lib64/xorg/modules \
--opengl-prefix=/NVIDIA/usr \
--installer-prefix=/NVIDIA/usr \
--utility-prefix=/NVIDIA/usr \
--documentation-prefix=/NVIDIA/usr \
--application-profile-path=/NVIDIA/usr/share/nvidia \
--proc-mount-point=/NVIDIA/proc \
--kernel-install-path=/NVIDIA/lib/modules/${UNAME}/kernel/drivers/video \
--compat32-prefix=/NVIDIA/usr \
--compat32-libdir=/lib \
--install-compat32-libs \
--no-x-check \
--no-nouveau-check \
--no-systemd \
--skip-depmod \
--j${CPU_COUNT} \
${NV_PROPRIETARY} --silent
fi
if [ -d /lib/firmware/nvidia ]; then
cp -R /lib/firmware/nvidia /NVIDIA/lib/firmware/
fi
cp /usr/bin/nvidia-modprobe /NVIDIA/usr/bin/
cp -R /etc/OpenCL /NVIDIA/etc/
cp -R /etc/vulkan /NVIDIA/etc/
cd ${DATA_DIR}
if [ ! -f ${DATA_DIR}/libnvidia-container-v${LIBNVIDIA_CONTAINER_V}.tar.gz ]; then
wget -q -nc --show-progress --progress=bar:force:noscroll -O ${DATA_DIR}/libnvidia-container-v${LIBNVIDIA_CONTAINER_V}.tar.gz https://github.com/ich777/libnvidia-container/releases/download/${LIBNVIDIA_CONTAINER_V}/libnvidia-container-v${LIBNVIDIA_CONTAINER_V}.tar.gz
fi
tar -C /NVIDIA -xf ${DATA_DIR}/libnvidia-container-v${LIBNVIDIA_CONTAINER_V}.tar.gz
cd ${DATA_DIR}
if [ ! -f ${DATA_DIR}/nvidia-container-toolkit-v${CONTAINER_TOOLKIT_V}.tar.gz ]; then
wget -q -nc --show-progress --progress=bar:force:noscroll -O ${DATA_DIR}/nvidia-container-toolkit-v${CONTAINER_TOOLKIT_V}.tar.gz https://github.com/ich777/nvidia-container-toolkit/releases/download/${CONTAINER_TOOLKIT_V}/nvidia-container-toolkit-v${CONTAINER_TOOLKIT_V}.tar.gz
fi
tar -C /NVIDIA -xf ${DATA_DIR}/nvidia-container-toolkit-v${CONTAINER_TOOLKIT_V}.tar.gz
if [ "${2}" == "opensource" ]; then
PLUGIN_NAME="nvos-driver"
else
PLUGIN_NAME="nvidia-driver"
fi
BASE_DIR="/NVIDIA"
TMP_DIR="/tmp/${PLUGIN_NAME}_"$(echo $RANDOM)""
VERSION="$(date +'%Y.%m.%d')"
mkdir -p $TMP_DIR/$VERSION
cd $TMP_DIR/$VERSION
cp -R $BASE_DIR/* $TMP_DIR/$VERSION/
mkdir $TMP_DIR/$VERSION/install
if [ "${2}" == "opensource" ]; then
tee $TMP_DIR/$VERSION/install/slack-desc <<EOF
|-----handy-ruler------------------------------------------------------|
$PLUGIN_NAME: $PLUGIN_NAME Package contents:
$PLUGIN_NAME:
$PLUGIN_NAME: Nvidia open source Kernel modules and Nvidia proprietary
$PLUGIN_NAME: binaries/libraries based on driver v${1}
$PLUGIN_NAME: libnvidia-container v${LIBNVIDIA_CONTAINER_V}
$PLUGIN_NAME: nvidia-container-toolkit v${CONTAINER_TOOLKIT_V}
$PLUGIN_NAME:
$PLUGIN_NAME:
$PLUGIN_NAME: Custom $PLUGIN_NAME for Unraid Kernel v${UNAME%%-*} by ich777
$PLUGIN_NAME:
EOF
else
tee $TMP_DIR/$VERSION/install/slack-desc <<EOF
|-----handy-ruler------------------------------------------------------|
$PLUGIN_NAME: $PLUGIN_NAME Package contents:
$PLUGIN_NAME:
$PLUGIN_NAME: Nvidia-Driver v${1}
$PLUGIN_NAME: libnvidia-container v${LIBNVIDIA_CONTAINER_V}
$PLUGIN_NAME: nvidia-container-toolkit v${CONTAINER_TOOLKIT_V}
$PLUGIN_NAME:
$PLUGIN_NAME:
$PLUGIN_NAME: Custom $PLUGIN_NAME for Unraid Kernel v${UNAME%%-*} by ich777
$PLUGIN_NAME:
EOF
fi
${DATA_DIR}/bzroot-extracted-$UNAME/sbin/makepkg -l n -c n $TMP_DIR/${PLUGIN_NAME%%-*}-${1}-${UNAME}-1.txz
md5sum $TMP_DIR/${PLUGIN_NAME%%-*}-${1}-${UNAME}-1.txz | awk '{print $1}' > $TMP_DIR/${PLUGIN_NAME%%-*}-${1}-${UNAME}-1.txz.md5
}
# ----- USAGE --- USAGE --- USAGE --- USAGE --- USAGE --- USAGE --- USAGE -----
#
# This script is fully comatible with this Docker container:
# https://github.com/ich777/unraid_kernel
#
# To compile the driver with the proprietary Kernelmodules:
# compile.sh "<DRIVER_VERSION>"
#
# To compile the driver with thh open-source modules (driver version 560+):
# compile.sh "<DRIVER_VERSION>" "opensource"
#
# !!! Replace <DRIVER_VERSION> with the driver version you want to compile !!!
#
# Example for the proprietary Kernel module: compile.sh "565.77"
# Example for the open-source Kernel module: compile.sh "565.77" "opensource"
#
# ----- USAGE --- USAGE --- USAGE --- USAGE --- USAGE --- USAGE --- USAGE -----