EC2@AWSへのBigBlueButtonインストール


Web会議・講義システム「BigBlueButton」（以下、BBB）をEC2上にインストールする手順。

## 更新情報
* 2015/11/08 新規作成

## 参考

基本は以下の参考サイトを参照。

* http://bigbluebutton.org/overview/
* http://docs.bigbluebutton.org/1.0/10install.html
* http://bit.ly/1Nicngf

## BigBlueButtonのバージョン
1.0-Beta


## EC2の環境

* Ubuntu Server 14.04 LTS, SSD Volume Type - ami-936d9d93
* インスタンスタイプ: m4.large (2vCPU、8GB RAM)
* ルートデバイスタイプ: ebs
* 仮想化タイプ: hvm
* 汎用SSD 30G


## EC2の設定

### 1. 固定IP

#### 1.1. ホスト名の運用

* 独自ドメイン名であれば固定IPでなくてもいけると思う。
* EC2のパブリックドメイン名では長すぎる？ために、そのままではBBBのホスト名設定できない。<br />（設定で回避できるかもしれない）

#### 1.2. IPアドレスの運用

* * 稼働にそれなりのリソースを使うので頻繁に停止する場合、パブリックIPが変わるたびに設定変更する必要がある。
* 上記を回避する為、固定のパブリックIPを設定しておく。

  1. EC2コンソールにて、Elastec IPを開く
  2. 新しいアドレスの割り当て、にて固定IPを払い出し、インスタンスに関連付けする。

### 2. セキュリティグループ設定

BBBに必要なポートを開放する。

1. 新規のセキュリティグループを作成する。
2. VPCにてインスタンスに紐付ける
3. インバウンドに以下を設定する。

	| タイプ | プロトコル | ポート | 送信元 | 説明 |
	|:--|:--|:--|:--|:--|
	|HTTP|TCP|80|0.0.0.0/0| Web用 HTTP |
	|カスタムTCP|TCP|1935|0.0.0.0/0| BBB用詳細不明  |
	|カスタムTCP|TCP|5066|0.0.0.0/0| 音声用 websocket port |
	|カスタムTCP|TCP|9123|0.0.0.0/0| BBB用詳細不明  |
	|カスタムTCP|UDP|16384-32768|0.0.0.0/0| BBB用詳細不明  |

* HTTPSを仕様する場合は、TCP443、TCP7443等も必要（未検証）。

## BigBlueButtonインストール

インスタンスにログインし、インストールを行う。

### 1. OSの確認

#### 1.1. 言語パックの確認

```
$ cat /etc/default/locale
LANG="en_US.UTF-8"
```

入っていない場合

```
$ sudo apt-get install language-pack-en
$ sudo update-locale LANG=en_US.UTF-8
```

#### 1.2. 64bit版であることを確認

```
$ uname -m
x86_64
```

#### 1.3. Ubuntuのバージョンの確認

```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.X LTS"
```

### 2. 各種パッケージのアップデート

#### 2.1. パッケージ取得元のソースを設定する。

1. ソースを確認する。

  ```
  $ grep "multiverse" /etc/apt/sources.list
  ```
  
  ```
  ## multiverse WILL NOT receive any review or updates from the Ubuntu
# deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty multiverse
# deb-src http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty multiverse
# deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
# deb-src http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty-updates multiverse
# deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
# deb-src http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty-backports main restricted universe multiverse
# deb http://security.ubuntu.com/ubuntu trusty-security multiverse
# deb-src http://security.ubuntu.com/ubuntu trusty-security multiverse
  ```

2. 以下をコメントアウトする。

  ```
  deb http://ap-northeast-1.ec2.archive.ubuntu.com/ubuntu/ trusty multiverse
  ```

* 参考
  * EC2以外だと以下のようになる

  ```
  deb http://archive.ubuntu.com/ubuntu trusty multiverse
  ```

  * 存在しない場合は以下のように追加

  ```
  $ echo "deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse" | sudo tee -a /etc/apt/sources.list
  ```

#### 2.2. パッケージをアップデートする。

```
$ sudo apt-get update
$ sudo apt-get dist-upgrade
```


#### 2.3. EC2用音声設定

EC2は外部IPと内部IPが2つあるため、以下のように各音声ファイルを設定する。

* /opt/freeswitch/conf/vars.xml<br />以下を削除する。

  ```
  <X-PRE-PROCESS cmd="set" data="local_ip_v4={プライベートIP}"/>
  ```

* /opt/freeswitch/conf/sip_profiles/external.xml<br />以下のように変更する。 ※{パブリックIP}は任意に置き換える

  ```
  #<X-PRE-PROCESS cmd="set" data="bind_server_ip=auto"/>
  <X-PRE-PROCESS cmd="set" data="bind_server_ip={パブリックIP}"/>
  
  #<X-PRE-PROCESS cmd="set" data="external_rtp_ip=stun:stun.freeswitch.org"/>
  <X-PRE-PROCESS cmd="set" data="external_rtp_ip={パブリックIP}"/>

  # <X-PRE-PROCESS cmd="set" data="external_sip_ip=stun:stun.freeswitch.org"/>
  <X-PRE-PROCESS cmd="set" data="external_sip_ip={パブリックIP}"/>
  ```

