DistroAV / DistroAV

DistroAV (formerly OBS-NDI): NDI integration for OBS Studio
https://distroav.org/
GNU General Public License v2.0
3.24k stars 360 forks source link

[Bug]: Linux symlink missing from libndi-get.sh #949

Open RayneYoruka opened 9 months ago

RayneYoruka commented 9 months ago

Operating System Version

Linux mint 21 / Ubuntu 22.04

OBS Version

30.x

NDI Tools Version

No response

Describe the bug

Obs fails to load the NDI runtime in a clean distro install after running the libndi-get.sh script

Obs loading log: [obs-ndi] load_ndilib: Trying '/usr/lib/libndi.so.5' [obs-ndi] load_ndilib: Trying '/usr/local/lib/libndi.so.5'

After you run the libndi-get.sh it leaves the libraries on /tmp/ndisdk/lib/x86_64-linux-gnu/ ,

sudo ln -s /tmp/ndisdk/lib/x86_64-linux-gnu/libndi.so /usr/lib/libndi.so.5 sudo ln -s /tmp/ndisdk/lib/x86_64-linux-gnu/libndi.so /usr/local/lib/libndi.so.5

Adding a symlink from the tmp files might not be the best practice, perhaps moving them to the folder that OBS is trying to load them from?

This might be the best to add to the libndi script to streamline the install for Linux users

Steps to reproduce

Clean distro install, obs via repository, dpkg obs-ndi 4.13

Expected behavior

No response

Screenshots

No response

Additional context

No response

luisalvarado commented 9 months ago

Oh, no wonder. Was having the same issue but had no idea how to properly report it.

paulpv commented 9 months ago

@RayneYoruka How was libndi-get.sh run? By design, if you just run it with no parameters then all it does is literally "get" the libndi and extract it into a tmp folder. If you want to install it you have to run libndi-get.sh install

https://github.com/obs-ndi/obs-ndi/blob/master/CI/libndi-get.sh

