Вы находитесь на странице: 1из 18

As que, manos a la obra....

Al finalizar la instalacin y loguearnos por primera vez en el servidor cambiamos el


hostname del mismo.
[root@localhost ~]# sed -i
's/HOSTNAME=localhost.local/HOSTNAME=icecastsrv01.local/g'
/etc/sysconfig/network

[root@localhost ~]# reboot

Al regresar, deshabilitamos Selinux para evitar inconvenientes hasta nuevo aviso.


[root@icecastsrv01 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g'
/etc/selinux/config

Tambin agregamos la siguiente regla de iptables para que nos permita el acceso a Icecast
en el puerto 8000.
[root@icecastsrv01 ~]# iptables -A INPUT -m state --state NEW -m tcp -p tcp
--dport 8000 -j ACCEPT

[root@icecastsrv01 ~]# service iptables save

[root@icecastsrv01 ~]# service iptables restart

Configuramos la Interfaz de red para actualizar y descargar paquetes. Esta interfaz est
Bridged en la configuracin de la mquina virtual, por lo que editaremos el script ya que
nos interesa que el dhclient nos genere el fichero resolv.conf y reiniciamos.
[root@icecastsrv01 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"

BOOTPROTO="dhcp"

NM_CONTROLLED="no"

ONBOOT="yes"

TYPE="Ethernet"

[root@icecastsrv01 ~]# reboot

Al regresar actualizamos e instalamos los paquetes necesarios para tener nuestro servidor
de streaming. First get the software:
[root@icecastsrv01 ~]# yum update -y

[root@icecastsrv01 ~]# yum groupinstall -y "Development Tools"

[root@icecastsrv01 ~]# yum install -y wget libshout-devel curl-devel libtheoradevel libvorbis-devel libxslt-devel speex-devel libxslt

[root@icecastsrv01 ~]# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt

[root@icecastsrv01 ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforgerelease-0.5.2-2.el6.rf.i686.rpm

[root@icecastsrv01 ~]# rpm -i rpmforge-release-0.5.2-2.el6.rf.i686.rpm

Descargar e instalar Icecast 2


[root@icecastsrv01 ~]# mkdir -p /usr/src/icecast

[root@icecastsrv01 ~]# cd /usr/src/icecast

[root@icecastsrv01 icecast]# wget


http://downloads.xiph.org/releases/icecast/icecast-2.3.3.tar.gz

[root@icecastsrv01 icecast]# tar xf icecast-2.3.3.tar.gz

[root@icecastsrv01 ~]# cd icecast-2.3.3

[root@icecastsrv01 icecast-2.3.3]# ./configure --prefix=/opt/icecast/2.3.3

[root@icecastsrv01 icecast-2.3.3]# make

[root@icecastsrv01 icecast-2.3.3]# make install

Verificamos que haya sido satisfactorio el proceso anterior


[root@icecastsrv01 ~]# ls /opt/icecast/2.3.3/bin/

icecast

Creamos un enlace del directorio 2.2.3 dentro del mismo directorio icecast
[root@icecastsrv01 ~]# cd /opt/icecast

[root@icecastsrv01 icecast]# ln -s 2.3.3 latest

Ahora editamos una copia del fichero xml de configuracin del servidor Icecast
[root@icecastsrv01 ~]# cd /opt/icecast/latest/etc

[root@icecastsrv01 etc]# mv icecast.xml icecast.xml.orig

[root@icecastsrv01 etc]# vi icecast.xml

<icecast>

<!-- LIMITS -->

<limits>

<clients>100</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>password</source-password>

<admin-user>admin</admin-user>

<admin-password>password</admin-password>

</authentication>

<hostname>192.168.24.102</hostname>

<listen-socket>

<port>8000</port>

</listen-socket>

<fileserve>1</fileserve>

<!-- PATHES -->

<paths>

<basedir>/opt/icecast/latest/share/icecast</basedir>

<webroot>/opt/icecast/latest/share/icecast/web</webroot>

<adminroot>/opt/icecast/latest/share/icecast/admin</adminroot>

<logdir>/var/log/icecast</logdir>

<pidfile>/var/run/icecast/icecast.pid</pidfile>

<alias source="/" dest="/status.xsl"/>

</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>icecast</user>

<group>icecast</group>

</changeowner>

</security>

</icecast>

Viendo el fichero icecast.xml en detalle, tenemos:


La seccin LIMITS define el mximo de estaciones de radio a proveer (sources=10),
cuntos clientes pueden conectarse (clients=100), etc.
La seccin GENERIC define el usuario, IP y puerto del servidor mismo.
La seccin PATHES define las rutas a la interfaz web que es muy simple.
La seccin LOGGING define dnde escribir los logs de Icecast y qu se almacenar
en los mismos.
La seccin SECURITY define el usuario y grupo que ejecutar Icecast.
Generalmente se usa el usuario icecast, el cual crearemos ms adelante.
Para que Icecast funcione correctamente solo nos faltan algunos ajustes.
Ahora vamos a crear el usuario y grupo que figuran en icecast.xml. Crearemos tambin los
directorios para los log y el PID del proceso.
[root@icecastsrv01 ~]# groupadd -g 200 icecast

[root@icecastsrv01 ~]# useradd -d /var/log/icecast -m -g icecast -s /bin/bash -u


200 icecast

[root@icecastsrv01 ~]# mkdir -p /var/run/icecast

[root@icecastsrv01 ~]# chown -R icecast:icecast /var/run/icecast

Finalmente probamos Icecast


[root@icecastsrv01 ~]# /opt/icecast/latest/bin/icecast -c
/opt/icecast/latest/etc/icecast.xml -b

Starting icecast2

Detaching from the console

Changed groupid to 200.

Changed userid to 200.

En este punto podemos confirmar que los ficheros para los logs se han creado
correctamente.
[root@icecastsrv01 ~]# ls /var/log/icecast/

access.log error.log playlist.log

Y verificamos que realmente se est ejecutando el servicio:


[root@icecastsrv01 ~]# pgrep -fl icecast

4874 /opt/icecast/latest/bin/icecast -c /opt/icecast/latest/etc/icecast.xml -b

Adems Icecast es accesible desde su interfaz web en la direccin IP del servidor


http://192.168.24.102:8000/, la cual podemos administrar entrando con el usuario y
contrasea definidos en el fichero icecast.xml.

Configurando los clientes de streaming

Tener el servidor funcionando no es suficiente. Es necesario adems un cliente de


streaming en algn formato de audio.
Ahora veremos cmo dejar funcionando Ices, un cliente de streaming en formato
OGG/Vorbis, el cual tambin necesita la ayuda de la librera libshout.

Configurando Libshout
[root@icecastsrv01 ~]# cd /usr/src/icecast

[root@icecastsrv01 icecast]# wget


http://downloads.us.xiph.org/releases/libshout/libshout-2.3.1.tar.gz

[root@icecastsrv01 icecast]# tar xf libshout-2.3.1.tar.gz

[root@icecastsrv01 icecast]# cd libshout-2.3.1

[root@icecastsrv01 libshout-2.3.1]# ./configure --prefix=/opt/icecast/latest

[root@icecastsrv01 libshout-2.3.1]# make

[root@icecastsrv01 libshout-2.3.1]# make install

Configurando Ices
[root@icecastsrv01 libshout-2.3.1]# cd /usr/src/icecast

[root@icecastsrv01 icecast]# wget http://downloads.us.xiph.org/releases/ices/ices2.0.2.tar.bz2

[root@icecastsrv01 icecast]# tar xf ices-2.0.2.tar.bz2

[root@icecastsrv01 icecast]# cd ices-2.0.2/

[root@icecastsrv01 ices-2.0.2]# export


PKG_CONFIG_PATH=/opt/icecast/latest/lib/pkgconfig:$PKG_CONFIG_PATH

[root@icecastsrv01 ices-2.0.2]# ./configure --prefix=/opt/icecast/latest

[root@icecastsrv01 ices-2.0.2]# make

[root@icecastsrv01 ices-2.0.2]# make install

Revisamos que se haya instalado correctamente


[root@icecastsrv01 ~]# ls /opt/icecast/latest/bin/

icecast ices

Ahora procedemos a editar el fichero de configuracin de Ices


[root@icecastsrv01 ~]# cd /opt/icecast/latest/etc/

[root@icecastsrv01 etc]# vi ices1.xml

<ices>

<!-- GENERIC -->

<background>1</background>

<pidfile>/var/run/icecast/ices1.pid</pidfile>

<!-- LOGGING -->

<logpath>/var/log/icecast</logpath>

<logfile>ices1.log</logfile>

<logsize>2048</logsize>

<loglevel>3</loglevel>

<consolelog>0</consolelog>

<!-- STREAM -->

<stream>

<metadata>

<name>RadioStation 1: OGG</name>

<genre>Varios</genre>

<description>Test Radio 1</description>

<url>http://192.168.24.102:8000/</url>

</metadata>

<input>

<param name="type">basic</param>

<param name="file">/opt/icecast/latest/etc/playlist1.txt</param>

<param name="random">1</param>

<param name="once">0</param>

<param name="restart-after-reread">1</param>

</input>

<instance>

<hostname>192.168.24.102</hostname>

<port>8000</port>

<password>password</password>

<mount>/emisora1</mount>

</instance>

</stream>

</ices>

Viendo el ficherho ices1.xml en detalle, tenemos:


La seccin GENERIC define el modo de ejecucin de Ices y dnde colocar el PID.
La seccin LOGGING define todo lo referente a los logs.

La seccin STREAM define la estacin de radio en s misma con su nombre, URL,


etc.
Ahora necesitamos algo vital: La msica! No hacemos nada si no tenemos un playlist de la
msica que tenemos disponible en el sistema. Podemos crear una lista manualmente
editando un fichero texto plano.
[root@icecastsrv01 ~]# cd /opt/icecast/latest/etc/

[root@icecastsrv01 etc]# vi playlist1.txt

/root/music/artist/album/track01.ogg

/root/music/artist/album/track02.ogg

O crear una lista en base a una bsqueda. Ms rpido si se trata de mucha msica.
[root@icecastsrv01 ~]# find /root/music/artist/album/ -name "*.ogg" >
/opt/icecast/latest/etc/playlist1.txt

Finalmente iniciamos Ices para probar.


[root@icecastsrv01 ~]# /opt/icecast/latest/bin/ices /opt/icecast/latest/etc/ices1.xml

Veamos el log de Ices


[root@icecastsrv01 ~]# tailf /var/log/icecast/ices1.log

[2013-01-28 12:17:05] INFO signals/signal_usr1_handler Metadata update


requested

[2013-01-28 12:17:05] INFO playlist-basic/playlist_basic_get_next_filename


Loading playlist from file "/opt/icecast/latest/etc/playlist1.txt"

[2013-01-28 12:17:05] INFO playlist-builtin/playlist_read Currently playing


"/root/music/artist/album/song2.ogg"

[2013-01-28 12:17:05] INFO stream/ices_instance_stream Connected to server:


192.168.24.102:8000/emisora1

Ahora podemos escuchar desde cualquier reproductor como VLC o Banshee nuestra
estacin con la URL http://192.168.24.102/emisora1.
Es posible tener varias estaciones con en la configuracin de Ices, colocando en la seccin
STREAM la configuracin correspondiente a otra estacin con su propio playlist.

Configurando Icegenerator
Icegeneretor es un cliente de streaming en formato MP3. Este cliente tambin necesita de
libshout, la cual fue instalada como prerequisito para el cliente Ices. Nos ahorraremos esos
pasos aqu.
[root@icecastsrv01 ~]# cd /usr/src/icecast

[root@icecastsrv01 icecast]# wget


http://netcologne.dl.sourceforge.net/project/icegenerator/icegenerator/0.5.5pre2/icegenerator-0.5.5-pre2.tar.gz

[root@icecastsrv01 icecast]# tar xfz icegenerator-0.5.5-pre2.tar.gz

[root@icecastsrv01 icecast]# cd icegenerator-0.5.5-pre2

[root@icecastsrv01 icegenerator-0.5.5-pre2]# ./configure

[root@icecastsrv01 icegenerator-0.5.5-pre2]# make

[root@icecastsrv01 icegenerator-0.5.5-pre2]# make install

Verificamos que se haya instalado correctamente.


[root@icecastsrv01 icegenerator-0.5.5-pre2]# ls -lah /usr/local/bin/ice*

-rwxr-xr-x 1 root root 55K 2013-01-28 12:41 /usr/local/bin/icegenerator*

Ahora procedemos a configurar nuestra estacin de radio en MP3.


[root@icecastsrv01 icegenerator-0.5.5-pre2]# cd /usr/local/etc

[root@icecastsrv01 etc]# vi icegen1.cfg

IP=192.168.24.102

PORT=8000

SERVER=2

MOUNT=/emisora2

PASSWORD=password

FORMAT=1

MP3PATH=m3u:/usr/local/etc/playlist2.m3u

LOOP=1

SHUFFLE=1

NAME=RadioStation 2: MP3

DESCRIPTION=Test Radio

GENRE=Varios

URL=http://192.168.24.102:8000/

LOG=2

LOGPATH=/var/log/icecast/icegen1.log

BITRATE=48000

SOURCE=source

Este fichero es ligeramente diferente en cuanto a formato pero la idea sigue siendo la
misma, parmetros y variables para el cliente Icegenerator: Direccin IP del servidor,
puerto, protocolo http, punto de montaje, contrasea, ubicacin del playlist, formato: 1
para MP3, 2 para OGG, repeticin de la lista, modo aleatorio, descripcin, gnero, URL,
log, calidad del stream, etc.
Ahora creamos el playlist para esta emisora, de forma manual.
[root@icecastsrv01 ~]# vi /usr/local/etc/playlist2.m3u

/root/music/artist/album/track01.mp3

/root/music/artist/album/track02.mp3

O por lotes si se trata de mucha msica.


[root@icecastsrv01 ~]# find /music/artist/album/ -name "*.mp3" >
/usr/local/etc/playlist2.m3u

Iniciamos Icegenerator para probar su funcionamiento

[root@icecastsrv01 ~]# export LD_LIBRARY_PATH=/opt/icecast/latest/lib:


$LD_LIBRARY_PATH; /usr/local/bin/icegenerator -f /usr/local/etc/icegen1.cfg

[root@icecastsrv01 ~]# pgrep -fl icegen

31255 icegenerator -f /usr/local/etc/icegen1.cfg

[root@icecastsrv01 ~]# cat /var/log/icecast/icegen1.log

Mon Jan 28 13:44:38 2011: Connected to stream server

Mon Jan 28 13:44:38 2011: Now playing track02.mp3

Mon Jan 28 13:48:41 2011: Wait for all child process to terminate......

Al igual que en el caso de la emisora1, podemos accesar emisora2 desde cualquier


reproductor que lo soporte o desde un navegador con la URL
http://192.168.24.102:8000/emisora2.

Por ahora no se dispone de un InitScript para iniciar Icecast y los clientes, por lo que
crearemos un pequeo script de bash para al menos iniciarlos manualmente cuando
encendamos el equipo.
[root@icecastsrv01 ~]# vi icecastsrv.sh

#!/bin/bash

/opt/icecast/latest/bin/icecast -c /opt/icecast/latest/etc/icecast.xml -b

/opt/icecast/latest/bin/ices /opt/icecast/latest/etc/ices1.xml

export LD_LIBRARY_PATH=/opt/icecast/latest/lib:$LD_LIBRARY_PATH;
/usr/local/bin/icegenerator -f /usr/local/etc/icegen1.cfg

Y probamos inmediatamente nuestro script.


[root@icecastsrv01 ~]# ./icecastserver.sh
Starting icecast2
Detaching from the console
Changed groupid to 200.
Changed userid to 200.

# find /music/artist/album/ -name "*.mp3" > /usr/local/etc/playlist2.m3u