How to install BigBlueButton on Debian Squeeze

This small tutorial is to give a step by step procedure to install a BigBlueButton 0.71a server on Debian Squeeze 32bit. I based it on the `official tutorial`:http://code.google.com/p/bigbluebutton/wiki/InstallationBigBlueButtonDebian which is clearly over complicated (compiled things from source), have some bogus instructions (ie. add Ubuntu's multiverse to a debian server), etc.

1. Install

This is the procedure I followed which, I think, is much easier :
  • Add repositories with their keys
    # bigbluebutton repository key
    wget http://ubuntu.bigbluebutton.org/bigbluebutton.asc -O- | apt-key add -
    # Freeswitch PPA key
    apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 451AE93C
    echo -e `deb http://ubuntu.bigbluebutton.org/lucid/ bigbluebutton-lucid main\ndeb http://ppa.launchpad.net/freeswitch-drivers/freeswitch-nightly-drivers/ubuntu lucid main` > /etc/apt/sources.list.d/bigbluebutton.list
    aptitude update
    
  • Install pre-requisites with necessary workaround for packaging bugs :
    • Install sudo
      All script are Ubuntufied so you will have to install sudo or some scripts (bbb-conf) won't work correctly.
      aptitude install sudo
      
    • Install libmpfr
      libmpfr has been superseded by `libmpfr4`:http://packages.qa.debian.org/m/mpfr/news/20110223T163917Z.html and so is no longer available in Debian Squeeze. swftools depends on it but the version in Lenny is a little bit too old (2.3.1), so instead of compiling the source and making a new package, as indicated in the official how to, we'll just resolve the dependencies by using the one from ubuntu :
      aptitude install libgmp3c2
      wget http://ubuntu.mirror.cambrium.nl/ubuntu//pool/main/m/mpfr/libmpfr1ldbl_2.4.2-3ubuntu1_i386.deb
      dpkg -i libmpfr1ldbl_2.4.2-3ubuntu1_i386.deb
      
    • Another workaround to avoid errors later on :
      mkdir -p /var/www/nginx-default/
      touch /var/www/nginx-default/50x.html
      
  • Now you can install BigBlueButton
    aptitude install bbb-freeswitch-config bbb-client bigbluebutton
    
  • Configure BigBlueButton and start it :
    bbb-conf --clean
    bbb-conf --check
    bbb-conf --setip YOUR_IP
    

You can now go to http://YOUR_IP and try the demo.

2. Tips and tricks

BigBlueButton is a fantastic tool that works incredibly well, but it is still quite young, and is not yet very flexible in term of configuration. So here are some tips that I collected, hoping they will save you some hours of hair pulling.

2.1. Firewall setup

BigBlueButton require to open 3 ports : 80, 1935, 9123. You can also open only port 80 and so tunnel everything through it, but you will most likely get bitten by `this bug`:http://code.google.com/p/bigbluebutton/issues/detail?id=785 which is a `known Linux/Mac Adobe Flash bug`:https://bugs.adobe.com/jira/browse/FP-4797 . Basically you will be connected, and you will be able to do things but the session will re-initalise every 20-30 seconds. This bug doesn't affect Windows users and is supposed to be solved in Flashplayer 11.0.1.3 beta for Linux and Mac.

2.2. Redmine integration

BigBlueButton does not provide any administration GUI beside the demo, it is up to you to use their API, to create meetings. As we are already using Redmine I tried Redmine's BigBlueButton plugin. :

cd /usr/local/share/redmine
ruby script/plugin install http://github.com/amartel/redmine_bbb.git

After restarting your Redmine instance, you will have a new plugin available in Administration -> Plugins. Then you need to give users BigBlueButton roles (create, join, moderate). Finally you need to go to a project settings and activate the BigBlueButton module to enable the `create meeting` link on the overview page.

2.3. Put BigBlueButton server behind a firewall or on a VPN

If you put your BigBlueButton server on a VPN or behind a firewall and you want to configure a public access, the configuration can be very tricky. Here is an example config providing that you have the following topology :

WEB      <=>      Redmine/Web Server       <=>       BigBlueButton server
          ExtIP : bigbluebutton.mydomain.com         IP : 192.168.1.10

BigBlueButton requires to have an IP that resolves to the same name as configured so either you can put a record in an internal DNS or add the following to its /etc/hosts :

vi /etc/hosts
-> 192.168.1.10    bigbluebutton.mydomain.com
bbb-conf --setip bigbluebutton.mydomain.com
It will throw a message that the IP does not match but this is ok.
# IP does not match:
#                           IP from ifconfig: 192.168.1.10
#   /etc/nginx/sites-available/bigbluebutton: bigbluebutton.mydomain.com

On the Redmine/Web server :
  • Forward port 9123 to BigBlueButton's server port 9123
  • Forward port 1935 to BigBlueButton's server port 1935
  • Configure a new vhost called bigbluebutton.mydomain.com that does a proxy pass to 192.168.1.10
  • DO NOT TRY to put it on a subfolder (ie. mydomain.com/bbb) if you don't want to have to modify lots of bigblubutton's source code.
In Redmine -> Administration -> Plugins -> BigBlueButton put the following (no trailing slash or else you will hit 403 errors) :

As we have an internal VPN with its own DNS, I do not know if you require to add BigBlueButton's IP to the web servers /etc/hosts file as well.

Beware that BigBlueButton's configuration is extremely sensitive, a slight change in the above and it might not work. If you encounter any issue with the above do not hesitate to ping us on `IRC,`:http://www.personalized-software.ie/support#chat to `send us an email`:http://www.personalized-software.ie/contactus or to contact the `bigbluebutton crew.`:http://bigbluebutton.org/

2.4. End meeting after every participants logged out

You can do this easily by modifying the configuration :

vi /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties
-> beans.dynamicConferenceService.minutesElapsedBeforeMeetingExpiration=0
I found during my testing that the delay before the meeting is actually closed can vary from a few seconds to a few minutes, but it does work.