Subsonic en una zona de SmartOS


Subsonic es un servidor multimedia opensource, escrito en Java que corre en todas las plataformas. Soporta un buen número de formatos multimedia como OGG, MP3, WMA, FLAC … y dispone de reproductores Flash y HTML5.

De manera opcional tiene una suscripción Premium por $1 al mes para aquellos que están interesados en las características extendidas (reproducción en smartpohnes, sin anuncios, soporte para Chromecast y Sonos, etc).

subsonic 1

Para su configuración las siguientes partes están cubiertas en esta guía:

  • Creación de la zona y su configuración.
  • Subsonic en su versión “standalone” y su inicio.
  • Configuración del servidor web el cuál hace de proxy para las conexiones hacia la dirección IP internal.

Preparación de la zona

Los siguientes pasos deben ejectuarse en la GZ (Zone Global).

Estructura de directorios

Ya que los ficheros multimedia puede que necesiten ser compartidos entre varias zonas (NAS, subsonic, …) he decidido ponerlo bajo el dataset ’exported':

[root@3c-4a-92-79-bf-d6 ~]# zfs create -p zones/exported/media
[root@3c-4a-92-79-bf-d6 ~]# zfs list -r zones/exported
NAME                    USED  AVAIL  REFER  MOUNTPOINT
zones/exported          115K   854G  57.5K  /zones/exported
zones/exported/media    115K   854G  57.5K  /zones/exported/media

Creación de la zona

Más abajo se puede ver el código JSON de la zona, debes ajustar las propiedades a tus necesidades, pero ten en cuenta lo siguiente:

  • brand se refiere al tipo de virtualización usado, en este caso es del tipo “OS Zone”.

  • image_uuid es la UUID de la imagen, puedes echar un vistazo a images. En este caso es base-64-lts.

  • quota hace referencia a la cantidad de espacio disponible en el punto de montaje “/” de la zona.

  • resolvers, nics son para la configuración de la red. Más información aquí.

Una parte muy importante en nuestro caso es la sección filesystems, donde los datasets creados en el punto anterior son usados. Para más información puedes mirar aquí.

{
	"brand": "joyent",
	"image_uuid": "b67492c2-055c-11e5-85d8-8b039ac981ec",
	"alias": "subsonic",
	"hostname": "subsonic.mydomain.com",
	"max_physical_memory": 1024,
	"max_swap": 1024,
	"quota": 20,
	"resolvers": ["192.168.1.1", "8.8.8.8"],
	"nics": [
	{
		"nic_tag": "internal",
		"ip": "192.168.1.100",
		"netmask": "255.255.255.0",
		"gateway": "192.168.1.1"
	}
	],
	"filesystems": [
	{
		"source": "/zones/exported/media",
		"target": "/opt/media",
		"type": "lofs"
	}
	]
}

Y para crear la zona:

[root@3c-4a-92-79-bf-d6 /opt/custom/etc]# vmadm create -f subsonic.json
Successfully created VM 014e59d6-970f-4827-8510-fcfcbd15cba6

Instalación de Subsonic

Descargando Subsonic Standalone

Dirígete a: http://www.subsonic.org/pages/download.jsp para descargar la última versión. En el momento en el que se escribió este artículo la última versión era Subsonic 5.3.

[root@3c-4a-92-79-bf-d6 /opt/custom/etc]# zlogin 014e59d6-970f-4827-8510-fcfcbd15cba6
[Connected to zone '014e59d6-970f-4827-8510-fcfcbd15cba6' pts/3]
Last login: Wed Jan 27 11:54:53 on pts/3
   __        .                   .
 _|  |_      | .-. .  . .-. :--. |-
