A few improvements for NVIDIA_HANDLER function

This commit is contained in:
Kron4ek 2023-05-31 19:19:28 +05:00
parent 184482a7fe
commit 413054553e

View file

@ -24,7 +24,7 @@ script_version="1.24.1"
# size to 0 # size to 0
init_size=40000 init_size=40000
bash_size=1339208 bash_size=1339208
script_size=35698 script_size=36053
busybox_size=1161112 busybox_size=1161112
utils_size=4101345 utils_size=4101345
@ -356,48 +356,6 @@ mount_overlayfs () {
} }
nvidia_driver_handler () { nvidia_driver_handler () {
if [ -f /sys/module/nvidia/version ]; then
nvidia_driver_version="$(cat /sys/module/nvidia/version)"
fi
if [ -z "${nvidia_driver_version}" ] && \
[ "$(ls /tmp/hostlibs/x86_64-linux-gnu/libGLX_nvidia.so.* 2>/dev/null)" ]; then
nvidia_driver_version="$(basename /tmp/hostlibs/x86_64-linux-gnu/libGLX_nvidia.so.*.* | tail -c +18)"
fi
if ([ "${nvidia_driver_version}" = "*.*" ] || [ -z "${nvidia_driver_version}" ]) && \
[ "$(ls /tmp/hostlibs/x86_64-linux-gnu/nvidia/current/libGLX_nvidia.so.* 2>/dev/null)" ]; then
nvidia_driver_version="$(basename /tmp/hostlibs/x86_64-linux-gnu/nvidia/current/libGLX_nvidia.so.*.* | tail -c +18)"
fi
if ([ "${nvidia_driver_version}" = "*.*" ] || [ -z "${nvidia_driver_version}" ]) && \
[ "$(ls /tmp/hostlibs/libGLX_nvidia.so.* 2>/dev/null)" ]; then
nvidia_driver_version="$(basename /tmp/hostlibs/libGLX_nvidia.so.*.* | tail -c +18)"
fi
if ([ "${nvidia_driver_version}" = "*.*" ] || [ -z "${nvidia_driver_version}" ]) && nvidia-smi &>/dev/null; then
nvidia_driver_version="$(nvidia-smi --query-gpu=driver_version --format=csv,noheader)"
fi
if ([ "${nvidia_driver_version}" = "*.*" ] || [ -z "${nvidia_driver_version}" ]) && modinfo nvidia &>/dev/null; then
nvidia_driver_version="$(modinfo -F version nvidia 2>/dev/null)"
fi
if [ "$(ls /usr/lib/libGLX_nvidia.so.* 2>/dev/null)" ]; then
container_nvidia_version="$(basename /usr/lib/libGLX_nvidia.so.*.* | tail -c +18)"
fi
if [ -z "${nvidia_driver_version}" ] || [ "${nvidia_driver_version}" = "" ]; then
echo "Unable to determine Nvidia driver version"
rm -f "${nvidia_drivers_dir}"/current-nvidia-version
exit 1
fi
if [ "$(cat "${nvidia_drivers_dir}"/current-nvidia-version 2>/dev/null)" = "${nvidia_driver_version}" ] || \
[ "${nvidia_driver_version}" = "${container_nvidia_version}" ]; then
exit
fi
OLD_PWD="${PWD}" OLD_PWD="${PWD}"
rm -rf "${nvidia_drivers_dir}"/nvidia.run "${nvidia_drivers_dir}"/nvidia-driver rm -rf "${nvidia_drivers_dir}"/nvidia.run "${nvidia_drivers_dir}"/nvidia-driver
@ -414,7 +372,7 @@ nvidia_driver_handler () {
# If the previous download failed, get the URL from FlatHub repo # If the previous download failed, get the URL from FlatHub repo
if [ ! -s nvidia.run ] || [ "$(stat -c%s nvidia.run)" -lt 30000000 ]; then if [ ! -s nvidia.run ] || [ "$(stat -c%s nvidia.run)" -lt 30000000 ]; then
rm -f nvidia.run rm -f nvidia.run
driver_url="https:$(curl -#Lo - "https://raw.githubusercontent.com/flathub/org.freedesktop.Platform.GL.nvidia/master/data/nvidia-${nvidia_driver_version}-i386.data" | cut -d ':' -f 6)" driver_url="https:$(curl -#Lo - "https://raw.githubusercontent.com/flathub/org.freedesktop.Platform.GL.nvidia/master/data/nvidia-${nvidia_driver_version}-x86_64.data" | cut -d ':' -f 6)"
curl -#Lo nvidia.run "${driver_url}" curl -#Lo nvidia.run "${driver_url}"
fi fi
@ -836,6 +794,10 @@ if [ "$(ls "${working_dir}"/running_* 2>/dev/null)" ] && [ ! "$(ls "${mount_poin
rm -f "${working_dir}"/running_* rm -f "${working_dir}"/running_*
fi fi
if [ -f "${nvidia_drivers_dir}"/lock ] && [ ! "$(ls "${working_dir}"/running_* 2>/dev/null)" ]; then
rm -f "${nvidia_drivers_dir}"/lock
fi
# Mount the image # Mount the image
mkdir -p "${mount_point}" mkdir -p "${mount_point}"
@ -880,7 +842,7 @@ if [ "$(ls "${mount_point}" 2>/dev/null)" ] || \
cd "${mount_point}"/usr/share/applications || exit 1 cd "${mount_point}"/usr/share/applications || exit 1
unset variables unset variables
vars="BASE_DIR DISABLE_NET DISABLE_X11 HOME_DIR SANDBOX SANDBOX_LEVEL USE_SYS_UTILS" vars="BASE_DIR DISABLE_NET DISABLE_X11 HOME_DIR SANDBOX SANDBOX_LEVEL USE_SYS_UTILS CUSTOM_MNT"
for v in ${vars}; do for v in ${vars}; do
if [ -n "${!v}" ]; then if [ -n "${!v}" ]; then
variables="${v}=\"${!v}\" ${variables}" variables="${v}=\"${!v}\" ${variables}"
@ -936,7 +898,7 @@ if [ "$(ls "${mount_point}" 2>/dev/null)" ] || \
fi fi
if [ "$1" = "-u" ] && [ -z "${script_is_symlink}" ] && [ -z "${CUSTOM_MNT}" ]; then if [ "$1" = "-u" ] && [ -z "${script_is_symlink}" ] && [ -z "${CUSTOM_MNT}" ]; then
export overlayfs_dir="${HOME}"/.local/share/Conty/update_overlayfs export overlayfs_dir="${HOME}"/.local/share/Conty/update_overlayfs_"${script_md5}"
rm -rf "${overlayfs_dir}" rm -rf "${overlayfs_dir}"
if mount_overlayfs; then if mount_overlayfs; then
@ -954,8 +916,10 @@ if [ "$(ls "${mount_point}" 2>/dev/null)" ] || \
rm -f test_rw rm -f test_rw
OLD_PWD="${PWD}" OLD_PWD="${PWD}"
mkdir conty_update_temp
cd conty_update_temp || exit 1 conty_update_temp_dir="${PWD}"/conty_update_temp_"${script_md5}"
mkdir "${conty_update_temp_dir}"
cd "${conty_update_temp_dir}" || exit 1
if command -v awk 1>/dev/null; then if command -v awk 1>/dev/null; then
current_file_size="$(stat -c "%s" "${script}")" current_file_size="$(stat -c "%s" "${script}")"
@ -1027,7 +991,7 @@ if [ "$(ls "${mount_point}" 2>/dev/null)" ] || \
fusermount"${fuse_version}" -uz "${overlayfs_dir}"/merged 2>/dev/null || \ fusermount"${fuse_version}" -uz "${overlayfs_dir}"/merged 2>/dev/null || \
umount --lazy "${overlayfs_dir}"/merged 2>/dev/null umount --lazy "${overlayfs_dir}"/merged 2>/dev/null
rm -rf "${overlayfs_dir}" "${OLD_PWD}"/conty_update_temp rm -rf "${overlayfs_dir}" "${conty_update_temp_dir}"
clear clear
echo "Conty has been updated!" echo "Conty has been updated!"
@ -1058,21 +1022,80 @@ if [ "$(ls "${mount_point}" 2>/dev/null)" ] || \
if [ "${NVIDIA_HANDLER}" = 1 ]; then if [ "${NVIDIA_HANDLER}" = 1 ]; then
if [ -f /sys/module/nvidia/version ] || lsmod | grep nvidia 1>/dev/null; then if [ -f /sys/module/nvidia/version ] || lsmod | grep nvidia 1>/dev/null; then
if [ -f "${nvidia_drivers_dir}"/lock ]; then
echo "Nvidia driver is currently installing"
echo "Please wait a moment and run Conty again"
exit 1
fi
if mount_overlayfs; then if mount_overlayfs; then
show_msg "Nvidia driver handler is enabled" show_msg "Nvidia driver handler is enabled"
unset nvidia_skip_install
unset nvidia_driver_version
if [ -f /sys/module/nvidia/version ]; then
nvidia_driver_version="$(cat /sys/module/nvidia/version)"
fi
if [ -z "${nvidia_driver_version}" ]; then
sys_lib_dirs="/usr/lib64 \
/usr/lib \
/usr/lib/x86_64-linux-gnu/nvidia/current \
/usr/lib/x86_64-linux-gnu"
for dir in ${sys_lib_dirs}; do
if [ "$(ls ${dir}/libGLX_nvidia.so.*.* 2>/dev/null)" ]; then
nvidia_driver_version="$(basename ${dir}/libGLX_nvidia.so.*.* | tail -c +18)"
break
fi
done
fi
if [ -z "${nvidia_driver_version}" ] && nvidia-smi &>/dev/null; then
nvidia_driver_version="$(nvidia-smi --query-gpu=driver_version --format=csv,noheader)"
fi
if [ -z "${nvidia_driver_version}" ] && modinfo nvidia &>/dev/null; then
nvidia_driver_version="$(modinfo -F version nvidia 2>/dev/null)"
fi
if [ "$(ls "${mount_point}"/usr/lib/libGLX_nvidia.so.*.* 2>/dev/null)" ]; then
container_nvidia_version="$(basename "${mount_point}"/usr/lib/libGLX_nvidia.so.*.* | tail -c +18)"
fi
if [ -f "${nvidia_drivers_dir}"/current-nvidia-version ] && \ if [ -f "${nvidia_drivers_dir}"/current-nvidia-version ] && \
[ ! "$(ls "${overlayfs_dir}"/up 2>/dev/null)" ]; then [ ! "$(ls "${overlayfs_dir}"/up 2>/dev/null)" ]; then
rm -f "${nvidia_drivers_dir}"/current-nvidia-version rm -f "${nvidia_drivers_dir}"/current-nvidia-version
fi fi
mkdir -p "${nvidia_drivers_dir}" if [ -z "${nvidia_driver_version}" ] || [ "${nvidia_driver_version}" = "" ]; then
export -f nvidia_driver_handler echo "Unable to determine Nvidia driver version"
DISABLE_NET=0 QUIET_MODE=1 run_bwrap --tmpfs /tmp --tmpfs /var --tmpfs /run \ rm -f "${nvidia_drivers_dir}"/current-nvidia-version
--bind-try /usr/lib /tmp/hostlibs \ nvidia_skip_install=1
--bind-try /usr/lib64 /tmp/hostlibs \ fi
--bind "${nvidia_drivers_dir}" "${nvidia_drivers_dir}" \
bash -c nvidia_driver_handler if [ "${nvidia_driver_version}" = "${container_nvidia_version}" ]; then
rm -f "${nvidia_drivers_dir}"/current-nvidia-version
nvidia_skip_install=1
fi
if [ "$(cat "${nvidia_drivers_dir}"/current-nvidia-version 2>/dev/null)" = "${nvidia_driver_version}" ]; then
nvidia_skip_install=1
fi
if [ -z "${nvidia_skip_install}" ]; then
mkdir -p "${nvidia_drivers_dir}"
echo > "${nvidia_drivers_dir}"/lock
export nvidia_driver_version
export -f nvidia_driver_handler
DISABLE_NET=0 QUIET_MODE=1 run_bwrap --tmpfs /tmp --tmpfs /var --tmpfs /run \
--bind "${nvidia_drivers_dir}" "${nvidia_drivers_dir}" \
bash -c nvidia_driver_handler
rm -f "${nvidia_drivers_dir}"/lock
fi
else else
echo "Nvidia driver handler disabled due to unionfs errors" echo "Nvidia driver handler disabled due to unionfs errors"
unset NVIDIA_HANDLER unset NVIDIA_HANDLER