BigBlueButton 2.7 Installationsanleitung

Diese BigBlueButton Installationsanleitung (Version 2.7) beschreibt alle notwendigen Installationsschritte auf Basis des Ubuntu 20.04.x LTS Betriebssystems inkl. weiterer Optimierungen Ihres BigBlueButton-Servers.

  1. Deinstallation BigBlueButton v. 2.5/6 (optional)
  2. Installation BigBlueButton v. 2.7

Die neue BigBlueButton Version 2.7 hat lange auf sich warten lassen, kommt dafür aber mit neuen Features.

Die minimalen Servervoraussetzungen für einen BigBlueButton Server sind:

  • Ubuntu 20.04 64-bit OS running Linux kernel 5.x
  • Latest version of docker installed
  • 16 GB of memory with swap enabled
  • 8 CPU cores, with high single-thread performance
  • 500 GB of free disk space (or more) for recordings, or 50GB if session recording is disabled on the server.
  • TCP ports 80 and 443 are accessible
  • UDP ports 16384 – 32768 are accessible
  • 250 Mbits/sec bandwidth (symmetrical) or more
  • TCP port 80 and 443 are not in use by another web server or reverse proxy
  • A hostname (such as bbb.example.com) for setup of a SSL certificate
  • IPV4 and IPV6 address

Serverempfehlungen:
netcup: https://www.netcup.de/vserver/#root-server-details
hetzner: https://www.hetzner.com/de/dedicated-rootserver/matrix-ax

Installationsquellen (Stand 19. Oktober 2023):
Ubuntu: https://releases.ubuntu.com/focal/
BigBlueButton: https://docs.bigbluebutton.org/administration/install

Für diese Installationsanleitung setzen wir folgende Bedingungen voraus:

* ein eigener Server für BigBlueButton 2.7.x auf Basis von Ubuntu 20.04.xLTS
* ein coturn-Server, betrieben auf einem separaten Server (Best-Practice mit Port 443)
* DNS-Einträge (A/AAA-Records) für BigBlueButton
* IPv4 und IPv6

Uninstall BigBlueButton 2.6 (optional)

BigBlueButton aktualisiert eine bestehende BigBlueButton-Version 2.6 im Zuge der Installation von v. 2.7.x selbständig. Wir empfehlen dennoch einen bereinigten Server. Sie können dafür das nachfolgende Skript nutzen:

sudo -s
nano /root/uninstall-bbb.sh

GIT/Codeberg: https://codeberg.org/criegerde/bigbluebutton/raw/branch/master/v2.7/uninstall.sh

Fügen Sie den gesamten Text hinzu:

