Возникла необходимость организации видеоконференций, причем основным условием было отсутствие на стороне клиента необходимости установки дополнительного ПО. После коротких поисков в сети было найдено приемлемое решение Openmeetings.
На данный момент актуальная версия openmeetings_1_9_1_r4707, её и будем ставить.
Как понятно из заголовка ставить будем на FreeBSD 9, в сети есть несколько статей по установке но все они или не полны или относятся к устаревшим версиям. Система свеже установлена, первичная настройка произведена (сеть, обновление портов и т.п.) — эту часть расписывать не буду в сети мануалов хватает. Переходим собственно к установке, для начала надо установить весь необходимый дополнительный софт.
Начинаем с установки openoffice.org-3, лирическое отступление, последовательность установки подобрана по ходу десятка экспериментов и я даю её в том виде в котором она вызывает меньше всего проблем.
Здесь мы конфигурируем ОпенОфис и его зависимости затем пытаемся скачать все необходимые исходники.
Процесс сборки офиса совсем не быстрый и этим хинтом мы экономим себе время.
valg# cd /usr/ports/editors/openoffice.org-3
valg# make config-recursive fetch-recursive
На скачивании исходников для openJDK все валиться с ошибкой и просьбой скачать часть архивов руками — скачиваем кладем в
запускаем по новой но уже без конфигурирования
valg# cd /usr/ports/editors/openoffice.org-3
valg# make fetch-recursive install clean
На этом моменте у нас появляется куча свободного времени — на двухпроцессорном сервере офис собирался около 12 часов.
После установки проверяем запуск офиса в режиме демона
valg# /usr/local/openoffice.org-3.3.0/openoffice.org3/program/soffice.bin -headless -nofirststartwizard -accept="socket,host=localhost,port=8100;urp;StarOffice.Service"
Если все нормально то в выводе
мы увидим нечто подобное
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root soffice.bi 53172 5 stream /tmp/OSL_PIPE_0_SingleOfficeIPC_44e0c34da8623980ccf9f8299a62e4fb root soffice.bi 53172 15 tcp4 127.0.0.1:8100 *:* root soffice.bi 53172 16 tcp4 *:* *:*
Если же ничего подобного нет, значит что-то пошло не так, и надо гуглить на тему запуска офиса как демона.
Следующий шаг установка JDK16
valg# cd /usr/ports/java/jdk16
valg# make fetch-recursive
Здесь нам тоже придется скачать кучу пакетов руками, в общем внимательно читаем что нам пишет вывод make.
Далее ставим и настраиваем MYSQL
valg# cd /usr/ports/databases/mysql51-server/
valg# make install clean
valg# cd /usr/ports/databases/mysql51-scripts/
valg# make install clean
valg# echo 'mysql_enable="YES"' >> /etc/rc.conf
valg# cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf
В файле my.cnf надо добавить следующие строчки в соответствующие секции
[client]
default-character-set=utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8
[mysql]
default-character-set=utf8
ну и далее стартуем сервер и запускаем постинсталяционный скрипт
valg# service mysql-server start
valg# /usr/local/bin/mysql_secure_installation
Тут есть два пути, первый — ничего больше не настраивать, а в дальнейшем в настройках openmeetings указать пароль root для MYSQL и openmeetings сам создаст необходимые ему базы и таблицы, довольно спорный с точки зрения безопасности путь.
И второй — создать все самим. На всякий случай для него команды я тоже приведу
valg# mysql -p
mysql> CREATE USER 'openmeetings'@'localhost' IDENTIFIED BY 'secret_password';
mysql> GRANT USAGE ON *.* TO 'openmeetings'@'localhost' IDENTIFIED BY 'secret_password';
mysql> CREATE DATABASE IF NOT EXISTS `openmeetings`;
mysql> GRANT ALL PRIVILEGES ON `openmeetings`.* TO 'openmeetings'@'localhost';
как-то так.
Теперь ставим все что нужно для конвертирования документов:
valg# cd /usr/ports/graphics/swftools
valg# make install clean
valg# cd /usr/ports/graphics/ImageMagick
valg# make install clean
valg# cd /usr/ports/multimedia/ffmpeg
valg# make install clean
valg# cd /usr/ports/audio/sox
valg# make install clean
Описанное выше в общих чертах есть в вики по Openmeetings, сейчас переходим к тому чего в вики нет.
Openmeetings писался явно под Linux и из-за этого во FreeBSD возникают многочисленные мелкие и не очень проблемы.
Первая проблема — пути, хотя на первый взгляд используются относительные пути и даже местами можно их подредактировать, но только местами часть путей жестко прописана в коде и со структурой каталогов FreeBSD не срастается.
Решение — устанавливать Openmeetings в каталог
Вторая проблема — использование bash, в общем не большая проблема легко решаемая
valg# cd /usr/ports/shells/bash
valg# make install clean
valg# cp /usr/local/bin/bash /usr/bin/
вместо последней строчки можно сделать симлинк.
Третья проблема — UTF-8! И это уже проблема самой FreeBSD, выражается она в нечитаемости русского текста в конвертированных документах и заголовках приглашений (возможно еще где-то вылазит, но эти два места особенно критичны). Причина в том что конвертирование производиться консольными утилитами, а консоль у нас UTF-8 совсем не умеет, по крайней мере в части русского языка. Решение — использовать костыль в виде jfbterm это программа позволяет в консоли отображать юникод, правда со вводом на русском в консоли все совсем плохо.
valg# cd /usr/ports/sysutils/jfbterm
valg# make -DBATCH install clean
valg# cap_mkdb /usr/share/misc/termcap
Далее файле /usr/local/etc/jfbterm.conf ищем строчку:
меняем на
потом ищем
# UTF-8
#encoding.UTF-8: UTF-8,iso10646.1
убираем коментарий со строчки
encoding.UTF-8: UTF-8,iso10646.1
после этого из консоли
valg# setenv LANG ru_RU.UTF-8
valg# jfbterm
теперь можно работать с юникодом в консоли, это было описание костыля, далее я еще вернусь к этому моменту.
Забегая вперед для тех кто решит экспериментировать с ночными сборками openmeetings 2.0.0 (
живет здесь ) рассказываю о еще двух моментах.
Первый, для конвертации документов там используется jodconverter-core-3.0-beta-4
живет здесь и лежать содержимое архива по ссылке выше должно в
/usr/local/opt/red5/webapps/openmeetings/jodconverter-core-3.0-beta-4
Второе вылазит из первого, те-же жестко прописанные в коде jodconverter пути, а именно, он ищет опенофис в каталоге
решение простое создаем каталог /opt в корневой директории и делаем симлинк
valg# ln -s /usr/local/openoffice.org-3.3.0/openoffice.org3 /opt
Ну вроде все необходимое установили, подводные камни разобрали, переходим собственно к установке Openmeetings.
Идем
сюда и забираем архив. Содержимое архива, а именно каталог red5 распаковываем в
ниже путь и листинг того что должно получиться
valg# ls /usr/local/opt/red5
boot.jar license.txt red5-debug.bat red5-highperf.sh red5.bat webapps
conf log red5-debug.sh red5-shutdown.bat red5.jar work
lib plugins red5-highperf.bat red5-shutdown.sh red5.sh
поскольку паковали архив явно под виндой права на исполнение со скриптов послетали, это нужно исправить.
valg# chmod 7444 red5.sh
valg# chmod 7444 red5-shutdown.sh
valg# chmod 7444 red5-debug.sh
valg# chmod 7444 red5-highperf.sh
Далее правим настройки Openmeetings
valg# cd /usr/local/opt/red5/webapps/openmeetings/WEB-INF/classes/META-INF/
valg# cp persistence.xml persistence.xml.old
valg# cp mysql_persistence.xml persistence.xml
В файле persistence.xml прописываем пароль рута от MYSQL (я описываю простой вариант). В поле «Password» вместо ROOTPASSWORD вписываем пароль который установили руту в MYSQL.
<property name="openjpa.ConnectionProperties" value="DriverClassName=com.mysql.jdbc.Driver, Url=jdbc:mysql://localhost:3306/openmeetings?autoReconnect=true&useUnicode= true&createDatabaseIfNotExist=true&characterEncoding=utf-8&connectionCollation=utf8_general_ci&cachePrepStmts=true&cacheCallableStatements= true&cacheServerConfiguration=true&useLocalSessionState=true&elideSetAutoCommits= true&alwaysSendSetIsolation=false&enableQueryTimeouts=false&prepStmtCacheSize= 3000&prepStmtCacheSqlLimit=1000, MaxActive=100, MaxWait=10000, TestOnBorrow=true, poolPreparedStatements=true, Username=root, Password=ROOTPASSWORD"/>
По большому счету на этом все настройки и заканчиваются — можно пробовать запускать.
Для этого логинимся в консоль и делаем следующие:
valg# setenv LANG ru_RU.UTF-8
valg# jfbterm
valg# cd /usr/local/opt/red5
valg# ./red5.sh
Выжидаем минуты две и из другой консоли проверяем что у нас получилось.
В выводе должны быть следующие строчки:
USER COMMAND PID FD PROTO LOCAL ADDRESS FOREIGN ADDRESS root java 53043 69 tcp4 *:9999 *:* root java 53043 127 tcp4 *:1935 *:* root java 53043 272 tcp4 *:5080 *:* root java 53043 274 tcp4 *:8088 *:*
Если они есть переходим к следующему этапу, если нет то ждем еще пару минут red5 не очень быстро запускается, если ничего так и не появилось — идем читать логи и гуглить.
В своем любимом браузере набираем
http://IP_сервера:5080/openmeetings/install
и попадаем на страничку первоначальной настройки. Соглашаемся приступить к Step 1 и дальше просто заполняем необходимые поля, по окончании нажимаем Install внизу странички и ждем несколько минут, пока не появиться приглашение войти в программу — можно кликнуть по ссылке, а можно просто в браузере набрать
http://IP_сервера:5080/openmeetings/
Для работы серверу требуються TCP порты 1935, 5080, 8088.
Работает Openmeetings вполне стабильно, нареканий пока особо не было. Из крупных минусов не хочет воспринимать документы с расширением .TXT как это вылечить способа я не нашел. С версией 2.0.0 таких проблем нет, зато есть куча других :)
Собственно все, на этом установка закончена. Остается решить проблему с автозапуском всего этого хозяйства при перезагрузке и придумать как это все запускать от не привелегированного пользователя. Поскольку у нас сервер запускается по требованию эти проблемы не сильно актуальны, но решать их все таки надо. Буду благодарен если кто подскажет решение.
Надеюсь кому нибудь эта сумбурная статья поможет.