Servidor de streaming mt-daap
septiembre 17, 2008 at 4:29 pm 5 comentarios
Después de configurar NFS en Mac OS X aproveché para montar un servidor de streaming de audio, en concreto voy a usar el protocolo Daap. El servidor correrá en una Debian y los clientes, pues cualquiera que soporte este protocolo, iTunes por supuesto, pero también hay libres como Rhythmbox o Amarok.
En primer lugar hace falta avahi-daemon, un demonio que realiza multicast DNS para publicar/descubrir servicios, en nuestro caso publicaremos el servidor daap y los clientes tendrán que descubrirlo, por tanto hace falta en todas las máquinas. En teoría mt-daapd trae su propia implementación para hacer multicast DNS pero parece que funciona mejor con avahi.
Por tanto en el servidor instalamos los paquetes:
# apt-get install mt-daapd avahi-daemon avahi-utils libnss-mdns
Configuración de avahi-daemon.
Editamos el fichero /etc/default/avahi-daemon y nos cercioramos que la variable AVAHI_DAEMON_START esté seteada a 1, esto hará que el demonio arranque al inicio del sistema, en Debian viene por defecto.
# 0 = don’t start, 1 = start
AVAHI_DAEMON_START=1
Para que la resolución de nombres se realice correctamente con mdns tenemos que editar el fichero /etc/nsswitch.conf y donde aparece:
hosts: files dns
sustituimos por:
hosts: files dns mdns4_minimal mdns4
Avahi utiliza ficheros con formato XML para la configuración los servicios, en nuestro caso el fichero en cuestión es éste:
<?xml version="1.0" standalone='no'?> <!DOCTYPE service-group SYSTEM "avahi-service.dtd"> <service-group> <name>Servidor iTunes</name> <service> <type>_daap._tcp</type> <port>3689</port> </service> </service-group>
Su nombre será daap.service e irá en /etc/avahi/services/
Configuración de mt-daapd.
Editamos el fichero de configuración /etc/mt-daapd.conf las opciones mas interesantes son:
# Contraseña de la interfaz web de mt-daap.
admin_pw =1234
# Directorio donde está la musica.
mp3_dir = /home/shared/Musica
# Usuario con el que correrá mt-daap
runas = mt-daapd
# Nombre del servidor
servername = Servidor iTunes
El logfile por defecto está desactivado, es decir, no hay fichero de log, cualquiera que halla usado un poco linux sabe que es importante que la aplicación vuelque sus mensajes a logs, cuantos errores no he resuelto gracias a los logs que si no me hubiese sido imposible. Por tanto lo activamos.
logfile = /var/log/mt-daapd.log
Reiniciamos los servicios:
# /etc/init.d/dbus restart
Esto reiniciará dbus y avahi.
Arrancamos manualmente mt-daapd:
# mt-daapd -m -f -d 5
-m para que no haga multicast dns, ya lo hace avahi.
-f para que nos vaya mostrando por pantalla el debug.
-d 5 el nivel de debug.
Hay que retocar el script del servicio para que cuando arranque por defecto no haga multicast dns, editamos el fichero /etc/init.d/mt-daapd y añadimos DAEMON_OPTS=»-m» tal que así:
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/mt-daapd
NAME=mt-daapd
DESC=mt-daapd
DAEMON_OPTS=»-m»
test -x $DAEMON || exit 0
….
No hay que modificar mas nada, así que guardamos.
Configuración de los clientes. ArchLinux y Mac OS X.
En arch instalamos avahi y dbus:
# pacman -S avahi dbus
Iniciamos dbus:
# /etc/rc.d/dbus start
Iniciamos avahi:
# avahi-daemon
Ahora si abrimos nuestro reproductor nos debe aparecer el servidor, por ejemplo en Rhythmbox:
Hay que tener en cuenta que dbus y avahi deben arrancar al inicio, en Arch basta con añadirlo a DAEMONS(… dbus avahi-daemon …) en el fichero /etc/rc.conf ademas en ese orden pues avahi no arranca sin dbus.
En Mac OS X no hay que hacer casi nada, sólo tener marcada la opción «Buscar bibliotecas compartidas» en el menú Preferencias de iTunes y ya nos aparece el servidor:
Haciendo Streaming fuera de nuestra red.
El protocolo sólo hace streaming para nuestra subred, si estamos fuera de ella tendremos que hacer una triquiñuela. Como migranpipa está accesible siempre desde internet lo que haremos es un túnel ssh y utilizaremos un programa llamado Network Beacon que nos hará de proxy y publicará el servicio.
Crear el túnel ssh es sencillo, desde un terminal ejecutamos (por supuesto con tu nombre de usuario y servidor):
ssh oscar@www.migranpipa.net -N -f -L 3689:www.migranpipa.net:3689
Donde:
-N para que el túnel no sea interactivo.
-f envía el proceso a segundo plano.
-L especifica el túnel, en este caso el puerto 3689 local será tunelado al puerto 3689 de la máquina remota http://www.migranpipa.net.
Para eliminar el túnel tan sólo tenemos que matar el proceso.
También se puede hacer de forma gráfica con Fugu, es un universal, asi que lo instalamos simplemente arrastrando el ejecutable al directorio Aplicaciones, lo ejecutamos y en la pestaña «SSH» creamos un «Nuevo túnel SSH»:
Ahora descargamos e instalamos Network Beacon, igual que Fugu, ya que también es universal, lo ejecutamos y creamos un «New Beacon» con la información que corresponda:
Esto se puede hacer desde linea de comandos con Bonjour pero hay que compilar el paquete, por tanto también instalar Xcode, en fin Network Beacon ya nos lo da hecho.
Ahora ya podemos oír música desde todo el mundo, sin embargo tenemos que arrancar Network beacon y crear el túnel al menos cada vez que encendemos el ordenador, esto es un poco engorroso, que mejor que automatizarlo con un AppleScript.
on run do shell script "ssh oscar@www.migranpipa.net -N -f -L 3689:www.migranpipa.net:3689 >/dev/null 2>&1 &" tell application "System Events" to (name of processes) contains "Network Beacon" if the result is false then activate application "Network Beacon" tell application "System Events" set visible of process "Network Beacon" to false end tell end if end run on quit do shell script "killall ssh" tell application "Network Beacon" to quit continue quit end quit
Edita los parámetros correspondientes y guárdalo como Aplicación en Aplicaciones. Pensé en hacer un script y ejecutarlo al inicio del sistema, sería aún mas cómodo ya que no tendríamos que ejecutar nada, pero al final descarté la idea porque eso implica mantener la conexión permanentemente, lo que añade carga innecesaria y resta ancho de banda a ambas máquinas.
Si en vez de Mac tenemos Linux como cliente, haremos lo mismo, creamos el túnel y en vez de Network Beacon utilizaremos RendezvousProxy, se puede también crear un script de bash, mas sencillo que el AppleScript, eso lo dejo como tarea.
Es conveniente tener la autenticación de SSH mediante llaves y passphrase, seguirá siendo seguro y no nos pedirá la contraseña, es muy fácil de hacer, lo explican muy bien aquí.
Con todo esto ya tenemos nuestro servidor mt-daap funcionando y toda nuestra música disponible en cualquier sitio.
Como alternativa (en realidad la alternativa sería mt-daap) podemos montar el servidor libre GNUMP3d ya que mp-daap una implementación del protocolo de Apple, no lo he probado pero he leído que funciona bien, yo utilicé daap porque se integra muy bien con iTunes y Rhythmbox
NOTA: inicialmente hice las pruebas con el MacBook por Wifi, el servidor estaba bien configurado pero iTunes no lo veía hasta que me dio por probar conectándolo mediante cable y ahí si que funcionó, el problema es del router, hay que activar el protocolo Multicast mediante IGMP, sin embargo yo lo activé (ambas versiones), también UPnP y sigue sin funcionar. Si alguien sabe como solucionarlo, que lo comente, mi router es un Zyxel Prestige 650HW, el de Telefónica.
Bueno, decir que en realidad funciona por Wifi pues esté o no en casa uso el túnel ssh, pero me gustaría saber si se puede hacer como debería.
Enlaces interesantes:
http://gentoo-wiki.com/HOWTO_Apple_ITunes_Server
http://gentoo-wiki.com/HOWTO_Serving_Mac
Entry filed under: GNU Linux / *BSD.
5 comentarios Add your own
Deja una respuesta
Trackback this post | Subscribe to the comments via RSS Feed
1. links for 2008-11-17 | noviembre 18, 2008 a las 3:48 am
[…] Servidor de streaming mt-daap Compartir Musica con un servidor DAAP entre linux y mac (tags: DAAP mac linux) […]
2.
Mojito | diciembre 12, 2008 a las 11:12 pm
Hey, que blog más chulo tienes. El post este me viene que ni pintado.
Espero que sigas posteando… ¡ánimo! =D
3.
migranpipa | diciembre 14, 2008 a las 3:43 pm
Jey, gracias, si tienes dudas pues preguntas por aquí. La verdad que el blog lo tengo un poco abandonado, a ver si ahora en navidades publico alguna cosilla.
Saludos.
4.
puyettt | enero 28, 2012 a las 5:57 am
no furula, levanta el servicio pero no lo encuentran los dispositivos
5.
migranpipa | enero 29, 2012 a las 12:01 pm
Hola, si puedes da más info a ver que puede ser… pero el post es muy viejo, seguramente haya cambiado algo a dia de hoy.
Saludos.