NVIDIA: Just have one consistent script.

We now need to stick with this. I think this is truly the most
user-friendly approach while giving a decent amount of flexibility to
users. They can now mix and match via options. With manifest versions,
we can update them if NVIDIA adds more libraries or takes them away. It
also seems like most symlinks aren't necessary. Since optional symlinks
would take quite a while to implement, this does the trick. The install
script is also now POSIX compliant and can be ran with Dash. The
uninstall script still needs to be adapated for POSIX, but at the very
least, we have a Bash shebang for that script.

Why not create the install script manually in the book? It's pretty big
and would cause the NVIDIA page to balloon and it should really be as
short as possible. Anyhow, I'm sticking with this. I'm going to do a
rebuild soon so I'll found out pretty soon if it is borked or not. I did
run it on a most clean system. There was still some old NVIDIA cruft
lying around though, but find didn't reveal much. Anyhow, it seemed to
work just fine. Plasma 6 X11 and Wayland worked, GLX+EGL works on both
instances. Wayland Plasma still is pretty slow unfortunately and I don't
know why. 165 fps on X11 drops to not much higher than 60 which is a
huge drop-off.

And a notice: The rebuild I mentioned will be for my main system and I
will rely on the NVIDIA driver from now on, so NVIDIA updates will be
handled by me unless someone like Tox wants to step in. Though I got it
covered unless NVIDIA pulls another magic trick and bricks something
related to the kernel. I'm just glad they don't seem to brick userspace
like Mesa is doing with Zink+NVK.
This commit is contained in:
Zeckmathederg
2025-06-14 19:19:07 -06:00
parent bc49069e43
commit 1cb00ded5b
6 changed files with 556 additions and 750 deletions

View File

