BigBlueButton представляет собой кросс-платформенное решение для организации интерактивных веб-конференций, изначально предназначенное для использования в сфере образования. С помощью этого инструмента преподаватели могут организовывать эффективное обучение через Интернет. Также BigBlueButton позволяет проводить доклады и презентации в режиме онлайн. На сайте проекта подробно описан процесс установки и настройки BigBlueButton применительно к некоторым разновиностям OS Linux. Инструкция для PC-BSD/FreeBSD содержит ряд ошибок и несоответствий, которые я постарался решить в ходе написания этой заметки. По ходу написания заметки появилось непреодолимое желание сделать порт, для того, чтобы в следущий раз не вспоминать всю последовательность действий еще раз.
Для последующих действий нам понадобится FreeBSD i386 или amd64 (для остальных платформ нет работающего jre). Я проверил работу BigBlueButton на последнем стабильном релизе FreeBSD 8.1 для платформ i386 и amd64. Т.к. про установку и настройку системы уже написаны гигабайты статей и заметок, поэтому сразу перейдем к установке BigBlueButton. Согласно инструкции InstallingBigBlueButton нам необходимы следующие пакеты:
* MySQL
* SWFTools
* ImageMagick
* Nginx
* Asterisk или FreeSWITCH
* Tomcat6
* ActiveMQ
* Red5
* OpenOffice
Все они могут быть установлены в виде готовых пакетов или собраны при помощи коллекции портов. Я решил пойти вторым путем, т.к. жизнь без трудностей неинтересна, а сборка приложений из коллекции портов упражняет руку и причиняет верность глазу (C) Козьма Прутков.
MySQL
На самом деле тут могла быть любая другая база данных или ее полное отсутствие, но по удивительному стечению обстоятельств нам все-таки понадобится именно MySQL. Опции сборки не имеют большого значения (но WITHOUT_IPV6=1 имеет особое значение), поэтому по привычке я собираю MySQL так:
# cd /usr/ports/databases/mysql55-server && make WITH_CHARSET=utf8 install
SWFTools
Необходимо указать опцию WITH_PDF:
# cd /usr/ports/graphics/swftools && make WITH_LAME=1 WITH_PDF=1 install
ImageMagick
# cd /usr/ports/graphics/ImageMagick && make install
Nginx
Если планируется исползовать https, пожалуйста укажите соответствующий модуль в диалоговом окне или параметрах коммандной строки (WITH_HTTP_SSL_MODULE=1):
# cd /usr/ports/www/nginx && make install
Asterisk
Для создания конференций BigBlueButton может использовать два разных модуля Asterisk. Первый входит в поставку Asterisk и называется meetme. Для его использования необходима опция сборки WITH_ZAPTEL. Второй модуль не входит в поставку и называется app_konference. Про этот модуль я уже писал. Какой из модулей использовать - решать Вам. За meetme голосует его работа "из коробки" и использование (со слов самих разработчиков) на демо-сайте BBB. В свою очередь, app_konference привлекает отсутствием необходимости в дополнительных модулях ядра. Я решил собрать оба модуля и сделать выбор в ходе последующего тестирования.
# cd /usr/ports/net/asterisk && make WITH_ZAPTEL=1 install
# cd ..
# fetch 'http://www.freebsd.org/cgi/query-pr.cgi?prp=151744-2-txt&n=/appkonference.shar.txt'
fetch: http://www.freebsd.org/cgi/query-pr.cgi?prp=151744-2-txt&n=/appkonference.shar.txt: size of remote file is not known
appkonference.shar.txt 100 kB 40 kBps
# sh appkonference.shar.txt
c - appkonference
c - appkonference/files
x - appkonference/files/patch-bigbluebutton
x - appkonference/pkg-descr
x - appkonference/distinfo
x - appkonference/Makefile
# cd appkonference && make install
FreeSWITCH
Работа с этом продуктом поддерживается с версии BigBlueButton 0.71. Когда починят BUG ESL-52, можно будет использовать FreeSWITCH из дерева портов:
# cd /usr/ports/net/freeswitch && make install
На текущий момент времени Вам придется использовать определенный snapshot FreeSWITCH.
Для сборки всех остальных пакетов необходим jre. BigBlueButton использует открытые проекты, в большинстве своем написанные Apache Foundation, поэтому Вы можете использовать Sun JDK или OpenJDK. Я проверил работоспособность BigBlueButton с каждым из указанных JDK для i386/amd64.
# cd /usr/ports/java/openjdk6 && make install
или
# cd /usr/ports/java/jdk16 && make install
после сборки можно удалить пакеты, необхоимые только для сборки JDK:
# pkg_delete diablo-jdk-1.6.0.07.02_10 compat7x-amd64-7.3.703000.201008_1
Tomcat6
Небольшое косметическое исправление. Для успешной работы tomcat6 и BigBlueButton обязательно в качестве HTTP порта использовать 8080. Также при сборке я переопределяю некоторые пути, потому что считаю неаккуратным хранить логи в каталоге, отличном от /var/log:
# cd /usr/ports/www/tomcat6 && make HTTP_PORT=8080 APP_HOME=/usr/local/lib/tomcat LOG_DIR=/var/log/tomcat install
ActiveMQ
Пакет давненько не обновлялся и содержит rc.d скрипт непригодный для промышленного использования. Поэтому этот порт я также обновил:
# cd /usr/ports/net/activemq && make MQDB=/var/db/activemq install
Red5
В коллекции портов содержится достаточно древняя версия (0.7) этого пакета (на текущий момент времени версию обновили), в то время как для работы BigBlueButton нам необходима версия 0.9.1. Кроме того, модификация red5, используемая разработчиками BigBlueButton отличается от оригинальной по составу:
# diff -ur red5.orig red5.bbb
Only in red5.orig/red5-0.9.1: .classpath
Only in red5.orig/red5-0.9.1: .project
Only in red5.bbb/red5-0.9.1: .svn
diff -ur red5.orig/red5-0.9.1/Makefile red5.bbb/red5-0.9.1/Makefile
--- red5.orig/red5-0.9.1/Makefile 2010-02-21 20:27:53.000000000 +0000
+++ red5.bbb/red5-0.9.1/Makefile 2010-03-29 20:46:59.000000000 +0000
@@ -1,25 +1,47 @@
-
-PREFIX=/usr
-DESTINATION=$(PREFIX)/lib/red5
-
-all: red5
-
-.PHONY: all install clean
-
-red5:
- ant dist
-
-install:
- mkdir -p $(DESTINATION)
- install dist/boot.jar $(DESTINATION)
- install dist/red5.jar $(DESTINATION)
- install -m 755 dist/red5.sh $(DESTINATION)
- cp -r dist/conf $(DESTINATION)
- cp -r dist/lib $(DESTINATION)
- cp -r dist/webapps $(DESTINATION)
-
-installerdist:
- ant dist-installer
-
-clean:
- rm -rf dist
+#!/usr/bin/make -f
+
+# Edited for Debian GNU/Linux.
+DESTDIR =
+
+PREFIX=/usr
+DESTINATION=$(DESTDIR)$(PREFIX)/share/red5
+
+build:
+ echo "::BUILD"
+
+clean:
+ echo "::CLEAN"
+
+install:
+ echo "::INSTALL"
+ mkdir -p $(DESTINATION)
+ install red5.jar $(DESTINATION)
+ install boot.jar $(DESTINATION)
+ install -m 755 red5.sh $(DESTINATION)
+ cp -r conf $(DESTINATION)
+ cp -r lib $(DESTINATION)
+ cp -r webapps $(DESTINATION)
+
+check:
+ echo "::CHECK"
+
+deb:
+ # backup all previous deb packages
+ mkdir -p ../builds_deb
+ find .. -maxdepth 1 -name "*.deb" -exec mv '{}' ../builds_deb \;
+
+ rm ../*.build
+ rm ../*.changes
+
+ #
+ dch -i "new version"
+ sed -i s/tomcat6@blindside2.sce.carleton.ca/ffdixon@bigbluebutton.org/ ./debian/changelog > /dev/null
+
+ # Build new package
+ debuild -us -uc -i -b -effdixon@bigbluebutton.org
+
+ # If succeeded, then let's add to the repository
+ echo "Build suceeded ... updating repository"
+ reprepro -b ../../reprepro_dev remove bigbluebutton red5
+ reprepro -b ../../reprepro_dev includedeb bigbluebutton ../*.deb
+
diff -ur red5.orig/red5-0.9.1/conf/red5-core.xml red5.bbb/red5-0.9.1/conf/red5-core.xml
--- red5.orig/red5-0.9.1/conf/red5-core.xml 2010-02-21 20:27:53.000000000 +0000
+++ red5.bbb/red5-0.9.1/conf/red5-core.xml 2010-03-29 20:46:58.000000000 +0000
@@ -115,7 +115,6 @@
</bean>
<!-- RTMPT -->
-<!--
<bean id="rtmpt.server" class="org.red5.server.tomcat.rtmpt.RTMPTLoader" init-method="init" lazy-init="true">
<property name="webappFolder" value="${red5.root}/webapps" />
@@ -149,7 +148,6 @@
</property>
</bean>
--->
<!-- RTMPS -->
Only in red5.bbb/red5-0.9.1: debian
Only in red5.bbb/red5-0.9.1/lib: aopalliance-1.0.jar
Only in red5.orig/red5-0.9.1/lib: groovy-all-1.5.7.jar
Only in red5.bbb/red5-0.9.1/lib: spring-aop-3.0.0.jar
Only in red5.bbb/red5-0.9.1: src.zip.cdbs-config_list
Кроме небольшой разницы в конфигурационном файле мы видим также дополнительные библиотеки: aopalliance-1.0.jar и spring-aop-3.0.0.jar. Я создал новую версию порта для Red5, использующую оригинальный дистрибутив, а все необходимые изменения мы сделаем позже, в процессе настройки. Последняя версия порта www/red5-bbb доступна тут.
# cd /usr/ports/www/red5-bbb && make install
OpenOffice
Скрипт, необходимый для запуска OO в режиме демона добавим в процессе конфигурирования.
# cd /usr/ports/editors/openoffice.org-3 && make WITHOUT_MOZILLA=1 WITHOUT_GNOME=1 LOCALIZED_LANG=ru install
После запуска последней команды можно надолго откинутся на спинку кресла - сборка OO может занять от пары часов до пары дней После сборки можно удалить пакеты, необходимые только для сборки OO:
# pkg_delete coreutils-8.5 gtar-1.23_3
Теперь можно приступать к созданию порта BigBlueButton. Последовательнось действий проста - необходимо распаковать несколько tar.gz и war архивов, заменить hardcoded значения переменных на шаблоны в конфигурационных файлах и написать простой скрипт для замены этих шаблонов на актуальные значения. В качестве шаблонов будут выступать:
* BBB_HOSTNAME - имя хоста или IP адрес сервера BigBlueButton (например, hostname.domain или 192.168.1.1)
* BBB_SALT - случайная строка, знание которой обеспечивает возможность создания конференции (например, 5e5ff0968546b8aaacce0462a99bca30)
* BBB_SHAREDIR - каталог для хранения статических файлов (например, /usr/local/share/bigbluebutton)
* BBB_PRESENTATION_DIR - каталог для загрузки презентаций (например, /var/db/bigbluebutton)
* BBB_CONFERENCE_MODULE - модуль используемой конференции (konference, meetme или freeswitch)
* BBB_CONFERENCE_TYPE - тип используемой конференции (asterisk или freeswitch)
* BBB_DATABASE_TYPE - тип базы данных (например mysql ;-)
* BBB_DATABASE_HOST - имя хоста или IP адрес хоста на котором работает база данных (например, loclahost)
* BBB_DATABASE_NAME - имя базы данных (например, bigbluebutton)
* BBB_DATABASE_URL - URL для соединения с базой данных (формируется из трех предыущих переменных, например, jdbc:mysql://localhost/bigbluebutton_dev)
* BBB_DATABASE_USERNAME - имя пользователя для соединения с базой данных (например, bbb)
* BBB_DATABASE_PASSWORD - пароль пользователя для соединения с базой данных (например, secret)
* BBB_DATABASE_DRIVER - имя JDBC драйвера (например, com.mysql.jdbc.Driver)
* BBB_AMI_HOST - имя хоста или IP адрес хоста для Asterisk Manager Interface (например, loclahost)
* BBB_AMI_PORT - порт для Asterisk Manager Interface (например, 5038)
* BBB_AMI_USERNAME - имя пользователя для Asterisk Manager Interface (например, bbb)
* BBB_AMI_PASSWORD - пароль пользователя для Asterisk Manager Interface (например, secret)
* BBB_ESL_HOST - имя хоста или IP адрес хоста для Freeswitch conference server (например, loclahost)
* BBB_ESL_PORT - порт для Freeswitch conference server (например, 8021)
* BBB_ESL_PASSWORD - пароль для Freeswitch conference server (например, secret)
* BBB_SIP_HOST - имя хоста или IP адрес хоста для SIP конференции (например, loclahost)
* BBB_SIP_PORT - порт для SIP конференции (например, 5070)
* BBB_SIP_USERNAME - имя пользователя для SIP конференции (например, bbbuser)
* BBB_SIP_PASSWORD - пароль пользователя для SIP конференции (например, secret)
Некоторые из таких переменных будут принимать значения "по умолчанию", какие-то будут задаваться пользователем при конфигурации BigBlueButton, а некоторые можно генерировать случайным образом (например, значения всех паролей и salt). Патч для добавление порта BigBlueButton.
Установка порта в текущем его состоянии:
# cd /usr/ports/www
# fetch 'http://www.freebsd.org/cgi/query-pr.cgi?prp=152463-2-txt&n=/bigbluebutton-shar.txt'
fetch: http://www.freebsd.org/cgi/query-pr.cgi?prp=152463-2-txt&n=/bigbluebutton-shar.txt: size of remote file is not known
bigbluebutton-shar.txt 181 kB 79 kBps
# sh bigbluebutton-shar.txt
c - bigbluebutton
x - bigbluebutton/Makefile
x - bigbluebutton/distinfo
x - bigbluebutton/pkg-descr
c - bigbluebutton/files
x - bigbluebutton/files/bbb-conf.in
x - bigbluebutton/files/patch-client-conf-config.xml
x - bigbluebutton/files/openoffice.in
x - bigbluebutton/files/nopdfmark.ps
x - bigbluebutton/files/patch-bigbluebutton-tomcat-demo-bbb_api_conf.jsp
x - bigbluebutton/files/patch-conf-directory-default-bbbuser.xml
x - bigbluebutton/files/pkg-message.in
x - bigbluebutton/files/patch-bigbluebutton-WEB-INF-red5-web.xml
x - bigbluebutton/files/patch-bigbluebutton-WEB-INF-bigbluebutton.properties
x - bigbluebutton/files/patch-deskshare-WEB-INF-deskshare.conf
x - bigbluebutton/files/nginx.conf-dist.in
x - bigbluebutton/files/patch-sip-WEB-INF-bigbluebutton-sip.properties
x - bigbluebutton/files/patch-nginx-bigbluebutton.conf
x - bigbluebutton/files/patch-bbb_extensions.conf
x - bigbluebutton/files/patch-bbb_sip.conf
x - bigbluebutton/files/patch-bigbluebutton-tomcat-WEB-INF-classes-bigbluebutton.properties
x - bigbluebutton/files/patch-conf-autoload_configs-event_socket.conf.xml
x - bigbluebutton/files/patch-conf-autoload_configs-acl.conf.xml
x - bigbluebutton/files/patch-bigbluebutton-tomcat-WEB-INF-classes-log4j.properties
x - bigbluebutton/pkg-plist
# cd bigbluebutton
# make RED5_HOME=/usr/local/lib/red5 \
TOMCAT_HOME=/usr/local/lib/tomcat \
RED5_LOGS=/var/log/red5 \
TOMCAT_LOGS=/var/log/tomcat \
RED5_USER=red5 clean install
===> Cleaning for bigbluebutton-0.71
===> License check disabled, port has not defined LICENSE
===> Found saved configuration for bigbluebutton-0.71
===> Extracting for bigbluebutton-0.71
=> SHA256 Checksum OK for bigbluebutton/bbb_extensions.conf.
=> SHA256 Checksum OK for bigbluebutton/bbb_sip.conf.
=> SHA256 Checksum OK for bigbluebutton/blank-slide.swf.
=> SHA256 Checksum OK for bigbluebutton/blank-thumb.png.
=> SHA256 Checksum OK for bigbluebutton/nginx-bigbluebutton.conf.
=> SHA256 Checksum OK for bigbluebutton/bigbluebutton.tar.gz.
=> SHA256 Checksum OK for bigbluebutton/freeswitch-config.tar.gz.
=> SHA256 Checksum OK for bigbluebutton/red5-0.9.1.tar.gz.
===> Patching for bigbluebutton-0.71
===> Converting DOS text files to UNIX text files
===> Applying FreeBSD patches for bigbluebutton-0.71
===> bigbluebutton-0.71 depends on file: /usr/local/bin/pdf2swf - found
===> bigbluebutton-0.71 depends on file: /usr/local/bin/convert - found
===> bigbluebutton-0.71 depends on file: /usr/local/bin/mysqld_safe - found
===> bigbluebutton-0.71 depends on file: /usr/local/etc/rc.d/activemq - found
===> bigbluebutton-0.71 depends on file: /usr/local/sbin/nginx - found
===> bigbluebutton-0.71 depends on file: /usr/local/etc/rc.d/tomcat6 - found
===> bigbluebutton-0.71 depends on file: /usr/local/etc/rc.d/red5 - found
===> bigbluebutton-0.71 depends on file: /usr/local/bin/openoffice.org-3.2.1 - found
===> bigbluebutton-0.71 depends on file: /usr/local/sbin/asterisk - found
===> bigbluebutton-0.71 depends on file: /usr/local/lib/asterisk/modules/app_konference.so - found
===> Configuring for bigbluebutton-0.71
===> Installing for bigbluebutton-0.71
===> bigbluebutton-0.71 depends on file: /usr/local/bin/pdf2swf - found
===> bigbluebutton-0.71 depends on file: /usr/local/bin/convert - found
===> bigbluebutton-0.71 depends on file: /usr/local/bin/mysqld_safe - found
===> bigbluebutton-0.71 depends on file: /usr/local/etc/rc.d/activemq - found
===> bigbluebutton-0.71 depends on file: /usr/local/sbin/nginx - found
===> bigbluebutton-0.71 depends on file: /usr/local/etc/rc.d/tomcat6 - found
===> bigbluebutton-0.71 depends on file: /usr/local/etc/rc.d/red5 - found
===> bigbluebutton-0.71 depends on file: /usr/local/bin/openoffice.org-3.2.1 - found
===> bigbluebutton-0.71 depends on file: /usr/local/sbin/asterisk - found
===> bigbluebutton-0.71 depends on file: /usr/local/lib/asterisk/modules/app_konference.so - found
===> bigbluebutton-0.71 depends on file: /usr/local/openjdk6/bin/java - found
===> Generating temporary packing list
===> Checking if www/bigbluebutton already installed
==========================================================================
BigBlueButon is now installed. If you install it for the first time,
you may need to perform the following steps:
1. Configure your BigBlueButon with command:
# bbb-config install -h <hostname|ip address> -c <konference|meetme|freeswitch>
2. Start your BigBlueButon with command:
# bbb-config restart
3. Open http://<hostname|ip address> in your web browser.
4. Check log files for errors:
/var/log/red5/*
/var/log/tomcat/*
/var/log/asterisk/messages
/var/log/freeswitch/freeswitch.log
/var/log/nginx-*
For more detailed information please visit:
http://code.google.com/p/bigbluebutton/wiki/InstallingBigBlueButton
http://code.google.com/p/bigbluebutton/wiki/ConfigurationFiles
http://code.google.com/p/bigbluebutton/wiki/FAQ
==========================================================================
===> Installing rc.d startup script(s)
===> Registering installation for bigbluebutton-0.71
Первоначальное конфигурирование:
# bbb-conf install -h 192.168.50.117 -c meetme
Check RED5_HOME = '/usr/local/lib/red5': ok
Check TOMCAT_HOME = '/usr/local/lib/tomcat': ok
Check WWWROOT = '/usr/local/www': ok
Check WWWDIR = '/usr/local/www/bigbluebutton': ok
Check NGINX_ETC = '/usr/local/etc/nginx': ok
Check BBB_SHAREDIR = '/usr/local/share/bigbluebutton': ok
Check ASTERISK_ETC = '/usr/local/etc/asterisk': ok
Configure activemq: rc.conf
Configure mysql: drop/create/grant rc.conf
Configure asterisk: bbb_extensions.conf bbb_sip.conf extensions.conf sip.conf modules.conf manager.conf rc.conf
Configure openoffice: rc.conf
Configure tomcat: bbb_api_conf.jsp bigbluebutton.properties log4j.properties rc.conf
Configure nginx: nginx.conf bigbluebutton.conf config.xml rc.conf
Configure red5: red5-web.xml bigbluebutton.properties bigbluebutton-sip.properties rc.conf
Save config: /var/spool/bigbluebutton/conf.txt
Старт всех приложений:
# bbb-conf restart
activemq not running? (check /var/run/activemq.pid).
Starting activemq.
mysql not running? (check /var/db/mysql/x4150b.tdc.pid).
Starting mysql.
asterisk not running? (check /var/run/asterisk.pid).
Starting asterisk.
openoffice not running? (check /var/run/openoffice.pid).
Starting openoffice.
tomcat60 not running? (check /var/run/tomcat60.pid).
Starting tomcat60.
red5 not running? (check /var/run/red5.pid).
Starting red5.
Performing sanity check on nginx configuration:
the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
configuration file /usr/local/etc/nginx/nginx.conf test is successful
nginx not running? (check /var/run/nginx.pid).
Performing sanity check on nginx configuration:
the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.
На рабочей станции открываем указаный нами адрес в адресной строке браузера (на строне клинета необходим Flash Player plugin), указываем имя пользователя и оказываемся в демо-конференции:
При наличии микрофона можно разговаривать с другими участниками конференции, видеть их посредством камер и показывать им всяко-разные презентации (поддерживаются форматы: pdf, различные растровые изображения и любые форматы, которые понимает OpenOffice).
Порт все еще находится в активной разработке, поэтому если у Вас есть какие-нибудь пожелания или замечания - добро пожаловать.