#!/bin/bash
mkdir -p ~/bbb/
echo " » Sichere die 'apply-config.sh' ..."
cp /etc/bigbluebutton/bbb-conf/apply-config.sh ~/bbb/
echo " » Sichere die 'default.pdf' ..."
cp /var/www/bigbluebutton-default/assets/default.pdf ~/bbb/
cp /var/www/bigbluebutton-default/assets/favicon.ico ~/bbb/
echo " » Sichere die 'conference.conf.xml' ..."
cp /opt/freeswitch/conf/autoload_configs/conference.conf.xml ~/bbb/
echo " » Sichere die 'settings.yml' ..."
cp /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml ~/bbb/
echo " » Sichere die 'sip.nginx' ..."
cp /usr/share/bigbluebutton/nginx/sip.nginx ~/bbb/
echo " » Sichere Hintergrundbilder ..."
cp -ar /usr/share/meteor/bundle/programs/web.browser/app/resources/images/virtual-backgrounds ~/bbb/
cp /etc/bigbluebutton/bbb-html5.yml ~/bbb/
bbb-conf --stop
docker ps -q -all | xargs docker stop
docker ps -q -all | xargs docker rm
docker rmi --force $(docker images -a -q)
docker system prune
service docker stop
rm -rf /var/lib/docker/*
apt purge docker-ce docker-ce-cli containerd.io -y
dpkg -l | grep -w bbb |  awk '{print $2}' | xargs apt-get purge -y
dpkg -l | grep -w mongodb | awk '{print $2}' | xargs apt-get purge -y
dpkg -l | grep -w kurento | awk '{print $2}' | xargs apt-get purge -y
apt-get purge openjdk* openjdk-*-jre kms-* -y
apt-get autoremove -y
apt-get clean
apt-get purge ruby rubygems -y
rm /var/lib/gems/2.* -rf
update-rc.d nginx remove
apt purge nginx nginx-common -y
apt purge redis-server -y
rm -rf /var/lib/redis 
rm -rf /var/log/redis
cd /etc/apt/sources.list.d/
ls | grep bigbluebutton | xargs rm
ls | grep mongodb | xargs rm
ls | grep node | xargs rm
ls | grep rmescandon | xargs rm
ls | grep libreoffice | xargs rm
ls | grep docker | xargs rm
cd /etc/apt/trusted.gpg.d/
ls | grep bigbluebutton | xargs rm
ls | grep rmescandon | xargs rm
ls | grep libreoffice | xargs rm
sed -i 's/^deb \[arch\=amd64\] https\:\/\/download\.docker\.com\/linux\/ubuntu bionic stable$/\#deb \[arch\=amd64\] https\:\/\/download\.docker\.com\/linux\/ubuntu bionic stable/g' /etc/apt/sources.list
cd /var/lib/apt/lists/ && ls | grep bigbluebutton | xargs rm
cd /var/lib/apt/lists/ && ls | grep libreoffice | xargs rm
cd /var/lib/apt/lists/ && ls | grep certbot | xargs rm
cd /var/lib/apt/lists/ && ls | grep mongodb | xargs rm
cd /var/lib/apt/lists/ && ls | grep docker | xargs rm
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "BigBlueButton" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "Kurento" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "MongoDB" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "Docker" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
rm -rf /var/bigbluebutton /opt/freeswitch /usr/share/etherpad-lite /usr/local/bigbluebutton /etc/bigbluebutton  /usr/share/meteor /usr/share/bbb-libreoffice-conversion /usr/share/bbb-web /etc/systemd/system/bbb-webrtc-sfu.service.d /var/tmp/bbb-kms-last-restart.txt /var/log/bigbluebutton /var/log/kurento-media-server /var/log/bbb-apps-akka /var/log/bbb-fsesl-akka /var/log/bbb-webrtc-sfu /var/lib/kurento /var/kurento /var/log/mongodb /etc/kurento /run/bbb-fsesl-akka ./run/bbb-apps-akka /etc/systemd/system/multi-user.target.wants/bbb-web.service /etc/systemd/system/multi-user.target.wants/bbb-rap-resque-worker.service /etc/systemd/system/multi-user.target.wants/bbb-rap-starter.service ~/.bundle/cache
deluser bigbluebutton 
deluser mongodb
deluser kurento
delgroup mongodb
apt autoremove -y && apt autoclean -y
exit 0

Speichern Sie das Skript, machen es ausführbar

wget -O uninstall-bbb.sh https://codeberg.org/criegerde/bigbluebutton/raw/branch/master/v2.7/uninstall.sh
chmod +x /root/uninstall-bbb.sh

und führen es dann aus:

/root/uninstall-bbb.sh

Installation BigBlueButton v. 2.7

Überprüfen wir zuerst die Spracheinstellungen am Server, erwartet wird die Collation „en_US.UTF-8“:

sudo -s
cat /etc/default/locale

Das Ergebnis sollte wie folgt aussehen:

LANG="en_US.UTF-8"

Andernfalls korrigieren Sie diese Einstellungen mittels der nachfolgenden Befehle

apt install language-pack-en
update-locale LANG=en_US.UTF-8

und überprüfen dann, ob noch weitere Einträge in der Datei „/etc/default/locale“ vorhanden sind. Wenn ja, dann entfernen Sie diese bitte, melden sich vom System ab, dann wieder am System an und überprüfen die Ausgabe mittels des nachfolgenden Befehls erneut.

systemctl show-environment

Nun setzen wir den Hostnamen in der hosts-Datei und ersetzen die roten Werte:

nano /etc/hosts
[...]
127.0.0.1	localhost
127.0.1.1	bbb.ihredomain.de bbb

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
aaa.bbb.ccc.ddd  bbb.ihredomain.de bbb
[...]

Nach der hosts-Datei setzen wir noch den FQDN in der hostname-Datei:

nano /etc/hostname

Tragen Sie den Domänennamen (FQDN) ein:

bbb.ihredomain.de

Starten Sie nun den Server neu

reboot now

und fahren mit der Installation fort. Für die Installation nutzen wir ein Installationsskript, welches wir herunterladen und direkt ausführen. Wechseln Sie nach dem Neustart zuerst in den priviligierten Benutzermodus:

sudo -s

und bereiten das Installationsskript vor. Ersetzen Sie bbb.ihredomain.de mit ihrer gewünschten Domain und die Emailadresse mail@ihredomain.de mit einer für die Let’sEncrypt Zertifikatserstellung benötigten, gültigen Emailadresse.

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270 -s bbb.ihredomain.de -e mail@ihredomaine.de

Wenn Sie auch Greenlight mitinstallieren lassen wollen, dann ergänzen Sie den Parameter „-g“:

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270 -s bbb.ihredomain.de -e mail@ihredomaine.de -g

HINWEIS:
Möchte man eine dedizierte BBB-Version installieren und für Updates sperren (apt upgrade), so kann das wie folgt umgesetzt werden:

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270-2.7.1 -s bbb.ihredomain.de -e mail@ihredomaine.de

oder mit Greenlight

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270-2.7.1 -s bbb.ihredomain.de -e mail@ihredomaine.de -g

Die Installation startet und installiert Ihnen das aktuelle BigBlueButton 2.6 in wenigen Minuten (ca. 10 bis 20 Minuten), abhängig von der Bandbreite am Server. Nach Abschluss der Installation überprüfen Sie das BBB-System mittels

bbb-conf --check

Starten wir BBB neu und kontrollieren die Funktionsfähigkeit:

bbb-conf --restart

Um Problemen mit Verbindungen über verschiedene Netzwerke (bspw. verursacht durch NAT o. Ä.) zu verhindern, sollten Sie Ihren eigenen stun/coturn-Server nutzen. Die Funktionsfähigkeit des coturn-Servers lässt sich auf der Kommandozeile oder auf dieser Webseite online überprüfen.

Sofern Ihr coturn-Server erfolgreich überprüft wurde (srflx-Einträge mit OK quittiert), bearbeiten Sie die Datei apply-config.sh

mv /etc/bigbluebutton/bbb-conf/apply-config.sh /etc/bigbluebutton/bbb-conf/apply-config.sh.bak
touch /etc/bigbluebutton/bbb-conf/apply-config.sh
nano /etc/bigbluebutton/bbb-conf/apply-config.sh

GIT/Codeberg: https://codeberg.org/criegerde/bigbluebutton/raw/branch/master/v2.7/apply-config.sh

Kopieren Sie den Inhalt hinein und passen die roten Werte an.

#!/bin/bash

# Pull in the helper functions for configuring BigBlueButton
source /etc/bigbluebutton/bbb-conf/apply-lib.sh
TARGET=/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml

# enableUFWRules

# Variablen 
COTURN_URL="coturn.ihredomain.de"
COTURN_PORT="443"
COTURN_PASSWORD="Ihr-C0turn.Secret"

enableMultipleKurentos
echo ""

echo "  - Logging"
sed -i 's/appLogLevel=.*/appLogLevel=Error/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/level:.*/level: error/g' /usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml
sed -i 's/loglevel =.*/loglevel = "OFF"/g' /etc/bbb-fsesl-akka/application.conf
sed -i 's/stdout-loglevel =.*/stdout-loglevel = "OFF"/g' /etc/bbb-fsesl-akka/application.conf
echo ""

