BigBlueButton en servidor Debian Squeeze

9 03 2011

Se acabó el carnaval, y eso hora de volver al trabajo.

Hace cerca de un mes la institución donde laboro solicitó la evaluación de una herramienta para capacitación a distancia, pero con características muy especiales que debían incluir videoconferencia y presentaciones en tiempo real. Entonces solicitaron la instalación de una herramienta que se llama BigBlugButton (BBB).

BigBlugButton es una aplicación Web Open Source de Video Conferencia, VoIP, escritorio compartido y e-learning para educación a distancia. Es un programa realmente muy interesante, distribuido bajo licencia LGPL y que hace uso de proyectos varios como Asterisk, Flex SDK, Red5, MySQL y otros.

BigBlueButton ofrece algunas características interesantes y que le ubican en una categoría multipropósito, ya que por ejemplo los usuarios pueden subir archivos PDF o documentos de texto/hojas de cálculo, lo cual será muy útil para quienes estén realizando una presentación.

Para el uso de BigBlueButton hay 3 casos:

* Presentador, que puede subir presentaciones y compartir su escritorio
* Espectador, que no tiene autoridad en la videoconferencia y solo puede ver o chatear
* Moderador, que puede subir presentaciones, compartir su escritorio y aceptar o expulsar usuarios.

En esta oportunidad tocó configurar la herramienta para su evaluación y posible implementación para el área de capacitación de la organización. De la experiencia obtenida aqui resumo paso a paso su largo y poco complejo proceso de instalación y configuración.

Requerimientos

La configuración de este servicio requiere previa la instalación de varios programas adicionales, a saber:

* Apache Tomcat 6
* Nginx (servidor web)
* Mysql (base de datos)
* Swftools (utiidades para manipular archivos Flash)
* ActiveMQ (servicio de mensajería)
* Red5 (servicio RTMP)
* Asterisk y Konference (servicio para conferencia)

La instalación se llevó a cabo en una VM puesta en Xen 4, con Debian 6.0 en actual estatus de Estable.

Instalación y Configuración

Se prepara el servidor con las últimas actualizaciones en el sistema. Luego se procede paso a paso para la instalación de los paquetes necesarios.

1. Se instalan los Paquetes Necesarios:

aptitude install sudo build-essential mysql-server openjdk6-jdk jsvc tomcat6 imagemagick nginx openoffice.org libjpeg62-dev libjpeg62 libfreetype6-dev libfreetype6 libgif-dev libgif4 libungif4-dev libungif-bin libncurses5-dev libxml2-dev subversion

2. Instalación de Swftools:

cd /usr/src/
wget http://www.swftools.org/swftools-0.9.1.tar.gz
tar -xvzf swftools-0.9.1.tar.gz
cd swftools-0.9.1
./configure
make
make install

3. Instalación de ActiveMQ:

cd /tmp
wget http://apache.mirror.rafal.ca/activemq/apache-activemq/5.4.2/apache-activemq-5.4.2-bin.tar.gz
tar zxvf apache-activemq-5.4.2-bin.tar.gz
mv /tmp/apache-activemq-5.4.2 /usr/share/activemq
chown -R root.root /usr/share/activemq

4. Instalación de Red5:

cd /tmp
wget http://bigbluebutton.org/downloads/0.70/red5-0.9.1.tar.gz
tar xvf red5-0.9.1.tar.gz
mv /tmp/red5-0.9.1 /usr/share/red5
adduser --system --home /usr/share/red5/ --no-create-home --group --disabled-password --shell /bin/false red5

5. Se crean los archivos de bitácoras y se asignan los permisos necesarios:

touch /usr/share/red5/log/sip.log
touch /usr/share/red5/log/video.log
touch /usr/share/red5/log/bigbluebutton.log
chown -R root.root /usr/share/red5
chown -R red5:adm /usr/share/red5/log/
chmod 755 /usr/share/red5/log/
chgrp red5 /usr/share/red5/webapps/
chmod 775 /usr/share/red5/webapps/
mkdir /var/log/bigbluebutton
touch /var/log/bigbluebutton/bbb-web.log
chown tomcat6:tomcat6 /var/log/bigbluebutton/bbb-web.log

