Madsonic: Instalar servidor de streaming de música en un Raspberry Pi

11
5773

En este tutorial voy a explicar como instalar un servidor de streaming de música (madsonic) en la Raspberry Pi con Arch Linux ARM.
Para ver un tutorial de cómo instalar Arch Linux en una Raspberry Pi pueden mirar este post.

Es recomendable no instalar un entorno gráfico en la Raspberry Pi, ya que utiliza mucha memoria. En su lugar, es mejor trabajar siempre usando una conexión ssh.

Las principales características de madsonic son las siguientes:


  • Interfaz web intuitiva
  • Soporta transcodificación a varios formatos (Ej. FLAC > mp3)
  • Cuenta con clientes para Android e iOS

Limitar RAM para GPU y creación de área de intercambio (SWAP)

Los siguientes pasos son opcionales, pero yo recomiendo hacerlos para evitar que la Raspberry se quede con poca RAM.

El servidor madsonic funciona bajo Java, por lo tanto, en una Raspberry Pi de 256 MB de RAM utiliza aproximadamente el 50% de la RAM. En este caso recomiendo crear un área de intercambio (swap) para evitar que la Raspberry Pi se quede corta de memoria.

1. Creamos un archivo que se utilizará como área de intercambio archivo y le asignamos un espacio de 512 MB

# fallocate -l 512M /swapfile

2. Asignamos permisos de lectura y escritura al archivo.

# chmod 600 /swapfile

3. Formateamos como swap

# mkswap /swapfile

3. Activamos swap

# swapon /swapfile

4. Agregamos la siguiente linea al archivo /etc/fstab para que monte la swap automáticamente.

/swapfile none swap defaults 0 0

5. Modificamos el archivo /etc/sysctl.d/99-sysctl.conf para que la escritura en swap sólo se haga en caso que tengamos poca RAM disponible. Agregamos la siguiente linea

vm.swappiness=10

6. Usando el comando free -h comprobamos la cantidad de RAM que tenemos.
Streaming RAM
7. Modificamos el archivo /boot/config.txt dependiendo del modelo de Raspberry Pi que tengamos, para limitar la cantidad de RAM asignada a los gráficos.

¡CUIDADO! Si ponemos muy poca RAM para la GPU, la Raspberry no arrancará y tendremos que introducir la SD Card a una computadora para reparar el archivo /boot/config.txt

Asignaremos 64 MB de RAM para gráficos.

  • Para Raspberry Pi modelo A (con 256 MB de RAM) modificamos la linea gpu_mem_256=128 por gpu_mem_256=64
  • Para Raspberry Pi modelo B (con 512 MB de RAM) modificamos la linea gpu_mem_512=316 por gpu_mem_512=64

Overclocking (Opcional)

Recomiendo utilizar alguna fuente de enfriamiento para evitar que la Raspberry sobrecaliente

Editaremos el archivo /boot/config.txt y descomentaremos alguna de las opciones de overclock que se encuentran al final del archivo.

##Modest
arm_freq=800
core_freq=300
sdram_freq=400
over_voltage=0
##Medium
#arm_freq=900
#core_freq=333
#sdram_freq=450
#over_voltage=2
##High
#arm_freq=950
#core_freq=450
#sdram_freq=450
#over_voltage=6
##Turbo
#arm_freq=1000
#core_freq=500
#sdram_freq=500
#over_voltage=6

Yo utilicé la opción Modesta (velocidad de 800), con dicha velocidad mi Raspberry Pi funciona bien.

Instalación de Madsonic

Madsonic se encuentra en el Arch Linux User Repository (AUR), por lo tanto necesitamos el paquete base-devel para poder compilar programas de AUR.

Instalamos los paquetes necesarios:

# pacman -S wget curl base-devel yajl java-runtime libcups

Creamos un directorio para la compilación y descargamos madsonic desde AUR.

$ mkdir build
$ cd build
$ wget https://aur.archlinux.org/packages/ma/madsonic/madsonic.tar.gz

Extraemos los archivos y editamos el archivo PKGBUILD para agregar el soporte para procesadores ARM. Buscamos la linea arch=(‘i686’ ‘x86_64’) y agregamos
‘armv6h’.

$ tar zxf madsonic.tar.gz
$ cd madsonic
$ nano PKGBUILD
...
arch=('i686' 'x86_64' 'armv6h')

Usamos el comando makepkg para descargar y compilar el código de madsonic. Esto puede tardar un buen rato. Sean pacientes.

$ makepkg -g >> PKGBUILD
$ makepkg