echo "  - Analyzing off"
sed -i 's/#disabledFeatures=.*/disabledFeatures=learningDashboard/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
grep -qxF "learningDashboardEnabled=false" /etc/bigbluebutton/bbb-web.properties || echo "learningDashboardEnabled=false" >> /etc/bigbluebutton/bbb-web.properties
grep -qxF "endWhenNoModerator=true" /etc/bigbluebutton/bbb-web.properties || echo "endWhenNoModerator=true" >> /etc/bigbluebutton/bbb-web.properties
grep -qxF "endWhenNoModeratorDelayInMinutes=5" /etc/bigbluebutton/bbb-web.properties || echo "endWhenNoModeratorDelayInMinutes=5" >> /etc/bigbluebutton/bbb-web.properties
grep -qxF "muteOnStart=true" /etc/bigbluebutton/bbb-web.properties || echo "muteOnStart=true" >> /etc/bigbluebutton/bbb-web.properties
echo ""

#echo "  - Enable recordings"
#sed -i 's/disableRecordingDefault=.*/disableRecordingDefault=false/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
#sed -i 's/breakoutRoomsRecord=.*/breakoutRoomsRecord=true/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
#sed -i 's/allowStartStopRecording=.*/allowStartStopRecording=true/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
#sed -i 's/autoStartRecording=.*/autoStartRecording=false/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
#echo ""

