null

Порт BigBlueButton для FreeBSD

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), указываем имя пользователя и оказываемся в демо-конференции:


FSR-001 Начинающий рыболов-спортсмен

При наличии микрофона можно разговаривать с другими участниками конференции, видеть их посредством камер и показывать им всяко-разные презентации (поддерживаются форматы: pdf, различные растровые изображения и любые форматы, которые понимает OpenOffice).

Порт все еще находится в активной разработке, поэтому если у Вас есть какие-нибудь пожелания или замечания - добро пожаловать.

 

Не делайте из еды культа!

Очень люблю готовить и вкусно покушать. А чтобы времени на эти увлекательные занятия оставалось как можно больше, я стараюсь автоматизировать любые задачи, которые оказываются в поле моей профессиональной деятельности.
В своем скромном дневнике я буду делиться с Вами рецептами блюд, которые удаются мне особенно хорошо

Ничего не найдено. n is 0