Adicional, se copian los scripts de cada servicio y se definen en los niveles de inicio del sistema:

cd /usr/src/
wget http://bigbluebutton.org/downloads/0.71/init-scripts.tar.gz
tar xzvf init-scripts.tar.gz
mv activemq /etc/init.d/activemq
mv red5 /etc/init.d/red5
chmod a+x /etc/init.d/activemq
chmod a+x /etc/init.d/red5
update-rc.d activemq defaults
update-rc.d red5 defaults

Aqui también se configura OpenOffice para iniciar como un servicio:

wget http://www.bigbluebutton.org/downloads/0.71/bbb-openoffice-headless
cp bbb-openoffice-headless /etc/init.d
chmod a+x /etc/init.d/bbb-openoffice-headless
update-rc.d bbb-openoffice-headless defaults
/etc/init.d/bbb-openoffice-headless start

6. Se instala y configura Asterisk con sus programas complementarios Dahdi y Konference:

Previo se prepara el sistema para la compilación de módulos:

aptitude install linux-headers-`uname -r`

Se crea un link a los headers del kernel que se tiene instalado en el servidor para que Dahdi consiga el kernel indicado:

cd /usr/src/
ln -s /usr/src/linux-headers-2.6.32.5-686 /usr/src/linux

Se descargn los fuentes de los programas a compilar en el sistema:

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.6.2.9.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux/dahdi-linux-2.4.0.tar.gz
wget http://github.com/jthomerson/AsteriskAudioKonf/tarball/master/
 
6.1. Instalación de Dahdi (este paso puede ser obviado): 

tar -xvvzf dahdi-linux-2.4.0.tar.gz
cd /usr/src/dahdi-linux-2.4.0/drivers/dahdi/

Con el editor abra el archivo Kbuild, descomente la línea

obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_DUMMY) += dahdi_dummy.o

Y comente las lineas de abajo:

#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCT4XXP)           += wct4xxp/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCTC4XXP)          += wctc4xxp/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCTDM24XXP)        += wctdm24xxp/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCTE12XP)          += wcte12xp/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCTDM)             += wctdm.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_VOICEBUS)          += voicebus/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCB4XXP)           += wcb4xxp/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCT1XXP)           += wct1xxp.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCTE11XP)          += wcte11xp.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_WCFXO)             += wcfxo.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_TOR2)              += tor2.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_PCIRADIO)          += pciradio.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_XPP)               += xpp/
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_JPAH)      += dahdi_echocan_jpah.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_STEVE)     += dahdi_echocan_sec.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_STEVE2)    += dahdi_echocan_sec2.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_KB1)       += dahdi_echocan_kb1.o
#obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_MG2)       += dahdi_echocan_mg2.o

Grabe el archivo y salga del editor. Ahora se compila el programa:

cd /usr/src/dahdi-linux-2.4.0
make && make install

6.2 Instalación de Asterisk:

cd /usr/src/
tar -xvvzf asterisk-1.6.2.9.tar.gz
cd asterisk-1.6.2.9
./configure
make
make install
make samples

Copie el script de inicio de asterisk a /etc/init.d/:

cp contrib/init.d/rc.debian.asterisk /etc/init.d/asterisk
chmod +x /etc/init.d/asterisk

Con el editor de archivos, cambie las líneas 24, 25 y 26 para adaptar la configuración:

DAEMON=/usr/sbin/asterisk
ASTVARRUNDIR=/var/run/asterisk
ASTETCDIR=/etc/asterisk

6.3 Instalación de Konference:

cd /usr/src/
tar -xvvzf jthomerson-AsteriskAudioKonf-genconf_v1.0.3-27-g3f63305.tar.gz
cd jthomerson-AsteriskAudioKonf-3f63305/konference

Antes de compilar, con el editor de texto abra el archivo Makefile y modifique la variable include:

ASTERISK_INCLUDE_DIR ?= /usr/include

Luego, grabe el archivo y compile:

