Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 644694

Summary: media-tv/plex-media-server-1.10.0 registers its .so files in ldconfig
Product: Gentoo Linux Reporter: wyvern5
Component: Current packagesAssignee: Jonathan Vasquez (RETIRED) <fearedbliss>
Status: RESOLVED FIXED    
Severity: normal    
Priority: Normal    
Version: unspecified   
Hardware: All   
OS: Linux   
See Also: https://bugs.gentoo.org/show_bug.cgi?id=646162
Whiteboard:
Package list:
Runtime testing required: ---

Description wyvern5 2018-01-15 21:02:27 UTC
Desired behavior:
- Install Plex. Plex uses its own libraries, and nothing else does.

Actual behavior:
- Install Plex. Plex's libraries are made available for anyone to link against, leading to crashes when those libraries are actually used.

It seems really bad to have plex basically offer its own little mini-OS worth of libraries to the entire system. I definitely don't want plex's libexpat, for instance. I found this when it caused the python interpreter to crash because `imageio` was loading plex's copy of `libfreeimage.so`, which did not play well.

# ldconfig -p | grep plexmedia
        libz.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libz.so.1
        libxslt.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libxslt.so.1
        libxml2.so.2 (libc6,x86-64) => /usr/lib64/plexmediaserver/libxml2.so.2
        libva.so.2 (libc6,x86-64) => /usr/lib64/plexmediaserver/libva.so.2
        libva-drm.so.2 (libc6,x86-64) => /usr/lib64/plexmediaserver/libva-drm.so.2
        libusb-1.0.so.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libusb-1.0.so.0
        libucsi.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libucsi.so
        libtag.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libtag.so.1
        libswscale.so.4 (libc6,x86-64) => /usr/lib64/plexmediaserver/libswscale.so.4
        libssl.so.1.0.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libssl.so.1.0.0
        libsqlite3.so.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libsqlite3.so.0
        libsoci_sqlite3.so.3.0.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libsoci_sqlite3.so.3.0.0
        libsoci_core.so.3.0.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libsoci_core.so.3.0.0
        libpython2.7.so.1.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libpython2.7.so.1.0
        libpion-5.0.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libpion-5.0.so
        libopencv_imgproc.so.2.4 (libc6,x86-64) => /usr/lib64/plexmediaserver/libopencv_imgproc.so.2.4
        libopencv_core.so.2.4 (libc6,x86-64) => /usr/lib64/plexmediaserver/libopencv_core.so.2.4
        libnatpmp.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libnatpmp.so.1
        libminizip.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libminizip.so.1
        libminiupnpc.so.10 (libc6,x86-64) => /usr/lib64/plexmediaserver/libminiupnpc.so.10
        liblrc.so.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/liblrc.so.0
        libjemalloc.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libjemalloc.so.1
        libiconv.so.2 (libc6,x86-64) => /usr/lib64/plexmediaserver/libiconv.so.2
        libhdhomerun.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libhdhomerun.so
        libgnsdk_video.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_video.so.3.07.7
        libgnsdk_tocgen.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_tocgen.so.3.07.7
        libgnsdk_submit.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_submit.so.3.07.7
        libgnsdk_storage_sqlite.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_storage_sqlite.so.3.07.7
        libgnsdk_rhythm.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_rhythm.so.3.07.7
        libgnsdk_playlist.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_playlist.so.3.07.7
        libgnsdk_musicid_stream.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_musicid_stream.so.3.07.7
        libgnsdk_musicid_match.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_musicid_match.so.3.07.7
        libgnsdk_musicid_file.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_musicid_file.so.3.07.7
        libgnsdk_musicid.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_musicid.so.3.07.7
        libgnsdk_moodgrid.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_moodgrid.so.3.07.7
        libgnsdk_manager.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_manager.so.3.07.7
        libgnsdk_lookup_localstream.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_lookup_localstream.so.3.07.7
        libgnsdk_lookup_local.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_lookup_local.so.3.07.7
        libgnsdk_link.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_link.so.3.07.7
        libgnsdk_fp.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_fp.so.3.07.7
        libgnsdk_dsp.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_dsp.so.3.07.7
        libgnsdk_correlates.so.3.07.7 (libc6,x86-64) => /usr/lib64/plexmediaserver/libgnsdk_correlates.so.3.07.7
        libfreeimage.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libfreeimage.so
        libexslt.so.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libexslt.so.0
        libexpat.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libexpat.so.1
        libesg.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libesg.so
        libdvbsec.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libdvbsec.so
        libdvben50221.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libdvben50221.so
        libdvbcfg.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libdvbcfg.so
        libdvbapi.so (libc6,x86-64) => /usr/lib64/plexmediaserver/libdvbapi.so
        libdrm_intel.so.1 (libc6,x86-64) => /usr/lib64/plexmediaserver/libdrm_intel.so.1
        libdrm.so.2 (libc6,x86-64) => /usr/lib64/plexmediaserver/libdrm.so.2
        libcurl.so.4 (libc6,x86-64) => /usr/lib64/plexmediaserver/libcurl.so.4
        libcrypto.so.1.0.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libcrypto.so.1.0.0
        libboost_timer.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_timer.so.1.59.0
        libboost_thread.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_thread.so.1.59.0
        libboost_system.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_system.so.1.59.0
        libboost_regex.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_regex.so.1.59.0
        libboost_random.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_random.so.1.59.0
        libboost_program_options.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_program_options.so.1.59.0
        libboost_locale.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_locale.so.1.59.0
        libboost_iostreams.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_iostreams.so.1.59.0
        libboost_filesystem.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_filesystem.so.1.59.0
        libboost_date_time.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_date_time.so.1.59.0
        libboost_chrono.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_chrono.so.1.59.0
        libboost_atomic.so.1.59.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libboost_atomic.so.1.59.0
        libavutil.so.55 (libc6,x86-64) => /usr/lib64/plexmediaserver/libavutil.so.55
        libavformat.so.57 (libc6,x86-64) => /usr/lib64/plexmediaserver/libavformat.so.57
        libavcodec.so.57 (libc6,x86-64) => /usr/lib64/plexmediaserver/libavcodec.so.57
        libargtable2.so.0 (libc6,x86-64) => /usr/lib64/plexmediaserver/libargtable2.so.0