El comando makepkg generará un archivo con extensión .xz, dicho archivo lo podemos instalar usando pacman.

# pacman -U madsonic-5.0.3860-1-armv6h.pkg.tar.xz

Instalación de Java Oracle para ARM

Después de instalar madsonic me he dado cuenta de que openjdk utiliza casi el 100% de procesador y, por lo tanto, esto representa un bajo rendimiento de la Raspberry Pi.

La solución a este problema es utilizar Java de Oracle para arquitectura ARM. Para mayor información sobre este tema, pueden revisar el articulo de oracle en donde muestran el Benchmark de Oracle Java vs OpenJDK en este link.

Descargamos Java Oracle para arquitectura ARM

wget --no-cookies \
--no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; \
oraclelicense=accept-securebackup-cookie" \
"http://download.oracle.com/otn-pub/java/jdk/7u55-b13/jdk-7u55-linux-arm-vfp-hflt.tar.gz"

Descomprimimos el archivo en la ruta /opt/java-oracle/

 # mkdir /opt/java-oracle
# tar -zxf jdk-7u55-linux-arm-vfp-hflt.tar.gz -C /opt/java-oracle

Creamos la variable de entorno de Java Home y respaldamos los ejecutables de Java de OpenJDK.

# JHome=/opt/java-oracle/jdk1.7.0_55
# test -L /usr/bin/java && mv /usr/bin/java{,.backup}

Creamos enlaces simbólicos para para java y javac.

# ln -sf /opt/java-oracle/jdk1.7.0_55/bin/java /usr/bin/java
# ln -sf /opt/java-oracle/jdk1.7.0_55/bin/javac /usr/bin/javac

Ahora podemos probar la instalación de java con el comando java -version

[eroland@alarmpi ~]$ java -version
java version "1.7.0_55"
Java(TM) SE Runtime Environment (build 1.7.0_55-b13)
Java HotSpot(TM) Client VM (build 24.55-b03, mixed mode)

Editamos el archivo de configuración de madsonic para que utilice Java Oracle y no Java OpenJDK.

# nano /var/madsonic/madsonic.sh

Y modificamos la línea JAVA_HOME para que quede de la siguiente manera:

JAVA_HOME=/opt/java-oracle/jdk1.7.0_55/jre:/usr/lib/jvm/java-7-openjdk

Configuración de madsonic

La configuración de madsonic se realiza en el archivo /var/madsonic/madsonic.sh, lo primero que hacemos es respaldarlo.

cp /var/madsonic/madsonic.sh{,.backup}

En dicho archivo se puede modificar el puerto que usará madsonic (por defecto usa el puerto 4040), la ruta de la carpeta donde estarán almacenadas las canciones, etc.

Añadiremos un Disco Duro Externo conectado por USB en donde pondremos las canciones a reproducir.

Si el disco duro tiene formato NTFS, es necesario instalar el paquete ntfs-3g para poder montar el disco.

# pacman -S ntfs-3g

Creamos la carpeta donde se montará el disco duro y le damos los permisos necesarios

# mkdir /mnt/Datos
# chmod 775 /mnt/Datos

Obtenemos el punto de montaje de nuestro Disco Duro

$ ls -l /dev/disk/by-label/
total 0
lrwxrwxrwx 1 root root 10 Dec 31 1969 Datos -> ../../sda2
lrwxrwxrwx 1 root root 10 Dec 31 1969 PS3 -> ../../sda1

En mi caso me interesa el disco con etiqueta Datos que se encuentra en /dev/sda2

Sin embargo, utilizar la etiqueta para montar el disco no es muy recomendado, ya que si la etiqueta cambia, el disco no podrá montarse.

Obtenemos el identidificador único (UUID) de nuestro disco duro.

ls -l /dev/disk/by-uuid/

Tendremos un resultado parecido a este:

[eroland@alarmpi ~]$ ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Dec 31 1969 19F4-1917 -> ../../sda1
lrwxrwxrwx 1 root root 15 Dec 31 1969 2300-4E18 -> ../../mmcblk0p1
lrwxrwxrwx 1 root root 10 Dec 31 1969 58F6AA78F6AA55D2 -> ../../sda2
lrwxrwxrwx 1 root root 15 Dec 31 1969 b471cde8-2a15-44e7-acce-e9a2a54511a6 -> ../../mmcblk0p5

Anotamos el UUID de nuestro disco duro (en este caso 58F6AA78F6AA55D2)

Agregamos la siguiente linea al final del archivo /etc/fstab

