viernes, octubre 12, 2012

Instalando spotify en openSUSE (Actualización)

Hace poco menos de un año escribí esta entrada en el blog en la que explicaba como instalar spotify en openSUSE 12.1 y, bueno, tras instalar la 12.2 me he dado cuenta de que, algunas cosas han cambiado, por ejemplo, midnight commander no es capaz de navegar por archivos .deb. Por eso, he decidido crear otra entrada de actualización con un proceso más genérico aunque, tal vez, sea más laborioso, pero con un índice de éxito mayor.

El proceso de descargar el archivo .deb es igual que en la entrada anterior, por lo que te recomiendo que leas el enlace que he puesto en el primer párrafo y sigas las instrucciones para tener el .deb en tu ordenador.

El primer paso consistirá en "destripar" el paquete debian descargado. Eso lo haremos mediante una orden que se llama "ar".

ar x /home/dhouard/Descargas/spotify-client_0.8.4.103.g9cb177b.260-1_amd64.deb

Esta orden nos extraerá tres archivos del paquete: debian-binary, control.tar.gz y data.tar.gz. Éste último es el que nos interesa pues contiene el programa y los archivos y bibliotecas asociados.

Descomprimimos el archivo en /tmp

tar xvzf data.tar.gz -C /tmp

Con lo que tendremos un directorio llamado "usr" en /tmp. Es el momento de copiar al directorio raíz para poner cada cosa en su sitio.

cp   -r   /tmp/usr   /

Si probamos a lanzar ahora el programa nos lanzará un error porque no encuentra algunas bibliotecas.


Todas las bibliotecas necesarias para la ejecución del programa están en el sistema, lo que sucede es que "spotify" las busca por otro nombre. La idea es crear enlaces a esa biblioteca *** con el nombre con que spotify las busca ***. Parece complicado pero es muy sencillo aunque, repito, puede ser muy laborioso.

Lo primero es conocer cuales son las bibliotecas que se necesitan y no son encontradas. Esto lo conseguimos con la orden ldd

ldd /usr/bin/spotify

Y obtendremos un listado como el que se muestra.

linux-vdso.so.1 (0x00007fff95bff000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3ee9827000)
librt.so.1 => /lib64/librt.so.1 (0x00007f3ee961f000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f3ee9318000)
libQtGui.so.4 => /usr/lib64/libQtGui.so.4 (0x00007f3ee8662000)
libQtCore.so.4 => /usr/lib64/libQtCore.so.4 (0x00007f3ee818c000)
libQtWebKit.so.4 => /usr/lib64/libQtWebKit.so.4 (0x00007f3ee6543000)
libQtDBus.so.4 => /usr/lib64/libQtDBus.so.4 (0x00007f3ee62c6000)
libQtNetwork.so.4 => /usr/lib64/libQtNetwork.so.4 (0x00007f3ee5f83000)
libgthread-2.0.so.0 => /usr/lib64/libgthread-2.0.so.0 (0x00007f3ee5d81000)
libglib-2.0.so.0 => /usr/lib64/libglib-2.0.so.0 (0x00007f3ee5a8a000)
libXss.so.1 => /usr/lib64/libXss.so.1 (0x00007f3ee5886000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x00007f3ee554a000)
libasound.so.2 => /usr/lib64/libasound.so.2 (0x00007f3ee526e000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f3ee506a000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f3ee4e53000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x00007f3ee4bc6000)
libgobject-2.0.so.0 => /usr/lib64/libgobject-2.0.so.0 (0x00007f3ee4978000)
libgdk_pixbuf-2.0.so.0 => /usr/lib64/libgdk_pixbuf-2.0.so.0 (0x00007f3ee4758000)
libgdk-x11-2.0.so.0 => /usr/lib64/libgdk-x11-2.0.so.0 (0x00007f3ee44a4000)
libgtk-x11-2.0.so.0 => /usr/lib64/libgtk-x11-2.0.so.0 (0x00007f3ee3e6d000)
libcairo.so.2 => /usr/lib64/libcairo.so.2 (0x00007f3ee3b75000)
libpango-1.0.so.0 => /usr/lib64/libpango-1.0.so.0 (0x00007f3ee3929000)
libatk-1.0.so.0 => /usr/lib64/libatk-1.0.so.0 (0x00007f3ee3705000)
libcef.so => /usr/share/spotify/libcef.so (0x00007f3ee09aa000)
libm.so.6 => /lib64/libm.so.6 (0x00007f3ee06b3000)
libssl.so.0.9.8 => not found
libcrypto.so.0.9.8 => not found
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f3ee049c000)
libc.so.6 => /lib64/libc.so.6 (0x00007f3ee00f6000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3ee9a43000)
libpng14.so.14 => /usr/lib64/libpng14.so.14 (0x00007f3edfecd000)
libz.so.1 => /lib64/libz.so.1 (0x00007f3edfcb7000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x00007f3edfaae000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x00007f3edf892000)
libXi.so.6 => /usr/lib64/libXi.so.6 (0x00007f3edf682000)
libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x00007f3edf478000)
libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x00007f3edf26f000)
libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x00007f3edf069000)
libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x00007f3edee5e000)
libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x00007f3edec5b000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x00007f3edea24000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x00007f3ede812000)libsqlite3.so.0 => /usr/lib64/libsqlite3.so.0 (0x00007f3ede542000)
libgstapp-0.10.so.0 => /usr/lib64/libgstapp-0.10.so.0 (0x00007f3ede335000)
libgstinterfaces-0.10.so.0 => /usr/lib64/libgstinterfaces-0.10.so.0 (0x00007f3ede123000)
libgstpbutils-0.10.so.0 => /usr/lib64/libgstpbutils-0.10.so.0 (0x00007f3eddeff000)
libgstvideo-0.10.so.0 => /usr/lib64/libgstvideo-0.10.so.0 (0x00007f3eddce3000)
libgstbase-0.10.so.0 => /usr/lib64/libgstbase-0.10.so.0 (0x00007f3edda8e000)
libgstreamer-0.10.so.0 => /usr/lib64/libgstreamer-0.10.so.0 (0x00007f3edd7a5000)
libQtXml.so.4 => /usr/lib64/libQtXml.so.4 (0x00007f3edd562000)
libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00007f3edd31c000)
libpcre.so.1 => /usr/lib64/libpcre.so.1 (0x00007f3edd0c2000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x00007f3edcea2000)
libffi.so.4 => /usr/lib64/libffi.so.4 (0x00007f3edcc9a000)
libgmodule-2.0.so.0 => /usr/lib64/libgmodule-2.0.so.0 (0x00007f3edca96000)
libgio-2.0.so.0 => /usr/lib64/libgio-2.0.so.0 (0x00007f3edc744000)
libpangocairo-1.0.so.0 => /usr/lib64/libpangocairo-1.0.so.0 (0x00007f3edc537000)
libXcomposite.so.1 => /usr/lib64/libXcomposite.so.1 (0x00007f3edc334000)
libXdamage.so.1 => /usr/lib64/libXdamage.so.1 (0x00007f3edc131000)
libpangoft2-1.0.so.0 => /usr/lib64/libpangoft2-1.0.so.0 (0x00007f3edbf05000)
libpixman-1.so.0 => /usr/lib64/libpixman-1.so.0 (0x00007f3edbc7e000)
libxcb-shm.so.0 => /usr/lib64/libxcb-shm.so.0 (0x00007f3edba7b000)
libxcb-render.so.0 => /usr/lib64/libxcb-render.so.0 (0x00007f3edb871000)
libnss3.so.1d => not found
libnssutil3.so.1d => /usr/lib64/libnssutil3.so.1d (0x00007f3edb64b000)
libsmime3.so.1d => not found
libplc4.so.0d => not found
libnspr4.so.0d => not found
libgconf-2.so.4 => /usr/lib64/libgconf-2.so.4 (0x00007f3edb41b000)
libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x00007f3edb1f1000)
libcups.so.2 => /usr/lib64/libcups.so.2 (0x00007f3edaf9a000)
libgcrypt.so.11 => /usr/lib64/libgcrypt.so.11 (0x00007f3edad1b000)
libuuid.so.1 => /usr/lib64/libuuid.so.1 (0x00007f3edab16000)
libexpat.so.1 => /usr/lib64/libexpat.so.1 (0x00007f3eda8eb000)
liborc-0.4.so.0 => /usr/lib64/liborc-0.4.so.0 (0x00007f3eda66f000)
libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00007f3eda311000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x00007f3eda10d000)
libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f3ed9eef000)
libplc4.so => /usr/lib64/libplc4.so (0x00007f3ed9cea000)
libplds4.so => /usr/lib64/libplds4.so (0x00007f3ed9ae6000)
libnspr4.so => /usr/lib64/libnspr4.so (0x00007f3ed98a8000)
libdbus-glib-1.so.2 => /usr/lib64/libdbus-glib-1.so.2 (0x00007f3ed9681000)
libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00007f3ed9442000)
libssl.so.1.0.0 => /lib64/libssl.so.1.0.0 (0x00007f3ed91da000)
libcrypto.so.1.0.0 => /lib64/libcrypto.so.1.0.0 (0x00007f3ed8e07000)
libgpg-error.so.0 => /usr/lib64/libgpg-error.so.0 (0x00007f3ed8c03000)
liblzma.so.5 => /usr/lib64/liblzma.so.5 (0x00007f3ed89dd000)
libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00007f3ed8709000)
libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00007f3ed84e0000)
libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f3ed82dc000)
libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00007f3ed80d2000)
libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f3ed7ece000)

