diff --git a/bbb-webrtc-sfu b/bbb-webrtc-sfu
index 400fe63..8dfb34d 160000
--- a/bbb-webrtc-sfu
+++ b/bbb-webrtc-sfu
@@ -1 +1 @@
-Subproject commit 400fe636e63563437fb112c2df0261d6be9f103e
+Subproject commit 8dfb34d808b4648873340877904500629ba55dc6
diff --git a/conf/sip_profiles/example.xml b/conf/sip_profiles/example.xml
index fe8dd5b..513d245 100644
--- a/conf/sip_profiles/example.xml
+++ b/conf/sip_profiles/example.xml
@@ -6,6 +6,7 @@
+
-->
diff --git a/docker-compose.greenlight.yml b/docker-compose.greenlight.yml
index 0ca79fa..9dc0b6e 100644
--- a/docker-compose.greenlight.yml
+++ b/docker-compose.greenlight.yml
@@ -2,7 +2,6 @@ version: '3.6'
services:
greenlight:
- container_name: greenlight
image: bigbluebutton/greenlight:v2
restart: unless-stopped
env_file: .env
@@ -25,4 +24,4 @@ services:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
volumes:
- - ./postgres-data:/var/lib/postgresql/data
\ No newline at end of file
+ - ./postgres-data:/var/lib/postgresql/data
diff --git a/docker-compose.recordings.yml b/docker-compose.recordings.yml
new file mode 100644
index 0000000..b6b188c
--- /dev/null
+++ b/docker-compose.recordings.yml
@@ -0,0 +1,15 @@
+version: '3.6'
+services:
+ recordings:
+ build: mod/recordings
+ depends_on:
+ - redis
+ environment:
+ DOMAIN: ${DOMAIN}
+ volumes:
+ - bigbluebutton:/var/bigbluebutton
+ - vol-freeswitch:/var/freeswitch/meetings
+ - vol-kurento:/var/kurento
+ networks:
+ bbb-net:
+ ipv4_address: 10.7.7.16
\ No newline at end of file
diff --git a/docker-compose.webhooks.yml b/docker-compose.webhooks.yml
index b7ed70b..556afb2 100644
--- a/docker-compose.webhooks.yml
+++ b/docker-compose.webhooks.yml
@@ -6,8 +6,8 @@ services:
environment:
DOMAIN: ${DOMAIN}
SHARED_SECRET: ${SHARED_SECRET}
- extra_hosts:
- - "redis:10.7.7.5"
+ depends_on:
+ - redis
networks:
bbb-net:
ipv4_address: 10.7.7.15
\ No newline at end of file
diff --git a/docker-compose.yml b/docker-compose.yml
index c124ac7..8511856 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -9,6 +9,7 @@ services:
environment:
DEV_MODE: ${DEV_MODE:-}
DOMAIN: ${DOMAIN}
+ ENABLE_RECORDING: ${ENABLE_RECORDING:-false}
SHARED_SECRET: ${SHARED_SECRET}
WELCOME_MESSAGE: ${WELCOME_MESSAGE:-}
WELCOME_FOOTER: ${WELCOME_FOOTER}
@@ -17,6 +18,8 @@ services:
TURN_SECRET: ${TURN_SECRET:-}
volumes:
- bigbluebutton:/var/bigbluebutton
+ - vol-freeswitch:/var/freeswitch/meetings
+ - vol-kurento:/var/kurento
networks:
bbb-net:
ipv4_address: 10.7.7.2
@@ -41,10 +44,11 @@ services:
volumes:
- ./conf/sip_profiles:/etc/freeswitch/sip_profiles/external
- ./conf/dialplan_public:/etc/freeswitch/dialplan/public_docker
+ - vol-freeswitch:/var/freeswitch/meetings
network_mode: host
nginx:
- image: nginx:1.19-alpine
+ build: mod/nginx
restart: unless-stopped
depends_on:
- etherpad
@@ -54,8 +58,6 @@ services:
- "8080:80"
volumes:
- bigbluebutton:/var/bigbluebutton
- - ./mod/nginx/bbb:/etc/nginx/bbb
- - ./mod/nginx/bigbluebutton:/etc/nginx/conf.d/default.conf
- ${DEFAULT_PRESENTATION:-/dev/null}:/etc/nginx/html/default.pdf
network_mode: host
extra_hosts:
@@ -79,8 +81,6 @@ services:
redis:
image: redis:6.0-alpine
restart: unless-stopped
- ports:
- - "127.0.0.1:6379:6379" # TODO: remove as soon as we updated all redis host references
networks:
bbb-net:
ipv4_address: 10.7.7.5
@@ -103,6 +103,8 @@ services:
KMS_TURN_URL:
KMS_NETWORK_INTERFACES: ${NETWORK_INTERFACE:-}
network_mode: host
+ volumes:
+ - vol-kurento:/var/kurento
webrtc-sfu:
build:
@@ -167,6 +169,8 @@ services:
volumes:
bigbluebutton:
+ vol-freeswitch:
+ vol-kurento:
networks:
bbb-net:
diff --git a/mod/core/Dockerfile b/mod/core/Dockerfile
index 5833bde..7b4cdcb 100644
--- a/mod/core/Dockerfile
+++ b/mod/core/Dockerfile
@@ -4,7 +4,6 @@ MAINTAINER ffdixon@bigbluebutton.org
# TODO:
# - separate bbb-apps into an own container
# - separate bbb-web
-# - remove systemd
ENV DEBIAN_FRONTEND noninteractive
ENV container docker
@@ -45,7 +44,7 @@ RUN apt-get update && apt-get install -y bbb-web \
bbb-fsesl-akka bbb-apps-akka bbb-transcode-akka bbb-apps \
bbb-apps-video bbb-apps-screenshare bbb-apps-video-broadcast
-# -- avoid blocking java
+# -- avoid blocking java
# https://github.com/bigbluebutton/bigbluebutton/issues/8959
RUN sed -i 's|securerandom.source=file:/dev/random|securerandom.source=file:/dev/urandom|g' /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/java.security
@@ -69,8 +68,6 @@ COPY red5-webapps/screenshare/application.conf /usr/share/red5/webapps/screensha
COPY red5-webapps/video/bigbluebutton-video.properties /usr/share/red5/webapps/video/WEB-INF/bigbluebutton-video.properties
COPY red5-webapps/video-broadcast/video-broadcast.properties /usr/share/red5/webapps/video-broadcast/WEB-INF/video-broadcast.properties
-COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml
-
COPY web/bigbluebutton.properties /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties.tmpl
COPY web/turn-stun-servers.xml /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml.tmpl
@@ -79,6 +76,10 @@ COPY bbb-fsesl-akka/application.conf /etc/bbb-fsesl-akka/application.conf
COPY bbb-transcode-akka/application.conf /etc/bbb-transcode-akka/application.conf
COPY web-run.sh /usr/share/bbb-web/run-prod.sh
+# add default presentation thumbnail
+RUN mkdir -p /usr/share/bigbluebutton/blank \
+ && wget -O /usr/share/bigbluebutton/blank/blank-thumb.png https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/v2.2.20/bigbluebutton-config/slides/blank-thumb.png
+
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY entrypoint.sh /entrypoint.sh
@@ -87,4 +88,3 @@ RUN mkdir -p /var/log/supervisor
ENTRYPOINT ["/entrypoint.sh"]
CMD []
-
diff --git a/mod/core/entrypoint.sh b/mod/core/entrypoint.sh
index bb06ca8..ac2585d 100755
--- a/mod/core/entrypoint.sh
+++ b/mod/core/entrypoint.sh
@@ -3,16 +3,27 @@
export LANG=en_US.UTF-8
# generate bbb folders
+mkdir -p /var/bigbluebutton/events
+mkdir -p /var/bigbluebutton/captions
+mkdir -p /var/bigbluebutton/captions/inbox
+mkdir -p /var/bigbluebutton/basic_stats
mkdir -p /var/bigbluebutton/recording/raw
mkdir -p /var/bigbluebutton/recording/process
mkdir -p /var/bigbluebutton/recording/publish
+mkdir -p /var/bigbluebutton/recording/publish/presentation
+mkdir -p /var/bigbluebutton/recording/status
mkdir -p /var/bigbluebutton/recording/status/recorded
mkdir -p /var/bigbluebutton/recording/status/archived
mkdir -p /var/bigbluebutton/recording/status/processed
mkdir -p /var/bigbluebutton/recording/status/sanity
mkdir -p /var/bigbluebutton/published
+mkdir -p /var/bigbluebutton/published/presentation
mkdir -p /var/bigbluebutton/deleted
mkdir -p /var/bigbluebutton/unpublished
+mkdir -p /var/bigbluebutton/playback
+
+# add playback-presentation to /var/bigbluebutton volume
+cp -r /usr/src/bbb-src-playback/* /var/bigbluebutton/playback
# -- fix directory permissions
chown -R bigbluebutton:bigbluebutton /var/bigbluebutton
diff --git a/mod/core/supervisord.conf b/mod/core/supervisord.conf
index 2a581a5..44d39f7 100644
--- a/mod/core/supervisord.conf
+++ b/mod/core/supervisord.conf
@@ -41,6 +41,4 @@ directory=/usr/share/bbb-transcode-akka
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
stderr_logfile=/dev/fd/2
-stderr_logfile_maxbytes=0
-
-
+stderr_logfile_maxbytes=0
\ No newline at end of file
diff --git a/mod/core/web/bigbluebutton.properties b/mod/core/web/bigbluebutton.properties
index 2af6d9f..3f499c9 100644
--- a/mod/core/web/bigbluebutton.properties
+++ b/mod/core/web/bigbluebutton.properties
@@ -19,7 +19,7 @@
#
# These are the default properites for BigBlueButton Web application
-# Default loglevel.
+# Default loglevel.
appLogLevel=DEBUG
#----------------------------------------------------
@@ -189,18 +189,22 @@ userInactivityThresholdInMinutes=30
# warning before being logged out.
userActivitySignResponseDelayInMinutes=5
-# Disable recording by default.
+# Disable recording by default.
# true - don't record even if record param in the api call is set to record
# false - when record param is passed from api, override this default
+{{ if isTrue .Env.ENABLE_RECORDING }}
+disableRecordingDefault=false
+{{ else }}
disableRecordingDefault=true
+{{ end }}
# Start recording when first user joins the meeting.
# For backward compatibility with 0.81 where whole meeting
-# is recorded.
+# is recorded.
autoStartRecording=false
# Allow the user to start/stop recording.
-allowStartStopRecording=false
+allowStartStopRecording=true
# Allow webcams streaming reception only to and from moderators
webcamsOnlyForModerator=false
diff --git a/mod/etherpad/settings.json b/mod/etherpad/settings.json
index 1261824..c5bd1a9 100644
--- a/mod/etherpad/settings.json
+++ b/mod/etherpad/settings.json
@@ -310,7 +310,12 @@
* instead of the reverse proxy's IP.
*/
"trustProxy": true,
-
+
+ /*
+ * When embedding the pads in an iframe set this to true.
+ */
+ "forceSameSiteNone": false,
+
/*
* Privacy: disable IP logging
*/
diff --git a/mod/freeswitch/Dockerfile b/mod/freeswitch/Dockerfile
index a15c4fc..5b0ce8a 100644
--- a/mod/freeswitch/Dockerfile
+++ b/mod/freeswitch/Dockerfile
@@ -75,6 +75,16 @@ RUN cd /etc \
&& svn checkout https://github.com/alangecker/bbb-packages/tags/$GIT_TAG/bbb-freeswitch-core/data/opt/freeswitch/etc/freeswitch \
&& rm -rf /etc/freeswitch/.svn
+# the current available freeswitch-mod-opusfile is broken,
+# it can't write any .opus files.
+# there is already a fix, but it is not included yet.
+# https://github.com/signalwire/freeswitch/pull/719/files
+# we rather switch to the binary built by bigbluebutton and add its dependencies
+RUN wget -O /usr/lib/freeswitch/mod/mod_opusfile.so https://github.com/bbb-pkg/bbb-freeswitch-core/raw/43f3a47af1fcf5ea559e16bb28b900c925a7f2c3/opt/freeswitch/lib/freeswitch/mod/mod_opusfile.so \
+ && wget -O /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb https://launchpad.net/~bigbluebutton/+archive/ubuntu/support/+files/libopusenc0_0.2.1-1bbb1_amd64.deb \
+ && dpkg -i /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb \
+ && rm /tmp/libopusenc0_0.2.1-1bbb1_amd64.deb
+
# add modifications
COPY ./conf /etc/freeswitch/
diff --git a/mod/freeswitch/entrypoint.sh b/mod/freeswitch/entrypoint.sh
index d252b27..072bcba 100755
--- a/mod/freeswitch/entrypoint.sh
+++ b/mod/freeswitch/entrypoint.sh
@@ -15,6 +15,9 @@ for IP in "${ADDR[@]}"; do
iptables -I INPUT -p udp --dport 5060 -s $IP -j ACCEPT
done
+chown -R freeswitch:daemon /var/freeswitch/meetings
+chmod 777 /var/freeswitch/meetings
+
dockerize \
-template /etc/freeswitch/vars.xml.tmpl:/etc/freeswitch/vars.xml \
-template /etc/freeswitch/autoload_configs/conference.conf.xml.tmpl:/etc/freeswitch/autoload_configs/conference.conf.xml \
diff --git a/mod/html5/Dockerfile b/mod/html5/Dockerfile
index 96d1e7b..1be4b9c 100644
--- a/mod/html5/Dockerfile
+++ b/mod/html5/Dockerfile
@@ -14,7 +14,7 @@ USER meteor
ENV METEOR_VERSION 1.8.1
RUN curl -sL https://install.meteor.com?release=$METEOR_VERSION | sed s/--progress-bar/-sL/g | /bin/sh
-ENV TAG v2.2.22
+ENV TAG v2.2.23
RUN cd ~ \
&& svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/bigbluebutton-html5 \
&& mv ~/bigbluebutton-html5 ~/source \
@@ -51,4 +51,4 @@ USER meteor
ENTRYPOINT ["/entrypoint.sh"]
# lets set the tag again, so that it is include in the image for later version retrieval
-ENV TAG v2.2.22
+ENV TAG v2.2.23
diff --git a/mod/html5/settings.yml b/mod/html5/settings.yml
index 2f0b247..789d06b 100644
--- a/mod/html5/settings.yml
+++ b/mod/html5/settings.yml
@@ -11,7 +11,7 @@ public:
appName: BigBlueButton HTML5 Client
bbbServerVersion: 2.2
copyright: "©2020 BigBlueButton Inc."
- html5ClientBuild: 992
+ html5ClientBuild: 1006
helpLink: https://bigbluebutton.org/html5/
lockOnJoin: true
cdn: ""
@@ -160,15 +160,15 @@ public:
constraints:
frameRate: 10
- id: low
- name: Low quality
+ name: Low
default: false
bitrate: 100
- id: medium
- name: Medium quality
+ name: Medium
default: true
bitrate: 200
- id: high
- name: High quality
+ name: High
default: false
bitrate: 500
- id: hd
@@ -200,11 +200,26 @@ public:
profile: low-u25
- threshold: 30
profile: low-u30
+ pagination:
+ # whether to globally enable or disable pagination.
+ enabled: false
+ # how long (in ms) the negotiation will be debounced after a page change.
+ pageChangeDebounceTime: 2500
+ # video page sizes for DESKTOP endpoints. It stands for the number of SUBSCRIBER streams.
+ # PUBLISHERS aren't accounted for .
+ # A page size of 0 (zero) means that the page size is unlimited (disabled).
+ desktopPageSizes:
+ moderator: 0
+ viewer: 5
+ # video page sizes for MOBILE endpoints
+ mobilePageSizes:
+ moderator: 2
+ viewer: 2
pingPong:
clearUsersInSeconds: 180
pongTimeInSeconds: 15
allowOutsideCommands:
- toggleRecording: false
+ toggleRecording: true
toggleSelfVoice: false
poll:
enabled: true
diff --git a/mod/nginx/Dockerfile b/mod/nginx/Dockerfile
new file mode 100644
index 0000000..97a0877
--- /dev/null
+++ b/mod/nginx/Dockerfile
@@ -0,0 +1,14 @@
+FROM nginx:1.19-alpine
+
+RUN apk add subversion
+
+ENV TAG v2.2.20
+
+# get bbb-playback-presentation web files
+RUN mkdir /www \
+ && cd /www \
+ && svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/presentation/playback/presentation/ \
+ && rm -rf /www/presentation/.svn /www/presentation/0.*
+
+COPY ./bbb /etc/nginx/bbb
+COPY ./bigbluebutton /etc/nginx/conf.d/default.conf
\ No newline at end of file
diff --git a/mod/nginx/bbb/presentation.nginx b/mod/nginx/bbb/presentation.nginx
index 20ed5b4..6f8abca 100644
--- a/mod/nginx/bbb/presentation.nginx
+++ b/mod/nginx/bbb/presentation.nginx
@@ -16,18 +16,8 @@
# with BigBlueButton; if not, see .
#
- location /playback/presentation/playback.html {
- return 301 /playback/presentation/0.81/playback.html?$query_string;
- # If you have recordings from 0.9.0 beta versions and are sure
- # that you will never want to play recordings made with
- # BigBlueButton 0.81, comment the line above and uncomment the
- # following line:
- #return 301 /playback/presentation/0.9.0/playback.html?$query_string;
- }
-
location /playback/presentation {
- root /var/bigbluebutton;
- index index.html index.htm;
+ alias /www/presentation;
}
location /presentation {
diff --git a/mod/recordings/Dockerfile b/mod/recordings/Dockerfile
new file mode 100644
index 0000000..ed793d7
--- /dev/null
+++ b/mod/recordings/Dockerfile
@@ -0,0 +1,84 @@
+
+FROM ruby:2.4-slim-buster
+
+# install apt dependencies
+RUN apt-get update && apt-get install -y \
+ wget \
+ subversion \
+ rsync \
+ build-essential \
+ libsystemd-dev \
+ python3 \
+ python3-pyinotify \
+ python3-lxml \
+ python3-icu \
+ ffmpeg \
+ poppler-utils \
+ imagemagick
+
+# compile and install mkclean
+RUN cd /tmp \
+ && wget https://netcologne.dl.sourceforge.net/project/matroska/mkclean/mkclean-0.8.10.tar.bz2 \
+ && tar -xf /tmp/mkclean-0.8.10.tar.bz2 \
+ && cd /tmp/mkclean-0.8.10 \
+ && sed -i 's/\r//g' ./mkclean/configure.compiled \
+ && ./mkclean/configure.compiled \
+ && make -C mkclean \
+ && cp ./release/gcc_linux_x64/mkclean /usr/bin/mkclean \
+ && rm -r /tmp/mkclean-0.8.10
+
+# add dockerize
+ENV DOCKERIZE_VERSION v0.6.1
+RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
+ && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
+
+RUN mkdir -p \
+ /usr/local/bigbluebutton \
+ /usr/local/bigbluebutton/core \
+ /etc/bigbluebutton \
+ /var/log/bigbluebutton \
+ /var/log/bigbluebutton/presentation
+
+ENV TAG v2.2.23
+
+# add bbb-record-core (lib, scripts and Gemfile)
+RUN cd /usr/local/bigbluebutton/core \
+ && svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/core/lib \
+ && svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/core/scripts \
+ && rm -rf /usr/local/bigbluebutton/core/*/.svn \
+ && wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG/record-and-playback/core/Gemfile.lock \
+ && wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG/record-and-playback/core/Gemfile
+
+
+# add bbb-playback-presentation scripts
+RUN cd /tmp \
+ && svn checkout https://github.com/bigbluebutton/bigbluebutton/tags/$TAG/record-and-playback/presentation/scripts \
+ && rsync -av /tmp/scripts/ /usr/local/bigbluebutton/core/scripts/ \
+ && rm -rf /tmp/scripts
+
+# install ruby dependencies
+RUN cd /usr/local/bigbluebutton/core \
+ && gem install builder \
+ && gem install bundler \
+ && /usr/local/bin/bundle
+
+# add bbb-record with some adjustments so bbb-record works in this environment
+RUN cd /usr/bin \
+ && wget https://raw.githubusercontent.com/bigbluebutton/bigbluebutton/$TAG/bigbluebutton-config/bin/bbb-record \
+ && chmod +x /usr/bin/bbb-record \
+ && sed -i 's/^BBB_WEB.*/BBB_WEB=""/' /usr/bin/bbb-record \
+ && sed -i 's/systemctl.*//' /usr/bin/bbb-record \
+ && echo "BIGBLUEBUTTON_RELEASE=$TAG" > /etc/bigbluebutton/bigbluebutton-release \
+ && touch /var/log/bigbluebutton/bbb-web.log
+
+# create user
+# the ID should matcht the one creating the files in `core`
+RUN groupadd -g 998 bigbluebutton && useradd -m -u 998 -g bigbluebutton bigbluebutton
+
+COPY bigbluebutton.yml /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl
+ADD log-collector.py /log-collector.py
+ADD entrypoint.sh /entrypoint.sh
+ENTRYPOINT dockerize \
+ -template /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml.tmpl:/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml \
+ /entrypoint.sh
\ No newline at end of file
diff --git a/mod/core/bigbluebutton.yml b/mod/recordings/bigbluebutton.yml
similarity index 92%
rename from mod/core/bigbluebutton.yml
rename to mod/recordings/bigbluebutton.yml
index b6ade01..c20328a 100644
--- a/mod/core/bigbluebutton.yml
+++ b/mod/recordings/bigbluebutton.yml
@@ -1,4 +1,4 @@
-bbb_version: '2.1.0'
+bbb_version: '2.2.23'
raw_audio_src: /var/freeswitch/meetings
raw_video_src: /usr/share/red5/webapps/video/streams
kurento_video_src: /var/kurento/recordings
@@ -7,7 +7,7 @@ raw_screenshare_src: /usr/share/red5/webapps/screenshare/streams
raw_webrtc_deskshare_src: /usr/share/red5/webapps/video-broadcast/streams
raw_deskshare_src: /var/bigbluebutton/deskshare
raw_presentation_src: /var/bigbluebutton
-notes_endpoint: http://localhost:9001/p
+notes_endpoint: http://etherpad:9001/p
# Specify the notes formats we archive
# txt, doc and odt are also supported
notes_formats:
@@ -25,7 +25,7 @@ events_dir: /var/bigbluebutton/events
recording_dir: /var/bigbluebutton/recording
published_dir: /var/bigbluebutton/published
captions_dir: /var/bigbluebutton/captions
-playback_host: meet.livingutopia.org
+playback_host: {{ .Env.DOMAIN }}
playback_protocol: https
# For DEVELOPMENT
diff --git a/mod/recordings/entrypoint.sh b/mod/recordings/entrypoint.sh
new file mode 100644
index 0000000..f4b8318
--- /dev/null
+++ b/mod/recordings/entrypoint.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# print all logs to stdout
+python3 -u /log-collector.py &
+
+cd /usr/local/bigbluebutton/core/scripts
+PATH_CHECK="/var/bigbluebutton/recording/status"
+while true; do
+ echo "execute workers..."
+ if [[ $(compgen -G "$PATH_CHECK/recorded/*.done") ]];then
+ bundle exec ruby rap-archive-worker.rb
+ fi
+ if [[ $(compgen -G "$PATH_CHECK/archived/*.done") ]];then
+ bundle exec ruby rap-sanity-worker.rb
+ fi
+ if [[ $(compgen -G "$PATH_CHECK/sanity/*.done") ]];then
+ bundle exec ruby rap-process-worker.rb
+ fi
+ if [[ $(compgen -G "$PATH_CHECK/processed/*.done") ]];then
+ bundle exec ruby rap-publish-worker.rb
+ fi
+ #bundle exec ruby rap-caption-inbox.rb
+ if [[ $(compgen -G "$PATH_CHECK/ended/*.done") ]];then
+ bundle exec ruby rap-events-worker.rb
+ fi
+ sleep 30s
+done
diff --git a/mod/recordings/log-collector.py b/mod/recordings/log-collector.py
new file mode 100644
index 0000000..af683e6
--- /dev/null
+++ b/mod/recordings/log-collector.py
@@ -0,0 +1,45 @@
+# this script sends all entries from different logfiles
+# to stdout, so that they appear in the docker logs
+
+import threading
+import subprocess
+import time
+import pyinotify
+import os
+import re
+import sys
+
+log_dir = '/var/log/bigbluebutton'
+
+def thread_function(name, filename):
+ f = subprocess.Popen(['tail','-F', '-n', '0', filename],\
+ stdout=subprocess.PIPE,stderr=subprocess.PIPE)
+ while True:
+ line = f.stdout.readline().decode('utf-8').strip()
+ if len(line):
+ print(name.ljust(10)+' |', line)
+ sys.stdout.flush()
+
+def tail_file(name, filename):
+ x = threading.Thread(target=thread_function, args=(name, filename,))
+ x.start()
+
+
+tail_file('rap-worker', log_dir+'/bbb-rap-worker.log')
+tail_file('sanity', log_dir+'/sanity.log')
+tail_file('publish', log_dir+'/post_publish.log')
+
+class EventHandler(pyinotify.ProcessEvent):
+ def process_IN_CREATE(self, event):
+ filename = os.path.basename(event.pathname)
+ if re.match('^archive-.*\.log$', filename):
+ tail_file('archive', event.pathname)
+ elif re.match('^process-.*\.log$', filename):
+ tail_file('process', event.pathname)
+
+
+wm = pyinotify.WatchManager()
+handler = EventHandler()
+notifier = pyinotify.Notifier(wm, handler)
+wdd = wm.add_watch(log_dir, pyinotify.IN_CREATE, rec=True)
+notifier.loop()
\ No newline at end of file
diff --git a/sample.env b/sample.env
index 8782e2a..89da73b 100644
--- a/sample.env
+++ b/sample.env
@@ -24,6 +24,14 @@ ENABLE_GREENLIGHT=true
# https://yourdomain/bbb-exporter
#ENABLE_PROMETHEUS_EXPORTER=true
+# Recording
+# IMPORTANT: this is currently a big privacy issues, because it will
+# record everything which happens in the conference, even when the button
+# suggets, that it does not.
+# https://github.com/bigbluebutton/bigbluebutton/issues/9202
+# make sure that you get peoples consent, before they join a room
+#ENABLE_RECORDING=true
+
# ====================================
# SECRETS
# ====================================
diff --git a/scripts/bbb-record b/scripts/bbb-record
new file mode 100755
index 0000000..64ec423
--- /dev/null
+++ b/scripts/bbb-record
@@ -0,0 +1,20 @@
+#!/bin/bash
+set -e
+
+cd $(dirname $0)/..
+
+# load .env
+if [ -f .env ]
+then
+ # exclude WELCOME_FOOTER because it may contain invalid characters
+ export $(cat .env | sed 's/#.*//g' | grep -v "WELCOME_FOOTER" | grep -v "WELCOME_MESSAGE" | xargs)
+fi
+
+if [ ! "$ENABLE_RECORDING" == true ]; then
+ echo "Error: recording is disabled why can't use bbb-record"
+ echo "set ENABLE_RECORDING in .env if you want to use it"
+ exit 1
+fi
+
+./scripts/compose exec recordings bbb-record $@
+./scripts/compose logs --tail=15 recordings
\ No newline at end of file
diff --git a/scripts/compose b/scripts/compose
index 7d9d785..a560126 100755
--- a/scripts/compose
+++ b/scripts/compose
@@ -57,4 +57,8 @@ if [ "$ENABLE_PROMETHEUS_EXPORTER" == true ]; then
COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.prometheus.yml"
fi
+if [ "$ENABLE_RECORDING" == true ]; then
+ COMPOSE_FILES="$COMPOSE_FILES -f docker-compose.recordings.yml"
+fi
+
docker-compose $COMPOSE_FILES $@
diff --git a/scripts/setup b/scripts/setup
index d04e93c..04fe462 100755
--- a/scripts/setup
+++ b/scripts/setup
@@ -45,6 +45,18 @@ while [[ -z "$DOMAIN" ]]; do
read -p "Please enter the domain name: " DOMAIN
done
+recording=""
+echo "Should the recording feature be included?"
+echo " IMPORTANT: this is currently a big privacy issues, because it will "
+echo " record everything which happens in the conference, even when the button"
+echo " suggets, that it does not."
+echo " make sure that you awalys get peoples consent, before they join a room!"
+echo " https://github.com/bigbluebutton/bigbluebutton/issues/9202"
+while [[ ! $recording =~ ^(y|n)$ ]]; do
+
+ read -p "Choice (y/n): " recording
+done
+
ip_correct=""
while [[ ! $ip_correct =~ ^(y|n)$ ]]; do
read -p "Is $EXTERNAL_IPv4 your external IPv4 address? (y/n): " ip_correct
@@ -92,6 +104,11 @@ then
sed -i "s/ENABLE_HTTPS_PROXY.*/#ENABLE_HTTPS_PROXY=true/" .env
fi
+if [ "$recording" == "y" ]
+then
+ sed -i "s/#ENABLE_RECORDING.*/ENABLE_RECORDING=true/" .env
+fi
+
if [ "$coturn" == "y" ]
then
sed -i "s/.*TURN_SERVER=.*/TURN_SERVER=turns:$DOMAIN:465?transport=tcp/" .env