make
make install

Descargue los archivos de configuración de Asterisk para bbb:

wget http://bigbluebutton.org/downloads/0.70/bbb_extensions.conf
mv bbb_extensions.conf /etc/asterisk/
wget http://bigbluebutton.org/downloads/0.70/bbb_sip.conf
mv bbb_sip.conf /etc/asterisk/bbb_sip.conf
echo "#include \"bbb_extensions.conf\"" >> /etc/asterisk/extensions.conf
echo "#include \"bbb_sip.conf\"" >> /etc/asterisk/sip.conf
echo "load => app_konference.so" >> /etc/asterisk/modules.conf

Modifique el valor enabled a “yes” en el archivo /etc/asterisk/manager.conf

7. Configuracion de nginx para servir bbb:

cd /usr/src/
wget http://bigbluebutton.org/downloads/0.70/nginx-bigbluebutton.conf
cat nginx-bigbluebutton.conf  | sed "s/192.168.0.211/<LA-IP-DEL-SERVIDOR>/" > /etc/nginx/sites-available/bigbluebutton

Se habilita la configuración de bigbluebutton con nginx:

ln -s /etc/nginx/sites-available/bigbluebutton /etc/nginx/sites-enabled/bigbluebutton 

Modifique el hash bucket size para nginx

sed -i ‘s/http {/http {\n server_names_hash_bucket_size 64;/’ /etc/nginx/nginx.conf

8. Instalación y configuración del conjunto de aplicaciones que conforma BBB:

cd /usr/src/
wget http://bigbluebutton.org/downloads/0.71/bigbluebutton.tar.gz
tar xzvf bigbluebutton.tar.gz
cp /usr/src/bigbluebutton/bigbluebutton.war /var/lib/tomcat6/webapps/bigbluebutton.war

Por seguridad, necesita generar un GUID. Puede usar un generador en línea de GUID ubicado en http://www.somacon.com/p113.php, luego guarde la GUID en un sitio a mano pues se requiere para la configuración del bbb.

Paso siguiente es editar el archivo /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties y cambiar estas opciones:

* La ruta donde esta ubicado el swfTools (el directorio donde pdf2swf está ubicado, en este caso /usr/local/bin/)
* La ruta donde se encuentra ubicado imageMagick (usualmente /usr/bin )
* El sitio donde se ubica el ejecutable binario de ghostScript (/usr/bin/gs)
* La dirección IP del valor bigbluebutton.web.serverURL=http://<LA-IP-DEL-SERVIDOR>
* Definir el valor beans.dynamicConferenceService.securitySalt con el valor de la GUID que generó recientemente (i.e. beans.dynamicConferenceService.securitySalt=<SU-GUID>)

Se crea el directorio /etc/bigbluebutton y alli se crea el archivo nopdfmark.ps con el siguiente contenido:

%!
/pdfmark {cleartomark} bind def

Luego es necesario crear una base de datos. Se ingresa a la consola de Mysql y se añade una base de datos con los permisos correspondientes:

mysql -u root -p
create database bigbluebutton_dev;
grant all on bigbluebutton_dev.* to 'bbb'@'localhost' identified by 'secret';
commit;
quit

Se reinicie el servicio Tomcat6

/etc/init.d/tomcat6 restart

Se crea el directorio para Cargar Presentaciones:

mkdir /var/bigbluebutton
chown -R tomcat6:adm /var/bigbluebutton
chmod -R 777 /var/bigbluebutton

Instale las aplicaciones del BBB:

tar xzvf bigbluebutton-webapps.tar.gz
mv bigbluebutton /usr/share/red5/webapps/

Instale bbb-deskshare-app:

tar xzvf deskshare.tar.gz
mv deskshare /usr/share/red5/webapps/

Instale bbb-video-app:

tar xzvf video.tar.gz
mv video /usr/share/red5/webapps/

Instale bbb-voice-app:

tar xzvf sip.tar.gz
mv sip /usr/share/red5/webapps/

En este punto, modifique el archivo de configuración /usr/share/red5/webapps/sip/WEB-INF/bigbluebutton-sip.properties para que apunte a su servidor SIP (i.e. FreeSWITCH o Asterisk). Se asume que es el mismo servidor, pero puede ser cualquier servidor configurado con VoIP para BigBlueButton. Defina la dirección IP del servidor SIP en el parámetro sip.server.host

Instale bbb-default en el directorio donde será servido vía web:

tar xzvf bbb-default.tar.gz
mv bigbluebutton-default /var/www

En este punto, modifique el archivo de configuración /usr/share/red5/webapps/sip/WEB-INF/bigbluebutton-sip.properties para que apunte a su servidor SIP (i.e. FreeSWITCH o Asterisk). Se asume que es el mismo servidor, pero puede ser cualquier servidor configurado con VoIP para BigBlueButton. Defina la dirección IP del servidor SIP en el parámetro sip.server.host

echo "<%!
// This is the security salt that must match the value set in the BigBlueButton server
String salt = \"<SU-GUID>\";
// This is the URL for the BigBlueButton server
String BigBlueButtonURL = \"http://<LA-IP-DEL-SERVIDOR>/bigbluebutton/\";
%>" > /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp

Por último instale bbb-client:

tar xzvf client.tar.gz
mv client /var/www/bigbluebutton

Haga los cambios en el archivo de referencias del cliente de la dirección IP 192.168.0.x por la dirección IP del servidor, tal como lo muestra este ejemplo:

sed -i 's/192.168.0.[0-9]*/<LA-IP-DEL-SERVIDOR>/g' /var/www/bigbluebutton/client/conf/config.xml

9. Instale bbb-conf:

Descargue e instale el archivo bbb-conf, un script que sirve de ayuda para la configuración de BigBlueButton. Para instalar el script bbb-conf, haga lo siguiente:

wget http://github.com/bigbluebutton/bigbluebutton/raw/master/bigbluebutton-config/bin/bbb-confsed -i 's/conf.dist/conf/g' bbb-conf
mv bbb-conf /usr/local/bin
chmod a+x /usr/local/bin/bbb-conf

Finalmente se chequea que la instalación quedó bien con el comando bbb-conf -c

Y para terminar, se reinician todos los servicios instalados:

/etc/init.d/nginx restart
/etc/init.d/activemq restart
/etc/init.d/asterisk restart
/etc/init.d/red5 restart
/etc/init.d/tomcat6 restart

Desde una estación de trabajo ya puede acceder al servidor, colocando en el navegador web la url del servidor:

http://<LA-IP-DEL-SERVIDOR>

Estas son unas pruebas realizadas (las imágenes cortesía del sujeto gordo del video de abajo)

Notas al final de la configuración:

Esta receta se hizo siguiendo el howto publicado en la wiki para la instalación de BBB en Debian Squeeze. Fue conveniente hacer unas modificaciones mínimas para la instalación de la versión más reciente (0.71) y en la forma como son instalados algunos de los programas, todo esto teniendo como experiencia previa la instalación de los servicios en Debian Lenny y BBB versión 0.70.  Por otro lado, el howto original no deja claro, por ejemplo cuando se decida instalar Asterisk o FreeSwitch como servidor SIP, cuales archivos deben ser modificados.

Curiosamente, luego de la instalación puede que no funcione el módulo de conversación, como me pasó a mi. Como lo solucioné? El bbb-conf me da la respuesta cuando me indica que el bbb-voice-asterisk no se encuentra instalado. Revisando el archivo /usr/share/red5/webapps/bigbluebutton/WEB-INF/red5-web.xml en las últimas línea está la solución:

<!– NOTE: Change bbb-voice-freeswitch.xml to bbb-voice-asterisk.xml if you want to use Asterisk –>

<!– <import resource=”bbb-voice-freeswitch.xml” /> –>

<import resource=”bbb-voice-asterisk.xml” />

Hice el cambio en los valores tal como lo indica el archivo y listo.

Espero sea de utilidad.


Fuentes:
http://j.mp/fu4YB2
http://j.mp/hDo4wh









Seguir

Get every new post delivered to your Inbox.