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