Frogging-Family / nvidia-all

Nvidia driver latest to 396 series AIO installer
768 stars 69 forks source link

Error in package_nvidia-dev-utils-tkg() #60

Closed pkejval closed 2 years ago

pkejval commented 2 years ago

When I'm building from path /home/<user>/source/nvidia-all I got error: ln: failed to create symbolic link '/home/<user>.so': Permission denied

But when I move git repo from /home/<user>/source/nvidia-all to /home/<user>/nvidia-all build is working. I was building from my source folder for months. Now it's not working from it.

sogens commented 2 years ago

having the exact same issue...

jnines commented 2 years ago

Same issue with 470.74, had the same issue with the previous version. The issue appears to be with 3e05cde. Commenting out the vulkan-producer block allows for compile/install. Obviously not useful if you require whatever that does (CUDA maybe?).

jnines commented 2 years ago

So I maybe found the issue. On line 330 of the PKGBUILD there's a function

_create_links() {
  # create missing soname links
  for _lib in $(find "$pkgdir" -name '*.so*' | grep -v 'xorg/'); do
    # Get soname/base name
    _soname=$(dirname "$_lib")/$(readelf -d "$_lib" | grep -Po 'SONAME.*: \[\K[^]]*' || true)
    _base=$(echo "$_soname" | sed -r 's/(.*).so.*/\1.so/')

    # Create missing links
    [ -e "$_soname" ] || ln -s $(basename "$_lib") "$_soname"
    [ -e "$_base" ] || ln -s $(basename "$_soname") "$_base"
  done
}

This is called at the end of each grouping. It runs readelf -d and greps for SONAME in the results. For whatever reason (not my area of expertise) libnvidia-vulkan-producer doesn't have a SONAME entry listed, so it appears it errors out. I just commented it out as I don't install egl_wayland and it appears that it requires it (NEEDED) Shared library: [libnvidia-egl-wayland.so.1]. You could just change it to

_create_links() {
  # create missing soname links
  for _lib in $(find "$pkgdir" -name '*.so*' | grep -v 'xorg/'); do
    # Get soname/base name
    if [[ $_lib != *libnvidia-vulkan-producer.* ]]; then
      _soname=$(dirname "$_lib")/$(readelf -d "$_lib" | grep -Po 'SONAME.*: \[\K[^]]*' || true)
      _base=$(echo "$_soname" | sed -r 's/(.*).so.*/\1.so/')

      # Create missing links
      [ -e "$_soname" ] || ln -sv $(basename "$_lib") "$_soname"
      [ -e "$_base" ] || ln -sv $(basename "$_soname") "$_base"
    fi
  done
}

Probably something off there but... This driver also seems to cause a small issue with sddm.

Tk-Glitch commented 2 years ago

While I cannot reproduce the issue on my end, @jnines is right. That file doesn't have a SONAME entry. I'm fine with the proposed workaround.