lunes, 11 de abril de 2016

Instalar Subsonic en Raspberry Pi 2 (1 de 2: Instalación básica)

Subsonic es una alternativa libre a servicios como Spotify o Google Music, que permite escuchar música en streaming una vez configuremos un servidor donde tengamos almacenada nuestra música. Una vez instalado y funcionando, podremos acceder a nuestra música mediante una interfaz web o mediante un reproductor compatible que haga uso de su API. Podemos probar una demo para ver su funcionamiento en la página oficial.

Una advertencia antes de comenzar el tutorial: para habilitar todas las características de Subsonic, incluyendo su uso con reproductores externos, es necesario adquirir una licencia (Subsonic Premium). En mi caso compré una licencia vitalicia hace años, cuando no había planes mensuales. Ahora el precio de la licencia vitalicia ha subido bastante, aunque es comprensible dado que el proyecto lo mantiene una sola persona, y lleva años en activo y añadiendo características. Como es software libre, hay gente que ha hecho forks del proyecto sin el código de verificación de licencia, pero prefiero no enlazarlos por aquí.

Dicho esto, vamos a ver cómo instalar Subsonic desde cero en una Raspberry Pi 2*. Para ello voy a suponer que ya tenemos una tarjeta de memoria con espacio suficiente y con Raspbian o Raspbian Lite instalado. Yo recomendaría usar al menos una tarjeta de 8GB de buena velocidad (Clase 10) e instalar Raspbian Lite, que se puede descargar desde la página oficial. Para instalar Raspbian se puede consultar esta entrada.

1. Configuración inicial

Una vez tengamos Raspbian instalado, lo primero que haremos es cambiar la contraseña por defecto, para evitar problemas si en un futuro decidimos habilitar el acceso remoto a nuestra Raspberry. Para ello escribimos:

$: passwd

A continuación es recomendable habilitar SSH, para poder administrar nuestra Raspberry remotamente; y expandir la partición de sistema para que aproveche todo el espacio libre de nuestra tarjeta. Ejecutamos la herramienta raspi-config:

$: sudo raspi-config

Expandiendo la partición con raspi-config

Para expandir la partición seleccionamos la primera opción. Para habilitar SSH, seleccionamos advanced options y elegimos la opción SSH en el siguiente menú.

Habilitando SSH

Si vamos a usar nuestra raspberry como servidor headless (sin interfaz gráfica), podemos ganar algo de RAM seleccionando la opción Memory Split, justo encima de SSH, y cambiando la RAM dedicada a la GPU a 16MB, como se muestra a continuación.

Configuración de RAM para servidor headless

Una vez terminada esta configuración, seleccionamos Finish y reiniciamos nuestra Raspberry con:

$: sudo reboot

2. (Opcional) Configurar IP estática y redireccionar puertos del router.

Es conveniente establecer una IP estática para nuestra Raspberry para poder conectarnos a ella con mayor facilidad y para poder redireccionar las peticiones del router cuando nos conectemos desde fuera de nuestra red local. Para ello se puede consultar esta entrada.

En cuanto a la redirección de puertos del router, nos interesará redireccionar como mínimo el puerto que use Subsonic para su interfaz web, que en su configuración por defecto es el 4040. Las instrucciones para hacer esto varían dependiendo de cada router, por lo que no se van a tratar en este tutorial. En la mayoría de routers habrá un menú llamado port forwarding o virtual servers para ello. También podemos redireccionar el puerto de SSH, que por defecto es el 22.

Ejemplo de redirección de puertos en router TP-Link

Otra opción, aunque bastante más insegura, es incluir nuestra Raspberry como DMZ Host, lo que abre todos los puertos del router al exterior, pero no es recomendable, ya que dejamos nuestra red bastante más expuesta a posibles ataques.

3. Instalando Subsonic

El requisito principal de Subsonic es Java. En mi caso usaré Open JRE, aunque al parecer se puede conseguir un mejor rendimiento con Oracle Java 8. Si se opta por ésta última opción hay un tutorial aquí.

Si optamos por Open JRE, basta con instalar:

$: sudo apt install openjdk-7-jre

Una vez instalado, podemos descargar el paquete de Subsonic desde su página de descargas. Accedemos al enlace anterior, pulsamos en el enlace Debian/Ubuntu, y copiamos la ruta del enlace tal y como vemos a continuación.

Copiando la dirección de descarga de Subsonic en Firefox

A fecha de hoy, la última versión estable, es la 5.3, que podemos descargar en nuestra Raspberry directamente con:

$: wget http://subsonic.org/download/subsonic-5.3.deb

Una vez descargado el paquete, lo instalamos con:

$: sudo dpkg -i subsonic-5.3.deb

Si hemos descargado una versión diferente, ponemos el nombre de archivo que corresponda.

4. Añadiendo un usuario sin privilegios para Subsonic

Por defecto, Subsonic se ejecuta con el usuario root. Esto puede venir muy bien para evitar problemas de permisos, pero es un riesgo de seguridad; especialmente si vamos a permitir el acceso desde el exterior de nuestra red local. Por ello es recomendable ejecutar Subsonic mediante un usuario que no tenga privilegios de administrador. El usuario por defecto de Raspbian, pi, también tiene privilegios de administrador, así que crearemos un usuario nuevo que se encargue exclusivamente de ejecutar Subsonic. En mi caso lo voy a llamar pisubsonic:

$: sudo adduser pisubsonic

Se nos pedirá una contraseña, que tendremos que introducir dos veces, y algunos datos más que podemos dejar con sus parámetros por defecto pulsando Intro.

Una vez creado el usuario, editaremos el fichero /etc/default/subsonic

$: sudo nano /etc/default/subsonic

Y sustituiremos la línea SUBSONIC_USER por el usuario que hemos creado, como muestra el recuadro rojo en la siguiente imagen:



Opcionalmente, he aumentado el máximo de memoria que puede usar Subsonic de 150 a 500 MB, y me he asegurado de que levante la interfaz web en el puerto 4040, como se puede ver en el recuadro verde.

Una vez modificado todo, guardamos el fichero y reiniciamos el servicio de Subsonic:

$: sudo service restart subsonic

Si todo ha ido bien, podremos acceder a Subsonic abriendo un navegador en la misma red que nuestra Raspberry y accediendo a la IP de la Raspberry y al puerto 4040:



A partir de aquí podremos entrar a con Username: admin, Password: admin, y empezar a configurarlo todo.

En la segunda entrada de este tutorial veremos cómo compilar ffmpeg para permitir que nuestra Raspberry haga transcoding de nuestra música y permita reproducir todo tipo de música ahorrando ancho de banda.

Nota: Si queremos usar un disco duro externo para almacenar nuestra música, algo recomendable para tener más espacio de almacenamiento y para aumentar la vida de la tarjeta de memoria, podéis seguir este tutorial.

* Subsonic está programado en Java, y usa ffmpeg para hacer transcoding. Por ello, es posible que una Raspberry Pi 1 o 1+ sea demasiado lenta para que todo funcione fluidamente, tanto por RAM como por ser monocore (ffmpeg ocupa prácticamente un núcleo cuando está haciendo transcoding).