Syncplay / syncplay

Client/server to synchronize media playback on mpv/VLC/MPC-HC/MPC-BE on many computers
http://syncplay.pl/
Apache License 2.0
2.11k stars 214 forks source link

Latest AppImage doesn't work on very old OS (Debian 9) #454

Closed sosie-js closed 3 years ago

sosie-js commented 3 years ago

Describe the bug when I trigger the AppImage , it crashes on python_mpv_jsonipc/python_mpv_jsonipc.py", line 239, in _start_process raise MPVError("MPV not started.") syncplay.vendor.python_mpv_jsonipc.python_mpv_jsonipc.MPVError: MPV not started.

To Reproduce when I trigger the AppImage we have the cause of the crash :
/usr/bin/mpv: /lib/x86_64-linux-gnu/libc.so.6: versionGLIBC_2.25' not found (required by /tmp/.mount_SyncplhInFF0/usr/lib/libbsd.so.0)`

Expected behavior debian9 should work too. this appimage is very restrictive as debian9 handles till GLIBC_2.24 else please indicate it this GliBC requirement as well python3.6 in your docs.

Version and platform:

Additional context Installing python and mixing testing with stable to get python3.9 and match the requirements 3.6 >= lead to have a frankendebian (https://unix.stackexchange.com/questions/332641/how-to-install-python-3-6) I though you would use a snap package or provide direct binary.

sosie-js commented 3 years ago

Do we really need libbsd??

daniel-123 commented 3 years ago

debian9 should work too.

Debian 9 has been out of mainstream support for over a year now and only receives limited LTS updates. We don't really test it any more.

I though you would use a snap package or provide direct binary.

AppImage is supposed to serve that purpose. We were also building snap images for a while, but they turned out to be quite troublesome and with recent versions we literally couldn't manage to get an image that would not instantly crash on at least some of our test systems.

AppImage (and other similar packaging methods) in our experience require a fair bit of manual tuning to ensure that they actually work consistently in varied environments. Putting actual requirements that those have might not be feasible due to just how many edge cases there are.

Going back to actual core issue you noticed - libbsd is actually a dependency of libxdmcp6, which is a dependency of libxcb1. Lack of libxcb1 causes AppImage to crash when trying to display the QT GUI (see #380) and thus we statically embed it directly from Ubuntu 18.04 LTS that we build the AppImage on. This might be a clue as to why it specifically requires higher glibc version than what's present in Debian 9 or its direct derivatives.

Could you test an AppImage without libxcb1 bundled? It's available for download as artifact from this older action. Maybe that will shed some light on whether this is something potentially easy or hard to fix.

daniel-123 commented 3 years ago

I've dug around a bit and ultimately the issue here is that the environment that AppImage is being built on basically sets the lowest floor in terms of required versions of low-level libraries. And the oldest environment available in Github actions is Ubuntu 18.04 we already use - support for Ubuntu 16.04 has been withdrawn along with its mainstream support ending in April 2021.

I think that the issue is ultimately that supporting systems as old as Debian 9, which is rapidly approaching being two versions behind latest Debian release (as version 11 is imminent), is just not feasible with limited amount of resources we have.

Last version of Syncplay which mostly matches what's available in Debian 9 could be 1.5.5 (still on Python 2) or 1.6.5 which is last version requiring Python 3.4+ rather than 3.6+.

Until somebody shows that there exists a reasonable way to solve this issue, I'm tentatively marking it as won't fix.

daniel-123 commented 3 years ago

I've only noticed it after @albertosottile pointed it out - Isn't it mpv that requires higher GLIBC? If that's the case the entire issue is moot and isn't even about Syncplay in first place:

/usr/bin/mpv: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.25' not found (required by /tmp/.mount_SyncplhInFF0/usr/lib/libbsd.so.0)

Could you confirm that mpv binary you have actually works?

sosie-js commented 3 years ago

@daniel-123 , WoW that is a master response mine will be : -I would like to thanks for your nice replies, -YES xcb is the bad duck (due to a missing lib utils on debian9) -YES mpv shipped 0.27 works. I checked just after the issue, so that means no it does not require higher GLIBC than 2.24 -YES I imagine dear daniel123, after having a look to the issues later (sorry), how it has been a pain to produce tha AppImage seems you package with anaconda to solve the python issue avoiding the frankendebian monster. -NO I will not give up debian9 users. In fact I solved the issue succeeding in compiling and fixing installation script I will provide. It will be 100% sure as the library installed by default depends on Linux distrib but give the hint for those who want to compile on other platforms and fill dependencies to make the gui appearing. Without the gui, I don't know how to select an user play. -NO 1.6.8 is last version requiring Python 3.6+ according to gdebi : syncplay-1 6 8-gdebi-requirements

daniel-123 commented 3 years ago

Thus far our general policy towards operating systems getting out of support was simply to direct people to old Syncplay releases. Thankfully Syncplay has very good backwards and forwards compatibility so even clients several years old should work just fine with current servers etc.

If you feel like it, you can post here your instructions how to work around this problem for people who really want current version of Syncplay on their old OS.

As far as version requirements specified in deb files - I'm afraid that this is just my own mistake. I forgot to change that requirement as it was introduced. So 1.6.6 and 1.6.7, while their deb packages don't have python 3.6+ listed as dependency they will not work with older python.

sosie-js commented 3 years ago

As far as version requirements specified in deb files - I'm afraid that this is just my own mistake. I forgot to change >that requirement as it was introduced. So 1.6.6 and 1.6.7, while their deb packages don't have python 3.6+ listed >as dependency they will not work with older python.

You are lucky, the bunny see all. Including the title of the windows version Capture du 2021-08-11 21-48-15 by the way path of the video does not accept youtube protocol, i think this is a bugs bunny.

If you feel like it, you can post here your instructions how to work around this problem for people who really want current version of Syncplay on their old OS.

#!/bin/sh
#
# Install syncplay on debian9 that ship python 3.5 (V1.0 - 11.08.2021)
#
# as suggested by the syncplay-1.6.8.deb on the dowload page it requires at least python 3.6
# so we upgrade the python to 3.7 (available as official in debian10)
# we do NOT USE testing respository that upgrades to 3.9 but leads to Frankendebian horror.
#  author github.com/sosie-js

# From https://mintguide.org/other/794-python-3-6-install-latest-version-into-linux-mint.html
# sudo timeshift --list --snapshot-device /dev/sda1
# create a snapshot with the gui timeshift ,OPTIONAL BUT RECOMMENDED, uncompment the next line
#sudo timeshift --create --comments "Backup before upgrading python" --tags D

# From https://gist.githubusercontent.com/dnavarrom/67c0cb45d8fc6abf98c5c8ce6653e0dd/raw/1126e428637539150a02b2f6aacda29865d8987d/install-python-3-pip-linux-mint-19.sh

##Step 1 : preconditions
#=========================
sudo apt-get install build-essential checkinstall
sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev \
    libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev 

#Step 2: download an unpack python
#==================================
cd /opt
sudo wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
sudo tar xzf Python-3.7.2.tgz

#Step 3 : compile new python
#===========================
cd Python-3.7.2
sudo ./configure --enable-optimizations
#use altinstall used to keep original python, if no python environment use sudo make install
make -j 4
sudo make altinstall 

#Step 4 : Declare it along distro version
#========================================
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/bin/python3.7 2

#Step5: switch temporarily to 3.7 
#==================================
sudo update-alternatives --set python3 /usr/local/bin/python3.7
sudo pip3.7 install --upgrade pip

#Step6: Compile syncplay
#=======================
sudo apt-get install git
cd /opt
git clone https://github.com/Syncplay/syncplay
cd syncplay
sudo pip3.7 install -r requirements.txt
sudo pip3.7 install -r requirements_GUI.txt
sudo make
sudo make install

#the given libqxcb of pyside is  /usr/local/lib/python3.7/site-packages/PySide2/Qt/plugins/platforms/libqxcb.so  
# which can not be replaced by sudo ln -s /usr/lib/x86_64-linux-gnu/qt5/plugins/platforms/libqxcb.so of package libqt5gui
# By  doing sudo apt-get install libqt5gui will led of missing symbols (I tried)
# libqxcb.so is in fact broken as one dependency is missing libxcb-util.so.1 
#The reason is that  libxcb-util0 provides libxcb-util.so.0 not libxcb-util.so.1
#but we can solve this by ugly symplink to make it happy
sudo ln -s /usr/lib/x86_64-linux-gnu/libxcb-util.so.0.0.0 /usr/lib/x86_64-linux-gnu/libxcb-util.so.1

#Step7:  avoid Frankendebian, switch back to the 3.5 official release (IMPORTANT!)
#=============================================================================
#https://askubuntu.com/questions/965043/no-module-named-lsb-release-after-install-python-3-6-3-from-source
sudo ln -s /usr/share/pyshared/lsb_release.py /usr/local/lib/python3.7/site-packages/lsb_release.py

#Cinnamon is perturbated when upgrading to non oficial python, apt and all related core python 
# too produce errors or refuse simply to launch, switch back to official compatible with python3-apt , python3-*
sudo update-alternatives --set python3 /usr/bin/python3.5

THAT'S ALL FOLKS!

daniel-123 commented 3 years ago

video does not accept youtube protocol

That's because for it to work you need youtube-dl in latest version.

sosie-js commented 3 years ago

That's because for it to work you need youtube-dl in latest version

Merci Daniel ! A popup suggesting to install it with sudo pip3 install youtube-dl could be the cherry on the top of the cake

sosie-js commented 3 years ago

Now I played the youtube on debian9, I hear the sound, the image is perfect On debian10, I have the video synced but with no sound, it is the last version mpv 0.33, I got as well video half cutted with green as if there were an encoding with ffmpeg in between. with vlc-wrapper, I got the youtube video but with no sound as well with vlc: black screen , no sound

SOLVED: when I set back python to 3.7 instead of 3.9 on debian10, then the video and sound is back after reboot conclusion: use the python version of the linux distributions to avoid sound problems.