@ -0,0 +1,337 @@
#!/bin/sh
# Script to install the NVIDIA driver for GLFS.
# By Zeckma <zeckma.tech@gmail.com>
# 2025-06-14
MANIFEST_VERSION=1
OPENCL_VERSION="1.0.0"
NVVM70_VERSION="4"
MANDATORY_64=1 MANDATORY_32=1
X11_64=1 X11_32=1
EGL_64=1 EGL_32=1
GLESV2_64=1 GLESV2_32=1
VULKAN=1 VULKAN_EGL=0
VDPAU_64=1 VDPAU_32=1
OPENCL_64=1 OPENCL_32=1
CUDA_64=1 CUDA_32=1
NGX=1
NV_RT=1
NV_SETTINGS=1
NV_XCONF=1
NV_SMI=1
#NV_SYMLINKS=1
DESTDIR= PREFIX=/usr NV_X_RUN_DIR=$PWD
while [ $# -gt 0 ]; do
case "$1" in
--no-mandatory-64bit ) MANDATORY_64=0 ;;
--no-mandatory-lib32 ) MANDATORY_32=0 ;;
--no-x11-64bit ) X11_64=0 ;;
--no-x11-lib32 ) X11_32=0 ;;
--no-egl-64bit ) EGL_64=0 ;;
--no-egl-lib32 ) EGL_32=0 ;;
--no-glesv2-64bit ) GLESV2_64=0 ;;
--no-glesv2-lib32 ) GLESV2_32=0 ;;
--no-vulkan ) VULKAN=0 ;;
--vulkan-use-egl ) VULKAN_EGL=1 ;;
--no-vdpau-64bit ) VDPAU_64=0 ;;
--no-vdpau-lib32 ) VDPAU_32=0 ;;
--no-opencl-64bit ) OPENCL_64=0 ;;
--no-opencl-lib32 ) OPENCL_32=0 ;;
--no-cuda-64bit ) CUDA_64=0 ;;
--no-cuda-lib32 ) CUDA_32=0 ;;
--no-ngx ) NGX=0 ;;
--no-raytracing ) NV_RT=0 ;;
--no-nvidia-settings ) NV_SETTINGS=0 ;;
--no-nvidia-xconfig ) NV_XCONF=0 ;;
--no-nvidia-smi ) NV_SMI=0 ;;
# --no-optional-symlinks ) NV_SYMLINKS=0 ;;
--destdir=* ) DESTDIR="${1#--destdir=}" ;;
--prefix=* ) PREFIX="${1#--prefix=}" ;;
--ex-run-dir=* ) NV_X_RUN_DIR="${1#--ex-run-dir=}" ;;
--manifest=* ) NV_MANIFEST="${1#--manifest=}" ;;
--help | -h )
echo "Usage: nvidia-install [OPTIONS]"
echo " --no-mandatory-64bit do not install the mandatory 64-bit"
echo " libraries"
echo " --no-mandatory-lib32 do not install the mandatory"
echo " lib32 libraries"
echo " --no-x11-64bit do not install the X11 64-bit libraries"
echo " --no-x11-lib32 do not install the X11 lib32 libraries"
echo " --no-egl-64bit do not install the EGL 64-bit libraries"
echo " --no-egl-lib32 do not install the EGL lib32 libraries"
echo " --no-glesv2-64bit do not install the GLESv2 64-bit libraries"
echo " --no-glesv2-lib32 do not install the GLESv2 lib32 libraries"
echo " --no-vulkan do not install the Vulkan ICD file"
echo " --vulkan-use-egl make the Vulkan driver use libEGL_nvidia"
echo " instead of libGLX_nvidia (this can cause"
echo " various crashes in X11 Vulkan apps,"
echo " including the Steam Proton compatibility"
echo " layer for Direct3D games)"
echo " --no-vdpau-64bit do not install the VDPAU 64-bit libraries"
echo " --no-vdpau-lib32 do not install the VDPAU lib32 libraries"
echo " --no-opencl-64bit do not install the OpenCL 64-bit loader"
echo " and driver"
echo " --no-opencl-lib32 do not install the OpenCL lib32 loader and"
echo " driver"
echo " --no-cuda-64bit do not install the CUDA compatibility 64-bit"
echo " libraries"
echo " --no-cuda-lib32 do not install the CUDA compatibility lib32"
echo " libraries"
echo " --no-ngx do not install NGX, which provides DLSS"
echo " --no-raytracing do not install the raytracing core and"
echo " engine"
echo " --no-nvidia-settings do not install nvidia-settings"
echo " --no-nvidia-xconfig do not install nvidia-xconfig"
echo " --no-nvidia-smi do not install nvidia-smi"
# Symlinking is not supported at the moment
#echo " --no-optional-symlinks do not install optional symlinks"
echo " --destdir=DESTDIR specify DESTDIR, not set by default"
echo " --prefix=PREFIX specify PREFIX, /usr set by default"
echo " --ex-run-dir=NVIDIA-XXX.XX.XX specify the extracted runfile directory"
echo " to install the libraries and configuration"
echo " files from, set as current working directory"
echo " by default"
echo " --manifest=manifest specify manifest file location,"
echo " PREFIX/share/nvidia/manifest set by default"
echo " -h, --help display this help and exit"
exit ;;
* ) echo "Unknown option: $1" ;;
esac
shift 1
done
if [ -z $NV_MANIFEST ]; then
NV_MANIFEST=$PREFIX/share/nvidia/manifest
fi
LIBDIR=$DESTDIR$PREFIX/lib
LIB32=$DESTDIR$PREFIX/lib32
BINDIR=$DESTDIR$PREFIX/bin
SHAREDIR=$DESTDIR$PREFIX/share
SYSCONFDIR=/etc
XDRIV=$LIBDIR/xorg/modules/drivers
XEXT=$LIBDIR/xorg/modules/extensions
NVWINEDIR=$LIBDIR/nvidia/wine
DOCDIR=$SHAREDIR/doc
EGLGLVNDDIR=$SHAREDIR/glvnd/egl_vendor.d
VKICDDIR=$SHAREDIR/vulkan/icd.d
XCONFD=$SYSCONFDIR/X11/xorg.conf.d
OPENCLICDDIR=$SYSCONFDIR/OpenCL/vendors
if [ ! -d $NV_X_RUN_DIR ]; then
echo "Directory $NV_X_RUN_DIR doesn't exist, cannot install software from it."
exit
fi
if [ ! -f $NV_MANIFEST ]; then
echo "$NV_MANIFEST doesn't exist, don't have a accurate file listing."
exit
fi
MANIFEST_FILE_VERSION=$(cat ${NV_MANIFEST} | grep manifest-version: | awk '{ print $2 }')
if [ $MANIFEST_FILE_VERSION != $MANIFEST_VERSION ]; then
echo "Manifest versions $MANIFEST_FILE_VERSION and $MANIFEST_VERSION do not"
echo "match and thus will lead to incompatibility. Install new script and"
echo "manifest file together."
exit
fi
NVIDIA_VERSION=$(cat $NV_X_RUN_DIR/README.txt | grep Version: | awk '{ print $5 }')
echo "Installing NVIDIA-$NVIDIA_VERSION..."
if [ $MANDATORY_64 = 1 ]; then
echo "Installing 64-bit mandatory software..."
mkdir -pv $BINDIR $LIBDIR/gbm $SHAREDIR/nvidia &&
for lib in $(cat $NV_MANIFEST | grep mandatory-64: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
ln -svf libnvidia-allocator.so.$NVIDIA_VERSION \
$LIBDIR/libnvidia-allocator.so.1 &&
ln -svrf $LIBDIR/libnvidia-allocator.so.1 \
$LIBDIR/gbm/nvidia-drm_gbm.so &&
install -vm4755 $NV_X_RUN_DIR/nvidia-modprobe \
$BINDIR &&
cp -v $NV_X_RUN_DIR/nvidia-application-profiles* \
$SHAREDIR/nvidia || exit
fi
if [ $MANDATORY_32 = 1 ]; then
echo "Installing lib32 mandatory software..."
mkdir -pv $LIB32/gbm &&
for lib in $(cat $NV_MANIFEST | grep mandatory-32: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32 || exit
done
ln -svf libnvidia-allocator.so.$NVIDIA_VERSION \
$LIB32/libnvidia-allocator.so.1 &&
ln -svrf $LIB32/libnvidia-allocator.so.1 \
$LIB32/gbm/nvidia-drm_gbm.so || exit
fi
if [ $X11_64 = 1 ]; then
echo "Installing 64-bit X11 libraries..."
mkdir -pv $XDRIV $XEXT $XCONFD &&
for lib in $(cat $NV_MANIFEST | grep x11-64: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
install -vm644 $NV_X_RUN_DIR/nvidia_drv.so $XDRIV &&
install -vm644 $NV_X_RUN_DIR/libglxserver_nvidia.so.$NVIDIA_VERSION \
$XEXT &&
ln -svf libglxserver_nvidia.so.$NVIDIA_VERSION \
/usr/lib/xorg/modules/extensions/libglxserver_nvidia.so &&
cp -v $NV_X_RUN_DIR/nvidia-drm-outputclass.conf $XCONFD || exit
fi
if [ $X11_32 = 1 ]; then
echo "Installing lib32 X11 libraries..."
mkdir -pv $LIB32 &&
for lib in $(cat $NV_MANIFEST | grep x11-32: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32 || exit
done
fi
if [ $EGL_64 = 1 ]; then
echo "Installing 64-bit EGL libraries..."
mkdir -pv $LIBDIR $EGLGLVNDDIR &&
for lib in $(cat $NV_MANIFEST | grep egl-64: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
cp -v $NV_X_RUN_DIR/10_nvidia.json $EGLGLVNDDIR || exit
fi
if [ $EGL_32 = 1 ]; then
echo "Installing lib32 EGL libraries..."
mkdir -pv $LIB32 &&
for lib in $(cat $NV_MANIFEST | grep egl-32: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32 || exit
done
fi
if [ $GLESV2_64 = 1 ]; then
echo "Installing 64-bit GLESv2 libraries..."
mkdir -pv $LIBDIR &&
for lib in $(cat $NV_MANIFEST | grep glesv2-64: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
fi
if [ $GLESV2_32 = 1 ]; then
echo "Installing lib32 GLESv2 libraries..."
mkdir -pv $LIB32 &&
for lib in $(cat $NV_MANIFEST | grep glesv2-32: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32 || exit
done
fi
if [ $VULKAN = 1 ]; then
echo "Installing the Vulkan ICD..."
mkdir -pv $VKICDDIR &&
cp -v $NV_X_RUN_DIR/nvidia_icd.json $VKICDDIR || exit
if [ $VULKAN_EGL = 1 ]; then
echo "Choosing EGL over GLX for Vulkan..."
sed -i 's/GLX/EGL/' $VKICDDIR/nvidia_icd.json || exit
fi
fi
if [ $VDPAU_64 = 1 ]; then
echo "Installing 64-bit VDPAU libraries..."
mkdir -pv $LIBDIR/vdpau &&
for lib in $(cat $NV_MANIFEST | grep vdpau-64: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR/vdpau || exit
done
fi
if [ $VDPAU_32 = 1 ]; then
echo "Installing lib32 VDPAU libraries..."
mkdir -pv $LIB32/vdpau &&
for lib in $(cat $NV_MANIFEST | grep vdpau-32: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32/vdpau || exit
done
fi
if [ $OPENCL_64 = 1 ]; then
echo "Installing 64-bit OpenCL libraries..."
mkdir -pv $LIBDIR $OPENCLICDDIR &&
for lib in $(cat $NV_MANIFEST | grep opencl-64: | cut -d':' -f2-); do
if [ $lib = "libOpenCL" ]; then
install -vm644 $NV_X_RUN_DIR/$lib.so.$OPENCL_VERSION $LIBDIR || exit
else
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
fi
done
cp -v $NV_X_RUN_DIR/nvidia.icd $OPENCLICDDIR || exit
fi
if [ $OPENCL_32 = 1 ]; then
echo "Installing lib32 OpenCL libraries..."
mkdir -pv $LIB32 &&
for lib in $(cat $NV_MANIFEST | grep opencl-32: | cut -d':' -f2-); do
if [ $lib = "libOpenCL" ]; then
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$OPENCL_VERSION $LIB32 || exit
else
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32 || exit
fi
done
fi
if [ $CUDA_64 = 1 ]; then
echo "Installing 64-bit CUDA libraries..."
mkdir -pv $LIBDIR &&
for lib in $(cat $NV_MANIFEST | grep cuda-64: | cut -d':' -f2-); do
if [ $lib = "libnvidia-nvvm70" ]; then
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVVM70_VERSION $LIBDIR || exit
else
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
fi
done
install -vm644 $NV_X_RUN_DIR/libnvidia-api.so.1 $LIBDIR &&
ln -svf libnvidia-api.so.1 $LIBDIR/libnvidia-api.so || exit
fi
if [ $CUDA_32 = 1 ]; then
echo "Installing lib32 CUDA libraries..."
mkdir -pv $LIB32 &&
for lib in $(cat $NV_MANIFEST | grep cuda-32: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/32/$lib.so.$NVIDIA_VERSION $LIB32 || exit
done
fi
if [ $NGX = 1 ]; then
echo "Installing NGX (DLSS) libraries..."
mkdir -pv $NVWINEDIR &&
for lib in $(cat $NV_MANIFEST | grep ngx: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
install -vm755 $NV_X_RUN_DIR/*nvngx*.dll $NVWINEDIR || exit
fi
if [ $NV_RT = 1 ]; then
echo "Installing raytracing libraries..."
mkdir -pv $SHAREDIR/nvidia $LIBDIR &&
for lib in $(cat $NV_MANIFEST | grep rt: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
install -vm755 $NV_X_RUN_DIR/nvoptix.bin $SHAREDIR/nvidia || exit
fi
if [ $NV_SETTINGS = 1 ]; then
echo "Installing nvidia-settings..."
mkdir -pv $SHAREDIR/applications $SHAREDIR/pixmaps $LIBDIR &&
for lib in $(cat $NV_MANIFEST | grep settings: | cut -d':' -f2-); do
install -vm644 $NV_X_RUN_DIR/$lib.so.$NVIDIA_VERSION $LIBDIR || exit
done
install -vm755 $NV_X_RUN_DIR/nvidia-settings $BINDIR &&
cp -v $NV_X_RUN_DIR/nvidia-settings.desktop $SHAREDIR/applications &&
cp -v $NV_X_RUN_DIR/nvidia-settings.png $SHAREDIR/pixmaps || exit
fi
if [ $NV_XCONF = 1 ]; then
echo "Installing nvidia-xconfig..."
install -vm755 $NV_X_RUN_DIR/nvidia-xconfig $BINDIR || exit
fi
if [ $NV_SMI = 1 ]; then
echo "Installing nvidia-smi..."
install -vm755 $NV_X_RUN_DIR/nvidia-smi $BINDIR || exit
fi
echo "Installing documentation..."
mkdir -pv $DOCDIR/nvidia-$NVIDIA_VERSION &&
cp -R $NV_X_RUN_DIR/html $DOCDIR/nvidia-$NVIDIA_VERSION || exit
echo "Running /sbin/ldconfig..."
/sbin/ldconfig &&
echo "Running /sbin/depmod -a..."
/sbin/depmod -a &&
echo "Installation of NVIDIA-$NVIDIA_VERSION complete!"

View File

@ -0,0 +1,18 @@
manifest-version: 1
mandatory-64: libnvidia-cfg libnvidia-eglcore libnvidia-glcore libnvidia-glsi libnvidia-glvkspirv libnvidia-gpucomp libnvidia-ml libnvidia-pkcs11 libnvidia-tls libnvidia-allocator
mandatory-32: libnvidia-eglcore libnvidia-glcore libnvidia-glsi libnvidia-glvkspirv libnvidia-gpucomp libnvidia-ml libnvidia-tls libnvidia-allocator
x11-64: libGLX_nvidia libnvidia-fbc
x11-32: libGLX_nvidia libnvidia-fbc
egl-64: libEGL_nvidia libnvidia-wayland-client
egl-32: libEGL_nvidia
glesv2-64: libGLESv2_nvidia
glesv2-32: libGLESv2_nvidia
vdpau-64: libvdpau_nvidia
vdpau-32: libvdpau_nvidia
opencl-64: libOpenCL libnvidia-opencl
opencl-32: libOpenCL libnvidia-opencl
cuda-64: libcuda libcudadebugger libnvidia-encode libnvidia-nvvm libnvidia-nvvm70 libnvidia-opticalflow libnvidia-ptxjitcompiler libnvcuvid
cuda-32: libcuda libnvidia-encode libnvidia-ptxjitcompiler libnvidia-nvvm libnvcuvid
ngx: libnvidia-ngx
rt: libnvidia-rtcore libnvoptix
settings: libnvidia-gtk3

View File

@ -40,6 +40,15 @@
</listitem>
-->
<listitem>
<para>June 14th, 2025</para>
<itemizedlist>
<listitem>
<para>[zeckma] - NVIDIA: Just have one consistent script.</para>
</listitem>
</itemizedlist>
</listitem>
<listitem>
<para>June 10th, 2025</para>
<itemizedlist>

View File

@ -154,6 +154,7 @@
NVIDIA driver version
listed was released -->
<!ENTITY nvidia-version "575.57.08">
<!ENTITY nv-manifest-version "1">
<!ENTITY spirv-version "&vulkan-version;.0">
<!ENTITY spirv-headers-version "&spirv-version;">
<!ENTITY spirv-tools-version "&spirv-version;">

File diff suppressed because it is too large Load Diff

View File

@ -56,6 +56,8 @@
or contains(@url, 'patch.txt') or contains(@url, '.zip')
or contains(@url, '.patch') or contains(@url, '/patch.'))
or contains (@url, '.run')
or contains(@url, 'install-NVIDIA')
or contains(@url, 'manifest-NVIDIA')
and not(ancestor-or-self::*/@condition = 'pdf')">
<xsl:choose>
<!-- Fix SourceForge links-->