if [ "$1" == "install" ]; then
    sudo cp -P /tmp/ndisdk/lib/x86_64-linux-gnu/* /usr/local/lib/
    sudo ldconfig

    echo "libndi installed to /usr/local/lib"
    ls -la /usr/local/lib/libndi*
    echo
fi

install copies the files to /usr/local/lib/ I don't see any need to symlink any files.

And yes, it leaves the tmp folder there; it would not make sense to "get" libndi and then delete it. User is responsible to deleting tmp on an as needed basis.

libndi-get.sh is just a simple script that is really just an example of how to get this working on most Linux systems. If something is unique to a distribution then a user is free to update the script and/or create a PR.

RayneYoruka commented 9 months ago

@RayneYoruka How was libndi-get.sh run? By design, if you just run it with no parameters then all it does is literally "get" the

sudo ./libndi-get.sh

Altho maybe it's worth trying with "sudo bash libndi-get.sh" there is some debate of what's the best way to run the scripts...

paulpv commented 9 months ago

@RayneYoruka How was libndi-get.sh run? By design, if you just run it with no parameters then all it does is literally "get" the

sudo ./libndi-get.sh

Altho maybe it's worth trying with "sudo bash libndi-get.sh" there is some debate of what's the best way to run the scripts...

If sudo ./libndi-get.sh is the only thing run, then this is working as expected. Again, sudo ./libndi-get.sh just literally "gets" the lib and leaves it in the tmp folder for the user to do whatever they want with it. If the user wants to install libndi they need to sudo ./libndi-get.sh install.

RayneYoruka commented 9 months ago

This should be added to the wiki / main page, it will avoid confusion!

luisalvarado commented 9 months ago

@RayneYoruka How was libndi-get.sh run? By design, if you just run it with no parameters then all it does is literally "get" the

sudo ./libndi-get.sh

Altho maybe it's worth trying with "sudo bash libndi-get.sh" there is some debate of what's the best way to run the scripts...

I ran it like this also.

paulpv commented 9 months ago

This should be added to the wiki / main page, it will avoid confusion!

image

Maybe. The libndi-get.sh is just my variation of Palakis' original https://github.com/obs-ndi/obs-ndi/commits/4d83c22d7ad4eefde7d259e6ad11b9e5a68e17f2/CI/package-ubuntu.sh

Even before I ever got involved in this project I always just looked at that script as an example of how to get libndi onto a Linux system. NDI/NewTek does not really make this very easy for Linux.

The libndi-get.sh script was never intended to be a "supported product". It is just an example. The script is simple and I always assumed that any Linux user that is going to sudo some random script would first look at it. The contents of the script are simple and self explanatory. Someone can tweak its intention however they want to install on their system.

I would not want to make any presumptions or indicate that the script as written is the one and only way to install libndi on all Linux systems.

I intentionally left these brittle steps vague so that others can tinker with it and figure it out on their own. I also intentionally did not want it to default to installing the libs. If someone wants to alter their system they have to intentionally specify the install parameter knowing what it does based on the contents of the script.

I consider Linux a fairly expert system. Experts should look at and understand a script before they blindly sudo it.

Just my opinion.

RayneYoruka commented 9 months ago

This should be changed on the install page or more people will come seeking help as the plugin being requested by obs needs to be put on X folder, it's best to not complicate things more.

I consider Linux a fairly expert system. Experts should look at and understand a script before they blindly sudo it. Just my opinion.

Sadly this is not true and it's best to not have this type of approach, regardless of the user skill, using sudo is almost the same as "run with admin", you can't expect everyone to learn everything about it unless they are veteran admins or even even sysadmins.

if [ "$1" == "install" ]; then
    sudo cp -P /tmp/ndisdk/lib/x86_64-linux-gnu/* /usr/local/lib/
    sudo ldconfig

    echo "libndi installed to /usr/local/lib"
    ls -la /usr/local/lib/libndi*
    echo
fi

You cannot expect people to read the code and figure out that it won't install the libs unless ran with "install" when the script is put in the github as "download and install", it's misleading, and even less to expect people to know bash scripting.

RayneYoruka commented 4 months ago

Okay so I'm gonna update this since we're "delayed".. (I mean since we can't release 6.0.0)

The script libndi-get.sh was updated and fixed but the .deb package still points to the old /usr/lib/libndi.so.5 and /usr/local/lib/libndi.so.5 ...

My "temporary fix" before would work because the files "were" kept in /tmp/ and that was defintiely not the way to go so here is the next "fix" with the new ndi6 locations:

sudo ln -s /usr/local/lib/libndi.so.6 /usr/lib/libndi.so.5 sudo ln -s /usr/local/lib/libndi.so.6 /usr/local/lib/libndi.so.5

notGabo commented 4 months ago

Okay so I'm gonna update this since we're "delayed".. (I mean since we can't release 6.0.0)

The script libndi-get.sh was updated and fixed but the .deb package still points to the old /usr/lib/libndi.so.5 and /usr/local/lib/libndi.so.5 ...

My "temporary fix" before would work because the files "were" kept in /tmp/ and that was defintiely not the way to go so here is the next "fix" with the new ndi6 locations:

sudo ln -s /usr/local/lib/libndi.so.6 /usr/lib/libndi.so.5 sudo ln -s /usr/local/lib/libndi.so.6 /usr/local/lib/libndi.so.5

Hi! This works on my machine, thanks!

thejoelpatrol commented 4 months ago

Okay so I'm gonna update this since we're "delayed".. (I mean since we can't release 6.0.0)

The script libndi-get.sh was updated and fixed but the .deb package still points to the old /usr/lib/libndi.so.5 and /usr/local/lib/libndi.so.5 ...

My "temporary fix" before would work because the files "were" kept in /tmp/ and that was defintiely not the way to go so here is the next "fix" with the new ndi6 locations:

sudo ln -s /usr/local/lib/libndi.so.6 /usr/lib/libndi.so.5 sudo ln -s /usr/local/lib/libndi.so.6 /usr/local/lib/libndi.so.5

Thank you, this is what I needed. libndi 6 is installed, but obs-ndi is apparently looking for 5. I wish the error popup were more explicit about the exact file it can't find.

Trouffman commented 3 months ago

Update for everyone with this issue : This is fixed int he develop branch already. https://github.com/DistroAV/DistroAV/blob/develop/CI/libndi-get.sh

Waiting for the new release to have this available.

khimoc97 commented 3 months ago

I create this issue https://github.com/DistroAV/DistroAV/issues/1038 and also try with @RayneYoruka suggestion and I still got NDI Runtime not found issue :(

khimoc97 commented 3 months ago

Oh nvm, I tried this https://github.com/DistroAV/DistroAV/issues/949#issuecomment-2143513159 and it's working now

cue108 commented 3 months ago

I fixed the wrong symlink statement in #1040