|_    _|     ;|   ||  |(.-' |  | |
  |__|   `--'  `-' `;-| `-' '  ' `-'
                   /  ; Instance (base-64-lts 14.4.2)
                   `-'  https://docs.joyent.com/images/smartos/base

[root@subsonic ~]# wget http://subsonic.org/download/subsonic-5.3-standalone.tar.gz -O /tmp/subsonic-5.3-standalone.tar.gz

[...]

2016-01-27 12:15:52 (970 KB/s) - '/tmp/subsonic-5.3-standalone.tar.gz' saved [43714286/43714286]

Instalación

Primero crea el usuario y el grupo que se usará para la ejecución de Subsonic:

[root@subsonic ~]# groupadd -g 1001 subsonic
[root@subsoni2 ~]# useradd -u 1001 -g subsonic -d /var/subsonic -m -s /bin/sh subsonic
144 blocks

Actualiza los paquetes en la zona e instala los programas para transcoding.

root@subsonic ~]# pkgin update && pkgin -y fug
processing remote summary (http://pkgsrc.joyent.com/packages/SmartOS/2014Q4/x86_64/All)...
[...]
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
updating database: 100%

[root@subsonic ~]# pkgin -y install flac ffmpeg2 lame
calculating dependencies... done.

nothing to upgrade.
25 packages to be installed (50M to download, 179M to install):

perl-5.20.1 libxcb-1.11 libXdmcp-1.1.1 libXau-1.0.8 expat-2.1.0 png-1.6.16 glib2-2.42.1 harfbuzz-0.9.36 fribidi-0.19.6 freetype2-2.5.4 fontconfig-2.11.1nb1 enca-1.15 libX11-1.6.2nb1 libogg-1.3.2 xvidcore-1.3.3 x264-devel-20141023 opencore-amr-0.1.3 libvpx-1.3.0nb3 libvorbis-1.3.4 libvdpau-0.5 libtheora-1.1.1nb2 libass-0.11.2 lame-3.99.5nb1 flac-1.3.1 ffmpeg2-2.5.4
[...]
pkg_install warnings: 0, errors: 0
reading local summary...
processing local summary...
marking flac-1.3.1 as non auto-removable
marking ffmpeg2-2.5.4 as non auto-removable
marking lame-3.99.5nb1 as non auto-removable

Es muy importante que hagas un enlace simbólico de los programas de transcoding en el directorio de Subsonic llamado ’transcode’, ya que la versión standalone no los incluye.

subsonic@subsonic:~$ mkdir /var/subsonic/transcode
subsonic@subsonic:~$ ln -s /opt/local/bin/ffmpeg /var/subsonic/transcode/ffmpeg
subsonic@subsonic:~$ ln -s /opt/local/bin/lame /var/subsonic/transcode/lame
subsonic@subsonic:~$ ln -s /opt/local/bin/flac /var/subsonic/transcode/flac
subsonic@subsonic:~$ ls -l /var/subsonic/transcode/
total 2
lrwxrwxrwx 1 subsonic subsonic 21 Jan 28 00:09 ffmpeg -> /opt/local/bin/ffmpeg
lrwxrwxrwx 1 subsonic subsonic 19 Jan 28 00:09 flac -> /opt/local/bin/flac
lrwxrwxrwx 1 subsonic subsonic 19 Jan 28 00:09 lame -> /opt/local/bin/lame

Obtiene el Java JRE para Solaris x64 de el sitio web de Oracle y extráelo en /opt:

NOTA: Puede que prefieras usar openjdk pero yo he tenido problemas, ese es el motivo por el cual preferí usar el JRE de Oracle.

[root@subsonic /tmp]# wget --no-check-certificate --no-cookies \
     --header "Cookie: oraclelicense=accept-securebackup-cookie"     \
     http://download.oracle.com/otn-pub/java/jdk/8u71-b15/jre-8u71-solaris-x64.tar.gz \
     -O /tmp/jre-8u71-solaris-x64.tar.gz

2016-01-27 12:45:34 (1.00 MB/s) - '/tmp/jre-8u71-solaris-x64.tar.gz' saved [52076954/52076954]

[root@subsonic ~]# mkdir -p /opt/java && tar xzf /tmp/jre-8u71-solaris-x64.tar.gz -C /opt/java
[root@subsonic ~]# /opt/java/jre1.8.0_71/bin/java -version
java version "1.8.0_71"
Java(TM) SE Runtime Environment (build 1.8.0_71-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.71-b15, mixed mode)

Ahora se extrae Subsonic:

[root@subsonic ~]# su - subsonic
   __        .                   .
 _|  |_      | .-. .  . .-. :--. |-
|_    _|     ;|   ||  |(.-' |  | |
  |__|   `--'  `-' `;-| `-' '  ' `-'
                   /  ; Instance (base-64-lts 14.4.2)
                   `-'  https://docs.joyent.com/images/smartos/base
					    
subsonic@subsonic:~$ cd /var/subsonic
subsonic@subsonic:/opt/subsonic$ tar -xzf /tmp/subsonic\-5.3\-standalone.tar.gz
subsonic@subsonic:/opt/subsonic$ rm Getting\ Started.html LICENSE.TXT README.TXT subsonic.bat subsonic.sh

Inicio por medio de SMF

Puedes descargar el manifest file, el script de inicio y el fichero de configuración.

subsonic@subsonic:~$ wget https://raw.githubusercontent.com/tuxillo/tools/master/unix/smartos/subsonic.xml
[...]
subsonic@subsonic:~$ wget https://raw.githubusercontent.com/tuxillo/tools/master/unix/smartos/subsonic
[...]
subsonic@subsonic:~$ wget https://raw.githubusercontent.com/tuxillo/tools/master/unix/smartos/subsonic.conf

Edita /var/subsonic/subsonic.conf según tus necesidades. Al menos un cambio es indispensable y es el JAVA_HOME que debe apuntar a la ruta correcta pero sin el “bin/” al final.

JAVA_HOME=/opt/java/jre1.8.0_71
[...]
SUBSONIC_DEFAULT_MUSIC_FOLDER=/opt/media/music

Como root, registra el servicio. Ahora deberia iniciar automaticamente.

[root@subsonic ~]# svccfg validate /var/subsonic/subsonic.xml
[root@subsonic ~]# svccfg import /var/subsonic/subsonic.xml
[root@subsonic ~]# svcs subsonic
STATE          STIME    FMRI
online          0:04:05 svc:/application/subsonic:default

Configuración de Apache

Hay suficientes tutoriales y otros documentos acerca de la configuración de Apache en Internet así que nos vamos a centrar en lo que nos atañe. En mi caso particular yo uso Subsonic bajo mi dominio, en vez de usar un subdominio, así que para hay que cambiar un parámetro en el fichero de configuración.

SUBSONIC_CONTEXT_PATH=/subsonic

Y ahora simplemente el módulo mod_proxy de Apache hará el resto:

 #
 # Subsonic specific setup
 #
 ProxyRequests off
 ProxyPreserveHost Off
 ProxyPass /subsonic http://192.168.1.100:4040/subsonic ttl=300 retry=300
 ProxyPassReverse /subsonic http://192.168.1.100:4040/subsonic

Si tienes sugerencias, preguntas o lo que sea no dudes en dejar un comentario.