echo "  - Disable recordings"
sed -i 's/disableRecordingDefault=.*/disableRecordingDefault=true/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/breakoutRoomsRecord=.*/breakoutRoomsRecord=false/g' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/allowStartStopRecording=.*/allowStartStopRecording=false/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/autoStartRecording=.*/autoStartRecording=false/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
echo ""

echo "  - SIP-Setting"
sed -i "s/sipjsHackViaWs: .*/sipjsHackViaWs: true/" /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
echo ""

echo "  - Room information"
sed -i 's/defaultWelcomeMessage=.*/defaultWelcomeMessage=Vorname Nachname | Firma: \<b\>\%\%CONFNAME\%\%\<\/b\>/' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
sed -i 's/defaultWelcomeMessageFooter=.*/defaultWelcomeMessageFooter=Datenschutzerkl\&auml\;rung: \<a href\=\"https\:\/\/www\.ihredomain\.de\/dsgvo\" target\=\"\_blank\"\>hier\<\/a\>\./' /usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
echo ""

echo "  - Guestroom"
sed -i 's/"app.guest.windowTitle":.*/"app.guest.windowTitle": "Your Name - Guest Lobby",/g' /usr/share/meteor/bundle/programs/web.browser/app/locales/en.json
sed -i 's/"app.guest.windowTitle":.*/"app.guest.windowTitle": "Ihr Name - Wartebereich",/g' /usr/share/meteor/bundle/programs/web.browser/app/locales/de.json
echo ""

echo "  - Default PDF/favicon.ico"
cp ~/bbb/default.pdf /var/www/bigbluebutton-default/assets/default.pdf
cp ~/bbb/favicon.ico /var/www/bigbluebutton-default/assets/favicon.ico
echo ""

echo "  - Weblayout"
yq w -i $TARGET 'public.layout.hidePresentationOnJoin' false
yq w -i $TARGET 'public.layout.showParticipantsOnLogin' true
yq w -i $TARGET 'public.media.forceRelay' true
echo ""

echo "  - Tabtitle"
yq w -i $TARGET 'public.app.clientTitle' "Ihr Titel"
yq w -i $TARGET 'public.app.helpLink' "https://www.IhreWunschURL.de/"
echo ""

echo "  - Webcam"
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==low).bitrate' 100
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==medium).bitrate' 200
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==high).bitrate' 600
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==hd).bitrate' 800
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==low).default' false
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==medium).default' false
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==high).default' true
yq w -i $TARGET 'public.kurento.cameraProfiles.(id==hd).default' false
echo ""

echo "  - Screensharing"
yq w -i $TARGET 'public.kurento.screenshare.constraints.audio' true
yq w -i $TARGET 'public.kurento.screenshare.constraints.bitrate' 2000
yq w -i $TARGET 'public.kurento.screenshare.constraints.video.frameRate.ideal' 10
yq w -i $TARGET 'public.kurento.screenshare.constraints.video.frameRate.max' 20
yq w -i $TARGET 'public.kurento.screenshare.constraints.video.width.max' 1920
yq w -i $TARGET 'public.kurento.screenshare.constraints.video.height.max' 1080
echo ""

