Archive for septiembre 17, 2008

Servidor de streaming mt-daap

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:

servidor_itunes_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:

biblioteca_compartida_itunes

servidor_itunes_itunes

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”:

fugu

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:

network_beacon

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

Anuncios

septiembre 17, 2008 at 4:29 pm 5 comentarios


Calendario

septiembre 2008
L M X J V S D
« Ago   Ene »
1234567
891011121314
15161718192021
22232425262728
2930  

Posts by Month

Posts by Category