Welcome to the BigBlueButton Developer’s Guide for BigBlueButton 2.2.

    This document gives you an overview of how to setup a development environment for BigBlueButton 2.2-beta (referred hereafter as BigBlueButton 2.2).

    Before you begin

    You first need to setup a BigBlueButton 2.2 server. See the instructions at Install BigBlueButton 2.2.

    Overview

    A BigBlueButton server is built from a number of components that correspond to Ubuntu packages. Some of these components are

    • bbb-web – Implements the BigBlueButton API and conversion of documents for presentation
    • akka-bbb-apps – Server side application that handles the state of meetings on the server
    • bbb-html5 – HTML5 client that loads in the browser. The client server-side meteor application that leverages MongoDB and React.js
    • bbb-fsesl-akka – Component to send commands to FreeSWITCH
    • bbb-playback-presentation – Record and playback script to create presentation layout
    • bbb-webrtc-sfu – Server that bridges incoming requests from client to Kurento
    • kurento-media-server – WebRTC media server for sending/receiving/recording video (webcam and screen share)
    • bbb-freeswitch-core – WebRTC media server for sending/receiving/recording audio

    This document describes how to setup a development environment using an existing BigBlueButton 2.2 server. Once the environment is setup, you will be able to make custom changes to BigBlueButton source, compile the source, and replace the corresponding components on the server (such as updating the BigBlueButton client).

    The instructions in this guide are step-by-step so you can understand each step needed to modify a component. If you encounter problems or errors at any section, don’t ignore the errors. Stop and double-check that you have done the step correctly. If you are unable to determine the cause of the error, do the following

    • First, use Google to search for the error. There is a wealth of information in bigbluebutton-dev that has been indexed by Google.
    • Try doing the same steps on a different BigBlueButton server.
    • Post a question to bigbluebutton-dev with a description of the problem and the steps to reproduce. Post logs and error messages to Pastebin link them in your post.

    Before you begin

    This section makes sure you are ready to setup a BigBlueButton development environment.

    You Have a Working BigBlueButton Server

    Before you can start developing on BigBlueButton, you must install BigBlueButton 2.2 (see installation steps) and ensure it’s working correctly. Make sure there were no errors during the installation and that you can join a session successfully.

    We emphasize that your BigBlueButton server must be working before you start setting up the development environment. Be sure that you can login, start sessions, join the audio bridge, share your webcam, and record and playback sessions – all using the built-in API demos.

    By starting with a working BigBlueButton server, you have the ability to switch back-and-forth between the default-packaged components and any modifications you make.

    For example, suppose you modify the BigBlueButton client and something isn’t working (such as the client is not fully loading), you can easily switch back to the default-packaged client and check that it’s working correctly (thus ruling out any environment issues that may also be preventing your modified client from loading).

    Another Note: These instructions assume you have the bbb-demo package installed so you can run any of the API demos to test your setup.

    Developing on Windows

    To develop BigBlueButton from within Windows, use VMWare Player or VirtualBox to create first an Ubuntu 16.04 64-bit virtual machine (VM). The associated documentation for VMWare Player and VirtualBox will guide you on setting up a new 16.04 64-bit VM.

    When setting up the VM, it does not matter to BigBlueButton if you setup Ubuntu 16.04 server or desktop. If you install desktop, you’ll have the option of using a graphical interface to edit files. When running the VM, you will need a host operating system capable of running a 64-bit virtual machine.

    Root Privileges

    Important: Make sure you create another user such as “ubuntu” to avoid running into permission errors such as Nginx 403 Forbidden error or error-null-while-compiling-resource-bundles-under-linux-with-hudson.

    Do not run commands as the root user and only use sudo when instructed to.

    These instructions are written for an account called “ubuntu”, but they will apply to any account that has the permissions to execute commands as root, such as

    sudo ls
    

    wget

    You’ll need to download some files throughout these instructions using wget. If it’s not installed on your server, you can install the package using the following command

    sudo apt-get install wget
    

    Have a GitHub Account

    The BigBlueButton source is hosted on GitHub. You need a GitHub account. In addition, you need to be very familiar with how git works. Specifically, you need to know how to

    • clone a repository
    • create a branch
    • push changes back to a repository

    If you have not used git before, or if the terms clone, branch, and commit are unfamiliar to you, stop now. These are fundamental concepts to git that you need to become competent with before trying to develop on BigBlueButton. To become competent, a good place to start is this free book and GitHub Help pages.

    Using GitHub makes it easy for you to work on your own copy of the BigBlueButton source, store your updates to the source to your GitHub account, and make it easy for you to contribute to BigBlueButton.

    Subscribe to bigbluebutton-dev

    We recommend you subscribe to the bigbluebutton-dev mailing list to follow updates to the development of BigBlueButton and to collaborate with other developers.

    Setup a Development Environment

    First, you need to install the core development tools.

    sudo apt-get install git-core ant ant-contrib openjdk-8-jdk-headless
    

    With the JDK installed, you need to set the JAVA_HOME variable. Edit ~/.profile (here we are using vim to edit the file)

    vi ~/.profile
    

    Add the following line at the end of the file

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    

    Reload your profile (this will happen automatically when you next login, but we’ll do it explicitly here to load the new environment variable).

    source ~/.profile
    

    Do a quick test to ensure JAVA_HOME is set.

    $ echo $JAVA_HOME
    /usr/lib/jvm/java-8-openjdk-amd64
    

    In the next step, you need to install a number of tools using sdkman.

    curl -s "https://get.sdkman.io" | bash
    source "$HOME/.sdkman/bin/sdkman-init.sh"
    
    sdk install gradle 5.5.1
    sdk install grails 3.3.9
    sdk install sbt 1.2.8
    sdk install maven 3.5.0
    

    Legacy Tools

    Instructions for downloading the Flash SDK can be found here.

    Checking out the Source

    With the development tools installed, we’ll next clone the source in the following directory:

    /home/ubuntu/dev
    

    Using your GitHub account, do the following

    1. Fork the BigBlueButton repository into your GitHub account
    2. Clone your repository into your ~/dev folder

    After cloning, you’ll have the following directory (make sure the bigbluebutton directory is within your dev directory).

    /home/ubuntu/dev/bigbluebutton
    

    Confirm that you are working on the master branch.

    cd /home/ubuntu/dev/bigbluebutton
    git status
    

    You should see

    On branch master
    Your branch is up-to-date with 'origin/master'.
    nothing to commit, working directory clean
    

    When you first clone the BigBlueButton git repository, git will place you, by default, on the master branch, which is the latest code for BigBlueButton. At this point the master branch is fine for BBB 2.2 development, but in the future there will be a release branch for 2.2 likely named v2.2.x-release.

    The first thing we need to do is to add the remote repository to our local clone.

    git remote add upstream https://github.com/bigbluebutton/bigbluebutton.git
    

    You can now check your local list of tracked repositories to verify that the addition worked. You should see at least two results (origin and upstream). The one named “origin” should link to your personal fork and is the repository that you cloned. The second result “upstream” should link to the main BigBlueButton repository.

    git remote -v
    

    After, we need to fetch the most up to date version of the remote repository.

    git fetch upstream
    

    You are now ready to create a new branch to start your work and base the new branch off master.

    git checkout -b my-changes-branch upstream/master
    

    “checkout” switches branches

    “-b” is an option to create a new branch before switching

    “my-changes-branch” will be the name of the new branch

    “upstream/master” is where you want to start your new branch

    You should now confirm that you are in the correct branch.

    git status
    
    # On branch my-changes-branch
    nothing to commit (working directory clean)
    

    Production Environment

    Okay. Let’s pause for a minute.

    You have set-up the necessary tools and cloned the source, but if you are going to start making changes to BigBlueButton code you need to understand how the parts interact.

    Below is an overview of the different components in a production set-up. When developing you want to change your configuration settings to load new changes instead of the ones deployed for production.

    production

    As you can see, nginx is configured to load the client from /var/www/bigbluebutton/client directory and forward calls to web-api on tomcat7. During development, you need to tell nginx to load from your development directory (/home/ubuntu/dev/bigbluebutton)

    After going through the steps below, you will end up with the following setup.

    development

    The components that run in Red5 don’t change when you deploy the development files for bbb-apps, bbb-voice, bbb-video, and bbb-deskshare into /usr/share/red5. However, notice that the client and web-api are served from different places.

    Developing the HTML5 client

    $ cd ~/dev/bigbluebutton/bigbluebutton-html5
    

    Install Meteor.js.

    $ curl https://install.meteor.com/ | sh
    

    There is one change required to settings.yml to get webcam and screenshare working in the client (assuming you’re using HTTPS already). The first step is to find the value for kurento.wsUrl packaged settings.yml.

    grep "wsUrl" /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
    

    Next, edit the development settings.yml and change wsUrl to match what was retrieved before.

    $ vi private/config/settings.yml
    

    You’re now ready to run the HTML5 code. First shut down the packaged version of the HTML5 client so you are not running two copies in parallel.

    $ sudo systemctl stop bbb-html5
    

    Install the npm dependencies.

    $ meteor npm install
    

    Finally, run the HTML5 code.

    $ npm start
    

    By default, the client will run in development mode. Loading into production environment can be done by passing the value of NODE_ENV:

    $ NODE_ENV=production npm start
    

    HTML5 Coding Practices

    For coding conventions related to the HTML5 code refer to this document.

    /private/config

    All configurations are located in /private/config/settings.yml. If you make any changes to the YAML configuration you will need to restart the meteor process.

    During Meteor.startup() the configuration file is loaded and can be accessed through the Meteor.settings.public object.

    Build bbb-common-message

    The bbb-common-message is required by a few components of BigBlueButton. So it is required to build this first. Otherwise, you will run into compile errors.

    cd ~/dev/bigbluebutton/bbb-common-message
    ./deploy.sh
    

    Developing BBB-Web

    First, we need to update the latest bigbluebutton.properties file according to your setup. Basically, you will have to change the URL and security salt. If you don’t know your salt, run sudo bbb-conf --salt

    cd ~/dev/bigbluebutton/
    
    # Edit the file and change the values of bigbluebutton.web.serverURL and securitySalt. 
    vi bigbluebutton-web/grails-app/conf/bigbluebutton.properties
    

    Now you need to give your user account access to upload slides to the presentation directory and also access to write log files.

    sudo chmod -R ugo+rwx /var/bigbluebutton
    sudo chmod -R ugo+rwx /var/log/bigbluebutton
    

    Open the file ~/.sbt/1.0/global.sbt using your editor

    mkdir -p ~/.sbt/1.0
    vi ~/.sbt/1.0/global.sbt
    

    Add the following into it

    resolvers += "Artima Maven Repository" at "http://repo.artima.com/releases"
    updateOptions := updateOptions.value.withCachedResolution(true)
    

    Build bbb-common-web

    cd ~/dev/bigbluebutton/bbb-common-web
    ./deploy.sh
    

    Now let’s start building bbb-web

    cd ~/dev/bigbluebutton/bigbluebutton-web/
    

    We need to stop the bbb-web service

    sudo service bbb-web stop
    

    Download the necessary libraries.

    ./build.sh
    

    Start grails and tell to listen on port 8090

    ./run.sh
    

    or

    grails -reloading -Dserver.port=8090 run-app
    

    If you get an error Could not resolve placeholder 'apiVersion', just run grails -Dserver.port=8090 run-war again. The error is grails not picking up the “bigbluebutton.properties” the first time.

    Now test again if you can join the demo meeting.

    The command above will run a development version of bbb-web, but if you want to deploy your custom-built bbb-web you need to package a war file.

    Instructions for deploying bbb-web

    First we need to compile all the project in a single war file.

    grails assemble
    

    The war application is generated under build/libs/bigbluebutton-0.10.0.war.

    Create a new directory and open it.

    mkdir exploded && cd exploded
    

    Extract the war content in the newly create directory

    jar -xvf ../build/libs/bigbluebutton-0.10.0.war
    

    Then copy the run-prod.sh after checking all the jar dependencies are listed in

    cp ../run-prod.sh .
    

    In the next step we will make a copy of the current production direcotry for bbb-web

    sudo cp -R /usr/share/bbb-web /usr/share/bbb-web-old
    

    Then we will delete all the files we need to be copied for production

    sudo rm -rf /usr/share/bbb-web/assets/ /usr/share/bbb-web/META-INF/ /usr/share/bbb-web/org/ /usr/share/bbb-web/run-prod.sh  /usr/share/bbb-web/WEB-INF/
    

    Next, let’s copy the complied files into the production directory

    sudo cp -R . /usr/share/bbb-web/
    

    And now, we need to make sure the copied files have the right user ownserhip.

    $ sudo chown bigbluebutton:bigbluebutton /usr/share/bbb-web
    $ sudo chown -R bigbluebutton:bigbluebutton /usr/share/bbb-web/assets/ /usr/share/bbb-web/META-INF/ /usr/share/bbb-web/org/ /usr/share/bbb-web/run-prod.sh /usr/share/bbb-web/WEB-INF/
    

    And finally we run the service.

    sudo service bbb-web start
    

    If you need to revert back your original production bbb-web just run the following command. (Don’t forget to stop bbb-web service before doing it)

    sudo mv /usr/share/bbb-web /usr/share/bbb-web-dev && /usr/share/bbb-web-old /usr/share/bbb-web
    

    Your compiled code will be under the /usr/share/bbb-web-dev directory and you can safely run the original production ``bbb-web`.

    Developing Akka-Apps

    You can manually run the application.

    cd ~/dev/bigbluebutton/akka-bbb-apps
    ./run.sh
    

    Developing Akka-FSESL

    You need to build the FS ESL library

    cd ~/dev/bigbluebutton/bbb-fsesl-client
    ./deploy.sh
    

    Then you can run the application.

    cd ~/dev/bigbluebutton/akka-bbb-fsesl
    ./run.sh
    

    Legacy Flash applications

    For instructions for building the legacy applications related to the Flash client and red5 see this document. Note: The core BigBlueButton development team recommends using the HTML5 client instead of the legacy Flash client.

    Troubleshooting

    Welcome to Nginx page

    If you get the “Welcome to Nginx” page. Check if bigbluebutton is enabled in nginx. You should see bigbluebutton in /etc/nginx/sites-enabled.

    If not, enable it.

    sudo ln -s /etc/nginx/sites-available/bigbluebutton /etc/nginx/sites-enabled/bigbluebutton
    
    sudo /etc/init.d/nginx restart
    

    Pausing/Restarting VM gives wrong date in commit

    If you are developing using a VM and you’ve paused the VM and later restart it, the time on the VM will be incorrect. The incorrect time will affect any commits you do in GitHub.

    To ensure your VM has the correct time, you can install ntp with

    sudo apt-get install ntp
    sudo /etc/init.d/ntp restart
    

    and then do the following after starting the VM from a paused state

    sudo /etc/init.d/ntp restart
    

    The above will re-sync your clock.

    Setup Samba

    To setup Samba

    sudo apt-get install -y --force-yes samba
    

    Then setup your shared directory by editing /etc/samba/smb.conf

    ; BigBlueButton: Share the development directory
    [ubuntu]
       comment = BigBlueButton Development share
       path = /home/ubuntu
       browseable = yes
       read only = no
       create mask = 0755
       directory mask = 0775
       guest ok = yes
       force user = ubuntu
    

    See install-samba-server-ubuntu-16-04 for more info.