echo "  - Noiselevel"
sed -i 's/<param name="comfort-noise" value="1400"\/>/<param name="comfort-noise" value="0"\/>/g' /opt/freeswitch/conf/autoload_configs/conference.conf.xml
echo ""

chown meteor:meteor $TARGET
chown meteor:meteor $HTML5_CONFIG

echo "  - Update TURN server configuration turn-stun-servers.xml"
cat <<HERE > /usr/share/bbb-web/WEB-INF/classes/spring/turn-stun-servers.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="stun0" class="org.bigbluebutton.web.services.turn.StunServer">
        <constructor-arg index="0" value="stun:$COTURN_URL"/>
    </bean>

    <bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="$COTURN_PASSWORD"/>
        <constructor-arg index="1" value="turns:$COTURN_URL:$COTURN_PORT"?transport=tcp"/>
        <constructor-arg index="2" value="86400"/>
    </bean>

    <bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer">
        <constructor-arg index="0" value="$COTURN_PASSWORD"/>
        <constructor-arg index="1" value="turns:$COTURN_URL:$COTURN_PORT"?transport=tcp"/>
        <constructor-arg index="2" value="86400"/>
    </bean>
    <bean id="stunTurnService"
            class="org.bigbluebutton.web.services.turn.StunTurnService">
        <property name="stunServers">
            <set>
                <ref bean="stun0"/>
            </set>
        </property>
        <property name="turnServers">
            <set>
                <ref bean="turn0"/>
                <ref bean="turn1"/>
            </set>
        </property>
    </bean>
</beans>
HERE
echo ""
echo "(c) Carsten Rieger IT-Services"
exit 0

Starten Sie BigBlueButton neu:

bbb-conf --restart

Die ausgezeichnete Integration in Ihre Nextcloud beschreibt der folgende Artikel und BigBlueButton selbst auf dieser Seite. Die aktuell verwendeten BBB- Versionen ermitteln Sie durch

bbb-conf --version

Haben Sie weitere Anpassungen wie beispielsweise die Erhöhung der Kurrento-Server (s. apply-config.sh) durchgeführt, so lassen sich diese bspw. per

netstat -antp | grep kurento

ermitteln. Zum Abschluss erweitern wir crontab, um sowohl die Logfiles turnusmäßig zu bereinigen, als auch die SSL-Zertifikate regelmäßig automatisch zu erneuern:

crontab -e

Fügen Sie am Ende diese Zeilen hinzu:

...
@daily /usr/bin/journalctl --vacuum-size=1G > /dev/null 2>&1
@daily find  /var/log/nginx/*.log -mtime +14 -delete
@daily find  /var/log/bbb-webrtc-sfu/*.log -mtime +14 -delete
@daily find  /var/log/bigbluebutton/*.log -mtime +14 -delete
@daily find  /var/log/*.log -mtime +14 -delete
...

Sollte es zu Problemen bei der Verwendung im Firefox Browser kommen, so wäre folgende Einstellung ein Versuch wert: about:config » media.peerconnection.ice.relay_only » true

Quelle: https://docs.bigbluebutton.org/administration/turn-server#test-your-turn-server

Weitere BBB-Befehle (bbb-conf) und Anpassungen finden Sie hier (BigBlueButton). Zudem haben Sie auch die Möglichkeit, eigene Videohintergründe bereitzustellen. Beschrieben wird das Vorgehen im BBB-Wiki.

Um BigBlueButton aktuell zu halten stellen wir Ihnen update.sh-Skripte bereit, diese finden Sie unter

GIT/Codeberg: https://codeberg.org/criegerde/bigbluebutton/src/branch/master/v2.7

Die Installation wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß mit Ihrer eigenen BigBlueButton-Instanz. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!

Carsten Rieger IT-Services | Slogan