Acontece que eu (mal?) configurou apparmor para plexmediaplayer meses atrás, o que causou o problema ao atualizar e recompilar.
Estou tentando instalar o plexmediaplayer a partir do código-fonte. Isso envolve compilar o libmpv.so.1 que eu fiz e instalei em / usr / local / lib
Quando eu executo o plexmediaplayer, recebo o seguinte erro:
$ plexmediaplayer
plexmediaplayer: error while loading shared libraries: libmpv.so.1: cannot open shared object file: No such file or directory
O ldconfig encontra a biblioteca corretamente:
$ ldconfig -v | grep libmpv
libmpv.so.1 -> libmpv.so.1.24.0
ldd no binário plexmiediaplayer mostra a libmpv:
$ ldd plexmediaplayer | grep libmpv
libmpv.so.1 => /usr/local/lib/libmpv.so.1 (0x00007f2fe4f33000)
que é um link simbólico:
ls -l /usr/local/lib/libmpv.so.1
lrwxrwxrwx 1 root root 16 Feb 9 20:37 /usr/local/lib/libmpv.so.1 -> libmpv.so.1.24.0
o objeto compartilhado e o executável são compilados para x86_64 e legíveis pelo usuário não-root que está tentando executar o plexmediaplayer:
$ file /usr/local/lib/libmpv.so.1.24.0
/usr/local/lib/libmpv.so.1.24.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=855d9cbf952c76e3c0c1c1a162c4c94ea5a12b91, not stripped
$ file /usr/local/bin/plexmediaplayer
/usr/local/bin/plexmediaplayer: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=dc92ac026c5ac7bc3e5554a591321de81a3f4576, not stripped
Ambos correspondem ao arco da minha máquina:
$ uname -a
Linux hostname 4.4.0-66-generic #87-Ubuntu SMP Fri Mar 3 15:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
O strace em execução no plexmediaplayer fornece o seguinte:
$ strace -o lotsalogs -ff -e trace=file plexmediaplayer
open("/opt/Qt5.8.0/5.8/gcc_64//lib/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/Qt5.8.0/5.8/gcc_64//lib/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/Qt5.8.0/5.8/gcc_64//lib/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/opt/Qt5.8.0/5.8/gcc_64//lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/local/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
open("/lib/x86_64-linux-gnu/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
Que inclui:
open("/usr/local/lib/libmpv.so.1", O_RDONLY|O_CLOEXEC) = -1 EACCES (Permission denied)
mas as permissões no arquivo por meio do link simbólico são:
ls -l /usr/local/lib/libmpv.so.1.24.0
-rwxr-xr-x 1 root root 27872856 Mar 22 22:17 /usr/local/lib/libmpv.so.1.24.0
Alguma idéia de por que isso não pode ser encontrado pelo meu binário?
EDIT: Limpei todos os libmpv em /usr/local/lib
e plexmediaplayer em /usr/local/bin
e removi pelo diretório de origem, depois reinstalei lado a lado em uma VM. A compilação na VM funcionou, a da minha máquina host não funcionou. Eu também usei o hash em ambas as máquinas e (sem surpresa) elas combinam.
Consegui contornar este problema executando sudo cp /usr/local/lib/libmpv*.so /usr/lib32
ldd plexmediaplayer
mostrou o mesmo e apesar das libs estarem lá, eles não estavam trabalhando.
Tags dynamic-linking ld