Miramos en el listado las bibliotecas que no han sido encontradas (las marcadas con un "Not found") y buscamos en el directorio de bibliotecas cual es el nombre que tienen en nuestro sistemas. Os recordamos que mientras que en los sistemas de 32 bits las bibliotecas están en /usr/lib, en los de 64 bits están en /usr/lib64,

dhouard@minas-morgul:~> ls -l /usr/lib64/libssl.*
lrwxrwxrwx 1 root root     22 sep 30 22:59 /usr/lib64/libssl.so -> /lib64/libssl.so.1.0.0

Bastará con hacer un enlace simbólico de la biblioteca que tenemos en el sistema a la que nos pide spotify. En el caso que nos ocupa habrá que enlazar libssl.so (la del sistema) con libssl.0.9.8 (la de spotify)

sudo ln -svf /usr/lib64/libssl.so /usr/lib64/libssl.so.0.9.8

Y repetir el proceso con cada una de las bibliotecas faltantes.

sudo ln -svf /usr/lib64/libcrypto.so /usr/lib64/libcrypto.so.0.9.8
sudo ln -svf /usr/lib64/libnss3.so /usr/lib64/libnss3.so.1d
sudo ln -svf /usr/lib64/libsmime3.so /usr/lib64/libsmime3.so.1d
sudo ln -svf /usr/lib64/libplc4.so /usr/lib64/libplc4.so.0d
sudo ln -svf /usr/lib64/libnspr4.so /usr/lib64/libnspr4.so.0d

Y ya está listo. Podremos lanzar nuestra aplicación desde el apartado "Multimedia" del menú.

6 comentarios:

Anónimo dijo...

libcef.so => not found


Solo me falla una libreria que no encuentro en el sistema: libcef.so

¿alguna solución?

Dhouard dijo...

Libcef.so es una biblioteca que viene en el propio data.tar.gz. Seguramente te has saltado el paso de copia la carpeta usr que está en /tmp a tu directorio raíz.

cp -r /tmp/usr /

Si eso fallara, prueba a copiar directamente la biblioteca a tu /usr/lib (o lib64, si tu sistema es de 64Bits).

Un saludo.
Dhouard.

Dhouard dijo...

Por cierto, han comentado en forosuse que el problema puede estar en que no se ha descomprimido bien el data.tar.gz... Vuelve a descomprimirlo y comprueba que el archivo libcef.so se encuentra en /tmp/usr/share/spotify.

Anónimo dijo...

Graciassssssssssssssssssss!!! me estaba volviendo loco m¡solucionado!!!!

Anónimo dijo...

Antes de hacer " ldd /usr/bin/spotify" lo único que tengo en /usr/bin es un "acceso directo" que apunta a "/opt/spotify/spotify-client/spotify" donde no hay nada....
Estoy muy perdido, que puedo hacer?

Gracias.

Dhouard dijo...

¿Estás seguro de que has realizado el tutorial tal y como se indica?.

Es extraño porque tras descomprimir has de copiar el contenido a /usr... nada de /opt

Sigue el tutorial paso por paso y no deberías tener problemas.

Un saludo.