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.
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)
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.
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.
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)
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
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.
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
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.
Amigo que experiencia tienes con Arch ARM. Soy usuario de Arch.. instale rasbian. Pero me cansé de los problemas con los repos. Quiero Arch. Que hay de los paquetes que no están en el repo oficial. Por ejemplo los paquetes de AUR, se pueden compilar?
Interesantísimo artículo!
He hecho una búsqueda rápida para ver su cliente en Android y he visto que es de pago. ¿Hay alternativa libre?
Hola, si hay alternativas libres, yo uso ultrasonic.
https://play.google.com/store/apps/details?id=com.thejoshwa.ultrasonic.androidapp&hl=es
Saludos.
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.
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
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.
Hola, madsonic es un fork de subsonic, sólo que en madsonic no hay necesidad de pagar un key. Con respecto a Ampache, yo no lo he usado,- y no podría decirte cuales son las ventajas de madsonic con respecto a ampache, en google encontré este link, quizás te podría ser de ayuda: http://www.brunobense.com/2013/04/subsonic_ftw/.