* /usr/share/red5/webapps/sip/WEB-INF/bigbluebutton-sip.properties<br />以下のように変更する。

  ```
  #<param name="ext-rtp-ip" value="$${local_ip_v4}"/>
  #<param name="ext-sip-ip" value="$${local_ip_v4}"/>  
  <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
  <param name="ext-sip-ip" value="$${external_sip_ip}"/>  
  ```

* /etc/bigbluebutton/nginx/sip.nginx<br />以下のように変更する。

  ```
  #bbb.sip.app.ip={プライベートIP}
  bbb.sip.app.ip=<internal ip>

  #freeswitch.ip={プライベートIP}
  freeswitch.ip=<internal ip>
  ```


### 3. LibreOffice 4.4用のPPAリポジトリ追加

LibreOffice 4.4をインストールする為のPPAリポジトリ追加。

```
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:libreoffice/libreoffice-4-4
```

### 4. BigBlueButtonのインストール準備

#### 4.1. リポジトリアクセス用公開鍵を取得し、登録する。

```
$ wget http://ubuntu.bigbluebutton.org/bigbluebutton.asc -O- | sudo apt-key add -
```

#### 4.2. パッケージ取得元を追加する。

```
$ echo "deb http://ubuntu.bigbluebutton.org/trusty-1-0/ bigbluebutton-trusty main" | sudo tee /etc/apt/sources.list.d/bigbluebutton.list
```
  
#### 4.3. アップデートする。

```
$ sudo apt-get update
```

### 5. 動画・音声用ffmpegのインストール

#### 5.1. インストール用シェルを作成する。

* install-ffmpeg.sh

```
sudo apt-get install build-essential git-core checkinstall yasm texi2html libvorbis-dev libx11-dev libvpx-dev libxfixes-dev zlib1g-dev pkg-config netcat libncurses5-dev

FFMPEG_VERSION=2.3.3

cd /usr/local/src
if [ ! -d "/usr/local/src/ffmpeg-${FFMPEG_VERSION}" ]; then
  sudo wget "http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2"
  sudo tar -xjf "ffmpeg-${FFMPEG_VERSION}.tar.bz2"
fi

cd "ffmpeg-${FFMPEG_VERSION}"
sudo ./configure --enable-version3 --enable-postproc --enable-libvorbis --enable-libvpx
sudo make
sudo checkinstall --pkgname=ffmpeg --pkgversion="5:${FFMPEG_VERSION}" --backup=no --deldoc=yes --default
```

#### 5.2. シェルに実行権限をつけ、実行する。

```
$ chmod +x install-ffmpeg.sh
$ ./install-ffmpeg.sh
```

#### 5.3. ffmpegのバージョンを確認する。

```
$ ffmpeg -version
ffmpeg version 2.3.3 Copyright (c) 2000-2014 the FFmpeg developers
  built on Aug 18 2014 17:35:05 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1)
  configuration: --enable-version3 --enable-postproc --enable-libvorbis --enable-libvpx
  libavutil      52. 92.100 / 52. 92.100
  libavcodec     55. 69.100 / 55. 69.100
  libavformat    55. 48.100 / 55. 48.100
  libavdevice    55. 13.102 / 55. 13.102
  libavfilter     4. 11.100 /  4. 11.100
  libswscale      2.  6.100 /  2.  6.100
  libswresample   0. 19.100 /  0. 19.100
```

### 6. BigBlueButtonパッケージのインストール

```
$ sudo apt-get install bigbluebutton

Yesで回答する。
```

### 7. APIデモパッケージのインストール

デモ用のAPIセットをインストールしておく場合は以下を実行する。

```
$ sudo apt-get install bbb-demo
```

不要になった場合は削除。
削除すると、ログインページは同様だがログインできなくなる。

```
$ sudo apt-get purge bbb-demo
```

### 8. クライアントセルフチェックページのインストール

クライアントサイドでネットワークや設定を確認するツールをインストールするには以下を実行する。

```
$ sudo apt-get install bbb-check
```

利用するURLは以下。
※{パブリックIP}は任意に置き替える。
**http://{パブリックIP/check**

削除する場合は以下を実行する。

```
$ sudo apt-get purge bbb-check
```

### 9. WebRTC audioの有効化

WebRTC audioを有効にする。

```
$ sudo bbb-conf --enablewebrtc
```

### 10. パブリックIP設定

公開用のパブリックIPを設定する。
※{パブリックIP}は任意に置き替える。

```
$ sudo bbb-conf --setip {パブリックIP}
```


## BigBlueButtonの起動

### 1. 起動

"--clean"で環境をクリアして起動し、"--check"でエラーチェックする。

```
$ sudo bbb-conf --clean
$ sudo bbb-conf --check
```

### 2. デモの利用

以下のURLにアクセスしログイン画面がでる。
デモでは適当なユーザーでJOINできる。
※{パブリックIP}は任意に置き替える。

**http://{パブリックIP}/**