Comment 1 Jonathan Vasquez (RETIRED) gentoo-dev 2018-01-19 02:07:18 UTC
Thanks for reporting this, I'll get to it when I get a chance. If you can submit patches, that would expedite this process.
Comment 2 wyvern5 2018-01-24 15:38:40 UTC
Simply commenting out the LDPATH line (the only line) in /etc/env.d/66plex and running env-update solved the issue for me. 

With or without that change, revdep-rebuild still thinks that plex-media-server needs to be rebuilt.
Comment 3 Dudu Edri 2018-01-28 19:14:54 UTC
Can confirm that commenting out LDPATH in /etc/env.d/66plex solves the registration of plex's libraries to the entire system.

There one more problem - revdep-rebuild tells that several libraries search for "libdb-4.8.so", and a rebuild doesn't help:
 * Broken files that require: libdb-4.8.so (64 bits)
        * /usr/lib64/plexmediaserver/Resources/Python/lib/python2.7/lib-dynload/_bsddb.so
        * /usr/lib64/plexmediaserver/Resources/Python/lib/python2.7/lib-dynload/dbm.so


ldd's output for one of the files:

ldd: warning: you do not have execution permission for `/usr/lib64/plexmediaserver/Resources/Python/lib/python2.7/lib-dynload/dbm.so'
        linux-vdso.so.1 (0x00007ffe80df0000)
        libdb-4.8.so => not found
        libpython2.7.so.1.0 => /usr/lib64/libpython2.7.so.1.0 (0x00007fec15a96000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fec15876000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fec154b4000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fec152b0000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007fec150ad000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fec14d63000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fec16074000)


Those file aren't being linked against the correct library (actually, they aren't being compiled locally, they are just extracted from a DEB package - so that's why a rebuild doesn't help).
Comment 4 Jonathan Vasquez (RETIRED) gentoo-dev 2018-01-28 23:12:52 UTC
Hey folks,

I've fixed and tested the issue with your fix. Seems good. I pushed it in

https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=45282acdcd2bfdb74d8d74ebc712b4cddeadd2e9

That also stabilizes 1.10.1.

As for the other issue, you could open another bug report if you want, I am aware of that issue but it hasn't caused any issues with other applications and at this point I consider it cosmetic. It probably would be more complicated to try and split this from being packaged by upstream vs use rebuilding it. Due to this, I don't feel I want to spend time trying to do this, and I would also like to stay close to upstream. Hopefully as we move towards a more containerized future, these issues wouldn't pop up (Since with containers, upstream is free-to & encouraged to package all of their stuff in their own container).

- Jonathan