UUID=58F6AA78F6AA55D2 /mnt/Datos ntfs-3g default 0 0
Recuerden cambiar el UUID, por el que obtengan de los comandos de arriba

Reiniciamos nuestro Raspberry Pi y automáticamente se montará el disco duro.

Finalmente iniciamos el servicio de madsonic:

# systemctl start madsonic.service

Si queremos que el servicio se inicie automáticamente cada vez que el sistema cargue.

# systemctl enable madsonic.service

Y listo, tenemos nuestro servidor de streaming de música.

Una vez iniciado el servicio de madsonic, podemos entrar desde nuestro navegador preferido a la dirección IP de nuestro Raspberry Pi junto con el puerto 4040, en mi caso es la 192.168.17.1:4040 y entramos usando los datos user=admin password=admin.

madsonic

Ya dentro de la interfaz web podemos agregar nuevos usuarios y cambiar la contraseña por defecto.

Bueno, este es mi primer aporte, espero les guste.

Fuentes:
http://d.stavrovski.net/blog/post/set-up-home-media-streaming-server-with-madsonic-archlinux-and-cubieboard2
http://www.techjawab.com/2013/06/how-to-setup-mount-auto-mount-usb-hard.html

11 COMENTARIOS

  1. no tengo una rasp pero si server casero de streaming xD, alguna vez usaste mediatomb?, en caso afirmativo, que me podes decir comparado contra éste?, yo uso mediatomb, a simple vista la interfaz de madsonic le da mil vueltas al mediatomb xD, lo que me interesaria mucho seria saber si se puede hacer streaming via “WAN” y si es por un protocolo seguro mejor, porque mediatomb permite administrarse via web pero no con https, y tambien (hasta ahora encontre solo un cliente para android) puedo hacer streaming con mediatomb via WAN (si desde el celular estando en cualquier parte puedo reproducir musica de mi server casero) dado que dudo de la seguridad del protocolo le puse contraseñas que no guardar relacion alguna con las que habitualmente uso, y el mismo mediatomb está capado de permisos para que en caso de que acceda alguien no pueda tocar nada xD

    • Hola, no he usado mediatomb. Con respecto a tus preguntas, claro que se puede usar madsonic via WAN, yo uso madsonic via WAN y me funciona muy bien. Madsonic si permite usar https, sólo hay que habilitarlo en su archivo de configuración: madsonic_https_port=8443 y listo 🙂
      Con respecto a las aplicaciones para android, yo uso una llamada ultrasonic, esta muy buena, permite almacenar canciones en cache para escuchar sin conexión xD

      Saludos.

  2. Subsonic es una bestia y no usa la bosta de Java. Si no me equivoco ownCloud también puede stremear audio & video y es hiper liviano – por lo menos comparado con tener una JVM corriendo y encima otra aplicación pesa.

    Java must die – igual que Flash.

    • Efectivamente ownCloud tiene un servicio básico de streaming, la ventaja que le veo a subsonic es la posibilidad del transcoding, en caso de que tengan mucha música flac por ejemplo. Y también tienes razón, al usar java es un programa pesado, sin embargo, por ahora no he tenido problemas usando una Raspberry de 256MB de RAM.

      • Bueno, el OpenJDK 7 (no el 6 como muestra Oracle) es mucho más estable en cuanto a su rendimiento. No obstante, si existe una versión sin Java, enhorabuena (al menos, es una buena alternativa a Spotify).

        Y por cierto, ¡¿OWnCloud tiene para Streaming?! Ya parece 4shared.

  3. yo uso minidlna consume nada y podes tener acceso a videos, fotos y música y los capturo desde un reproductor de video en la pc o en el tv, también da la posibilidad de poner una pagina web muy limitada.

    Otra cosa, Madsonic eso es un servicio de streaming o de streamer?? “… Madsonic is a web-based media streamer and jukebox fork of Subsonic…. , Madsonic supports on-the-fly conversion and streaming of virtually any audio format,…” no se cuanta diferencia hay entre un termino y otro

    • No estoy seguro cual sea la diferencia, me parece que streamer se usa para decir que el software, es capaz de hacer streaming, pero repito, no estoy seguro xD

  4. Actualmante uso Ampache, de Subsonic segun he visto es software libre licencia GPL3 pero si quieres tener todas las caracteristicas debes pagar una license key para el servidor que se monte con subsonic, en cuanto a madsonic no lo conocia, sera cuestion de probarlo, podrian decirme que ventajas podria tener si uso madsonic en lugar de ampache.

Dejar una respuesta