Hace algún tiempo publicamos un post sobre como montar un hilo musical con Openwrt. En dicho proyecto ulilizabamos emisoras de Internet. Ahora vamos a montar una emisora en local para que la música que suene sea la nuestra.
Paso 1-Instalando Icecast y otras aplicaciones necesarias.
Accederemos a openwrt por ssh e instalaremos los siguientes paquetes:
opkg update; opkg install icecast ices nano
Hemos añadido nano para poder modificar más fácilmente los archovos de configuración.
A continuación pararemos Icecast y pondremos que no se ejecute al iniciar el router (disable). Más adelante lo arrancaremos de otra manera.
/etc/init.d/icecast stop
/etc/init.d/icecast disable
Paso 2-Creando el usuario que ejecutará Icecast.
Icecast no se puede ejecutar como root por lo que tendremos que añadir un usario a nuestro sistema. Para ello instalaremos shadow-useradd
opkg install shadow-useradd
Ahora añadimos el usuario que nosotros llamaremos galeon y le crearemos su home.
useradd galeon
passwd galeon
mkdir /home
mkdir /home/galeon
chown galeon /home/galeon
Paso 3-Configurando Icecast.
Vamos a modificar el archivo de configuración de Icecast. Para ello renombraremos el antiguo, creamos uno nuevo y le añadimos nuestra configuración.
mv /etc/icecast.xml /etc/icecast-orig.xml
nano /etc/icecast.xml
Y metemos lo siguiente:
<icecast>
<!-- LIMITS -->
<limits>
<clients>10</clients>
<sources>10</sources>
<threadpool>5</threadpool>
<queue-size>524288</queue-size>
<client-timeout>30</client-timeout>
<header-timeout>15</header-timeout>
<source-timeout>10</source-timeout>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<!-- GENRIC -->
<authentication>
<source-password>cambiame</source-password>
<admin-user>admin</admin-user>
<admin-password>cambiame</admin-password>
</authentication>
<hostname>localhost</hostname>
<listen-socket>
<port>8000</port>
</listen-socket>
<fileserve>1</fileserve>
<!-- PATHES -->
<paths>
<!-- basedir is only used if chroot is enabled -->
<basedir>/usr/share/icecast</basedir>
<!-- Note that if <chroot> is turned on below, these paths must both
be relative to the new root, not the original root -->
<logdir>/tmp</logdir>
<webroot>/usr/share/icecast/web</webroot>
<adminroot>/usr/share/icecast/admin</adminroot>
<!-- <pidfile>/usr/share/icecast/icecast.pid</pidfile> -->
<!-- Aliases: treat requests for 'source' path as being for 'dest' path
May be made specific to a port or bound address using the "port"
and "bind-address" attributes.
-->
<!--
<alias source="/foo" destination="/bar"/>
-->
<!-- Aliases: can also be used for simple redirections as well,
this example will redirect all requests for http://server:port/ to
the status page
-->
<alias source="/" destination="/status.xsl"/>
<!-- The certificate file needs to contain both public and private part.
Both should be PEM encoded.
<ssl-certificate>/usr/share/icecast/icecast.pem</ssl-certificate>
-->
</paths>
<!-- LOG -->
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<playlistlog>playlist.log</playlistlog>
<loglevel>1</loglevel>
<logsize>10000</logsize>
<logarchive>1</logarchive>
</logging>
<!-- SECURITY -->
<security>
<chroot>0</chroot>
<changeowner>
<user>galeon</user>
<group>nogroup</group>
</changeowner>
</security>
</icecast>
Debes cambiar la contraseña del usuario admin.
Ahora toca crear el archivo de configuración de una de las estaciones de radio a la que llamaremos Radio Galeón. Para ello hacemos:
nano /etc/ices.xml
Y metemos todo lo siguiente:
<ices>
<!-- GENERIC -->
<background>1</background>
<pidfile>/var/run/icecast/ices1.pid</pidfile>
<!-- LOGGING -->
<logpath>/tmp</logpath>
<logfile>ices1.log</logfile>
<logsize>2048</logsize>
<loglevel>3</loglevel>
<consolelog>0</consolelog>
<!-- STREAM -->
<stream>
<metadata>
<name>Radio Galeón</name>
<genre>Varios</genre>
<description>OpenWRTRadio</description>
<url>http://openwrt:8000/</url>;
</metadata>
<input>
<param name="type">basic</param>
<param name="file">/root/playlist1.txt</param>
<param name="random">0</param>
<param name="once">0</param>
<param name="restart-after-reread">1</param>
</input>
<instance>
<hostname>localhost</hostname>
<port>8000</port>
<password>cambiame</password>
<mount>/RadioGaleon</mount>
</instance>
</stream>
</ices>
Paso 4-Utilizando un pendrive para guardar nuestra música
Aprovecharemos para instalar ahora el soporte para almacenamiento con pendrive. Aquí es donde meteremos nuestra música. El pendrive que vamos a utilizar está formateado en vfat, lo dejamos preparado para que reconozca ntfs también. Recalcamos que necesitamos un router con conector usb.
opkg install kmod-usb-storage kmod-fs-vfat kmod-fs-ntfs block-mount
Una vez hecho, meteremos el pendrive y ejecutamos:
logread
En mi caso veo una línea al final que dice:
... sd 0:0:0:0: [sda] Attached SCSI removable disk
Lo que me dice que me lo ha reconocido como sda.
A continuación creo una carpeta en el router /etc/music
que voy a utilizar para montar el pendrive y monto el pendrive:
mkdir /root/music
mount -t vfat /dev/sda1 /root/music/ -o rw,sync
Accedo a la carpeta y me descargo algo de música libre en formato ogg
:
cd /root/music
wget https://patrickdearteaga.com/audio/Not%20Giving%20Up.ogg --no-check-certificate
wget https://patrickdearteaga.com/audio/Spring%20Village.ogg --no-check-certificate
wget https://patrickdearteaga.com/audio/La%20Llamada%20de%20Ile.ogg --no-check-certificate
Con la utilidad que instalamos antes (block-mount), voy a pedirle que me reconozca lo que tiene montado mi openwrt y me lo guarde en la configuración.
block detect > /etc/config/fstab
Accedo al fichero de configuración:
nano /etc/config/fstab
Cambio donde dice option enabled '0'
por option enabled '1'
. Con esto nuestro pendrive se montará automáticamente en el próximo reinicio del router.
Paso 5-Creando el playlist, ejecutando el servicio y haciéndo que el servicio se ejecute al arrancar el router.
Con todos los archivos .ogg
que nos hemos bajado, crearemos una playlist o lista de reproducción que se guardará en /root/playlist1.txt
:
find /root/music -name "*.ogg" > /root/playlist1.txt
Cada vez que añadamos archívos
.ogg
al pendrive, tenemos que hacer el paso anterior.
Para ejecutar el servicio Icecast debemos poner:
/usr/bin/icecast -b -c /etc/icecast.xml
Para levantar la radio configurada haremos:
/usr/bin/ices /etc/ices.xml
Ahora toca hacer que esto e ejecute al iniciar el router:
nano /etc/rc.local
Y añadimos lo siguiente viendo que entre la ejecución de un comando y otro metemos un retardo de 3 segundos:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.
/usr/bin/icecast -b -c /etc/icecast.xml
/bin/sleep 3
/usr/bin/ices /etc/ices.xml
/bin/sleep 3
exit 0
Paso 6-Viéndolo en funcionamiento
Accede desde tu navegador a la dirección ip del router al puerto 8000:
http://<ip_del_router>:8000
Verás el servidor en funcionamiento: