Bayes Linuxでバイオインフォマティクス解析環境を簡単に再現良く構築する

## 1. はじめに
Bayes (Bioinformatics AnalYsis Environment System, ベイズ) Linux は国立研究開発法人理化学研究所 情報基盤センター [バイオインフォマティクス研究開発ユニット (RIKEN ACCC BiT)](http://bit.accc.riken.jp/) で開発されているバイオインフォ解析環境込みのLinuxディストリビューションです。このディストリビューションには、データ解析パイプラインシステム [Galaxy](https://galaxyproject.org/) や超並列単鎖DNAシーケンサーのデータ解析ツール、[R](http://r-project.org/)/[Bioconductor](http://bioconductor.org/)などの統計解析ツール群がインストールされています。

このディストリビューションはクラウドやローカルの計算機に簡単に配置 (deploy) できます。また DevOps 技術を駆使して作られており、OSの設定やソフトの配置・設定がプログラム(Chef Cookbook)として記載されています。そのため、再現良く、誰でも同じ解析環境をどこにでも簡単に構築でき、カスタマイズも容易です。

**現在の最新のリリースは、Bayes Linux 1.3.0 (2017/03/24) です。** 詳細は [Bayes Linux, changelog](https://github.com/BioDevOps/basicsetup/blob/master/CHANGELOG.md) をご覧ください。

Bayes Linuxの開発背景は以下のスライドを参照してください。

- [BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築](http://www.slideshare.net/dritoshi/20150612-ddb-jingjst)

Bayes Linuxは、[Apache License Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)の元、自由に利用できます。インストールされるツールはそれぞれのライセンスに従ってください。

## 2. 前提

### 2.1. 自分で環境を構築する
ローカルに仮想計算機システムであるVirtualBoxをインストールし、その上に、Bayes Linuxを配置・起動します。ここでは環境構築方法が記載された cookbook や仮想マシンを操作するツールを使って、一から環境を構築します。OS Xを前提としていますがLinuxでも同様です。また、クラウドでも構築・起動することができますので6章を参照してください。

Windowsでは検証していませんし、今後もする予定はありません。WindowsユーザーがBayes Linuxを利用するだけであれば、次項2.2のみ参照してください。

### 2.2. 完成した仮想マシンイメージから起動する
すでに2.1が実施されて環境構築が終了している仮想マシンイメージをダウンロードすれば、VirtualBoxで起動することができます。詳細は以下をご覧ください。

「[Bayes Linuxを完成した仮想マシンイメージから起動する](http://qiita.com/dritoshi/items/1d95480022feb25cb5ac)」

## 3. 準備
必要なツールをインストールします。すべてdmgが提供されているので、GUIで楽々インストールできます。各ツールのインストールはそれぞれの README や INSTALL などを参考にしてください。

- [Vagrant](https://www.vagrantup.com/) (仮想マシンを作ったり管理するツール)
- [Chef-DK](https://downloads.chef.io/chef-dk/) (仮想マシンのレシピを用意するソフト。インストールされるプログラムやその設定を記載する)
- [git](https://git-scm.com/) (ソフトウェアのバージョン管理プログラム。今回はレシピの入手を行う)
- [VirtualBox](https://www.virtualbox.org/) (仮想計算機システム、OS X上で仮想的にほかのOSを動かす。今回はBayes Linuxを動かす)

## 4. 仮想マシンを構築する

### 4.1. cookbook をインストールする
まず仮想マシンのレシピ集 (cookbook) をBioDevOpsから入手します。OS X 上のターミナルソフトから以下のコマンドを入力します。

```
$ git clone https://github.com/BioDevOps/basicsetup
```
ダウンロードした cookbook が保存されたディレクトリ basicsetup へ移動し、必要なプラグインをインストールします。OS X 上のターミナルソフトから以下のコマンドを入力します。

```
$ cd basicsetup
$ vagrant plugin install vagrant-chef-zero
$ vagrant plugin install vagrant-omnibus
```
仮想マシンを構築します。

まずOS X 上のターミナルソフトから`berks`コマンドを実行します。

```
$ berks vendor cookbooks
```

### 4.2. 仮想マシンを構築し起動する
これにより、プログラムのインストールやセットアップが記載されたcookbookをダウンロードされます。カレントディレクトリに cookbooks というディレクトリができています。ここに cookbook が保存されます。

次にOS X 上のターミナルソフトから `vagrant up` を実行します。

```
$ vagrant up
```
仮想マシンイメージ(box)をダウンロードし、chef, berkshelf を利用して、cookbook に従いプログラムをインストール、セットアップを始めます。終了したら VirtualBox 上に仮想マシンが起動します。

このステップは比較的時間がかかります。これは[Sailfish](http://www.cs.cmu.edu/~ckingsf/software/sailfish/)という遺伝子発現量解析ソフトが必要とするトランスクリプトーム配列のインデックスファイルが11 GBあるためです。理研内のネットワーク(SINET)で1.5時間程度かかりました。

sailfishのindex fileは、`/usr/local/galaxy/bit_tools/sailfish_index`にインストールされます。


### 4.3. 仮想マシンのスペックを変更する
このステップは必須ではありませんが、お使いの計算機の性能に応じて、仮想マシンの性能を変更できます。Bayes Linux のデフォルトは 4 CPU cores, メモリ 8 GB が割り当てあれます。その分ホストの OS X は CPU とメモリを使われてしまい、計算機の動作が遅くなるため適切なバランスをとる必要があります。

十分な計算資源が手に入る場合は、「3.1. cookbook をインストールする」まで進めた後、 `Vagrantfile` を書き換えてください。残りのステップは同じです。

```Vagrantfile
  config.vm.provider "virtualbox" do |v|
    v.name = "bayesvm_20150605_1"
    v.customize ["modifyvm", :id, "--memory", "8192", "--cpus", "4"]
  end
```

8192 がメモリ、4 が CPU です。この数を変更してください。解析の種類によりますが、より多くのCPUとメモリを利用できたほうがよいです。


## 5. 仮想マシンにアクセスする
起動した仮想マシンに SSH でログインします。OS X 上のターミナルソフトから以下のコマンドを入力します。

```
$ vagrant ssh
vagrant@vagrant:~$
```
![Kobito.yhnJ3k.png](https://qiita-image-store.s3.amazonaws.com/2368/3890/2a2eb840-4295-9a0a-a5ec-96dd38760453.png "Kobito.yhnJ3k.png")

これで様々な解析ツールを実行することができます。`sudo`も使えます。

GalaxyにアクセスするにはBayes Linuxに割り当てられたIPアドレスを確認する必要があります。

```
$ vagrant ssh
vagrant@vagrant:~$ ifconfig eth1
```
`inet addr:XXX.XXX.XXX.XXX` 以降に書かれている数字がアドレスになります。ホストのウェブブラウザを使って http://XXX.XXX.XXX.XXX/ へアクセスします。GalaxyのアカウントはUserメニューのregisterから作成してください。

![Kobito.mQsqgg.png](https://qiita-image-store.s3.amazonaws.com/2368/3890/fa16f169-dfe5-68f8-8441-163d966be18e.png "Kobito.mQsqgg.png")

## 6. クラウドコンピュータにBayes Linuxを構築・起動する

### 6.1. Amazon EC2 を利用する (動作未確認)
Amazonが提供しているクラウド環境、[Amazon EC2](http://aws.amazon.com/jp/ec2/)で、Bayes Linuxを構築・起動できます。[AWSマネジメントコンソール](console.aws.amazon.com)から、AMIを作成・起動し、SSH, HTTPを許可しておきます。また、Access Key などAPIへのアクセスができる情報を集めておきます。

「3. 準備」の後、以下のコマンドで、[vagrant-aws](https://github.com/mitchellh/vagrant-aws)をインストールします。

```
$ vagrant plugin install vagrant-aws
```

次に「4. 仮想マシンを構築する」の git を実行後、`Vagrantfile`を編集し、以下を記載します。

```Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "dummy"

  config.vm.provider :aws do |aws, override|
    aws.access_key_id = "YOUR KEY"
    aws.secret_access_key = "YOUR SECRET KEY"
    aws.session_token = "SESSION TOKEN"
    aws.keypair_name = "KEYPAIR NAME"

    aws.ami = "INSTANCE ID"

    override.ssh.username = "ubuntu"
    override.ssh.private_key_path = "PATH TO YOUR PRIVATE KEY"
  end
end
```

Amazon EC2 に仮想計算機を構築します。

```
vagrant up --provider=aws
```

あとは「4. 仮想マシンを構築する」の手順と同じです。

### 6.2. ほかのクラウドサービスで利用する (動作未確認)
以下のプラグインを利用してください。手順は6.1とほぼ同じです。

- Digital Ocean: [vagrant-digitalocean](https://github.com/smdahlen/vagrant-digitalocean)
- CloudStack: [vagrant-cloudstack](https://github.com/schubergphilis/vagrant-cloudstack)
- OpenStack: [vagrant-openstack-plugin](https://github.com/cloudbau/vagrant-openstack-plugin), [vagrant-openstack-provider](https://github.com/ggiamarchi/vagrant-openstack-provider)

## 7. 次に
* [Bayes LinuxのGalaxyでRNA-seq解析を行う](http://qiita.com/dritoshi/items/c0272ae6c1548210ab99)

## 8. 最後に
### 8.1. 開発方針と体制
Bayes Linux はオープンソースで開発しています。[Apache License Version 2.0](http://www.apache.org/licenses/LICENSE-2.0)の元、自由に利用できます。インストールされるツールはそれぞれのライセンスに従ってください。すべてのソースは以下にあります。

- [Bayes Linux Basic Setup](https://github.com/BioDevOps/basicsetup)

バグや機能追加した場合は、気軽に pull request して頂けると嬉しいです。cookbookやレシピ、テストの提供もお待ちしております。

バグ報告や質問などは support-bayes@riken.jp へお願いします。

### 8.2. 開発プラン
以下のような開発項目があります。

- ツールのバージョンを固定した環境構築
- Docker, Digital Ocean, OpenStack での起動のテスト
- Cookbookのテストと継続的インテグレーション
- 定期的なリリース
- Python系の機械学習関連ツールの組み込み
- iPythonの組み込みとGalaxyとの統合
- boxを[ATLAS](https://atlas.hashicorp.com/)や[Vagrantbox.es](http://www.vagrantbox.es/)に移す?
- Docker Hub Registry に登録する?

### 8.3. ドキュメントの更新履歴
- 2017/03/24 Version 1.3.0 リリース
- 2016/03/11 Version 1.2.0 リリース
- 2015/06/10 Version 0.1.1 リリース