Skip to content
Snippets Groups Projects
Commit 3ae631a9 authored by Simon McVittie's avatar Simon McVittie
Browse files

pressure-vessel: Look for internal Nvidia helper libraries by name

The Nvidia drivers have various helper libraries that get loaded as
dependencies. Some of them are hard dependencies via `DT_NEEDED`, but
others are loaded dynamically with `dlopen()`: for example,
at the time of writing, `libGLX_nvidia.so.0` has a `DT_NEEDED`
dependency on `libnvidia-glcore.so.VERSION` which is sufficient for
OpenGL, but dlopens `libnvidia-glvkspirv.so.VERSION` when asked to act
as a Vulkan driver.

Normally, we can find these libraries by their entry in
`soname_globs_even_if_older[]`, by using the `soname-match:` syntax
to search `/etc/ld.so.cache` for SONAMEs matching a glob pattern like
`libnvidia-glvkspirv.so.*`. This works because OS distributions normally
install these libraries into the default system library directory
`/usr/lib{,32,64}` or `/usr/lib/MULTIARCH`, which is indexed by
ldconfig(8).

However, when using Canonical's Snap apps, the Nvidia drivers can only
be found in the `LD_LIBRARY_PATH`, and `soname-match:` does not
implement `LD_LIBRARY_PATH` search. This leads to a situation similar
to https://github.com/ValveSoftware/steam-runtime/issues/632 where
these libraries are not found. The result is that the Nvidia Vulkan
driver is present, but fails to load.

If we can read `/sys/module/nvidia/version` (which Flatpak also relies
on as its way to discover the current Nvidia driver version), then we
can resolve this by looking for each of the known libraries by name.
This takes into account `LD_LIBRARY_PATH` and `DT_RUNPATH`, not just
the `ld.so.cache`. Making this effective will require a snapd change,
to make `/sys/module/nvidia/version` readable.

Helps: https://github.com/ValveSoftware/steam-runtime/issues/586


Signed-off-by: default avatarSimon McVittie <smcv@collabora.com>
parent 37c764a8
No related branches found
No related tags found
1 merge request!652pressure-vessel: Look for internal Nvidia helper libraries by name
Pipeline #75402 passed
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment