CloudBioLinuxを用いてローカルサーバにNGS解析環境を構築する


##予備知識
[CloudBioLinux](http://cloudbiolinux.org/)はAWS上で動くBioLinuxライクなイメージを提供しようというコンセプトのプロジェクト。[^1]
だが、実際には所属機関の意向でクラウドは使えない場合も多いかと思われる。

しかしローカルサーバを用いる場合でも、公式が[Github上で](https://github.com/chapmanb/cloudbiolinux)提供しているプロヴィジョニングツール([fabric](http://fabric-ja.readthedocs.org/ja/latest/)を利用している)が便利そうなので使ってみる。ほとんどREADME.mdのまる写しだけど気にしない。

- DockerFileを使わずに小さいDocker Imageを作りたい
- ソフトウェアのビルドめんどくさい
- 何らかの理由でBioLinuxをフルインストールできない

みたいなときに役立つかも？

[^1]: こういったバイオインフォマティクス用のイメージは[Bioimg.org](https://bioimg.org/)でホスティングされている

##仮想マシンに対して行う場合

Vagrantで仮想マシンを立てる場合は
`vagrant ssh-config –host <host名> >> ~/.ssh/config `
をしておくことで、`ssh <host名>`でログインできるようになり、リモートサーバと同じように扱える。

同様にDockerに対して使用する場合は[こちら](http://qiita.com/ikuyamada/items/03e7677c596678d300d9)を参考に

##インストール

###フルインストール
[公式サイト](https://github.com/chapmanb/cloudbiolinux)を`path/to/cloudbiolinux`に`git clone`する。

とりあえず

```bash:prepare
export source=/path/to/cloudbiolinux
```

しておく。

基本的にはhostがCentOSかdebianなら

```bash:full_install
fab -f $source/fabfile.py -H <host名> isntall_biolinux
```

で、ソフトウェア類やBiologicalデータをフルインストールできる。
ホストがコンテナとかではなく、容量を気にする必要がないならこれだけでもいいかも

`-u my_username`の形でhostの実行ユーザ名も指定できる。デフォルトはローカルマシンのユーザ名になる。

他のディストリビューションにインストールしたい場合は`$source/config/fabricrc.txt`をコピー、変更して`-c`オプションで指定する。

```bash
cp $source/config/fabricrc.txt ~/hoge/my_fabricrc.txt
vi ~/hoge/my_fabricrc.txt	#適当に編集
fab -f $source/fabrile.py -H <HOST名> -c ~/hoge/my_fabricrc.txt install_biolinux
```

###カスタムインストール
をしたい場合は、上記の`install_biolinux`の部分を下記のコマンドに変更する。

よさそうなflavorを探し、なければ自分で作るという流れがよさそう。

- `install_biolinux:flavor=hoge`	#flavorの使用。後述
- `install_biolinux:packages`	#hostosのパッケージマネージャで入れられるパッケージをすべて入れる。`$source/config/packages-<ディストリビューション名>`を参照
- `install_biolinux:libraries`	#言語別のパッケージをすべて入れる。`./config/<言語名>-libs.yaml`を参照
- `install_biolinux:brew`	#homebrewで入れられるパッケージのみをすべて入れる
- `install_libraries:language`	#特定の言語のパッケージをすべて入れる。
- `install_data_s3`	#biologicalデータのインストールを行う。後述

以下はより細かいセッティング

- `install_biolinux:custom`	#cloudbillinuxがサポートしている*すべての*カスタムプログラムを入れる。
サポートしているパッケージは`./config/packages.yaml`を参考
- `install_brew:a_package_name`	#指定した名前のパッケージをbrewで入れる。	
- `install_custom:a_package_name`	#cloudbiolinuxがサポートしている*特定の*カスタムプログラムを入れる。例

```sh
fab -f $source/fabfile.py -H <Host名> install_biolinux:bedtools
```

バイオインフォマティクスでよく使われるプログラムにはパッケージマネージャで入れることのできないものが多くある。
`install_biolinux:custom`や`install_custom:a_package_name`はそういったプログラムのインストールを簡便にするためにあるんだと思う。(多分)

`$source/config/*.yaml`の中に入れたいパッケージが存在しない場合は…よくわからない。
[ここを参考に](https://github.com/chapmanb/cloudbiolinux/blob/master/doc/hacking.md)して作れるみたい。
その後プルリを送るとかすると喜ばれるかも

##flavorの指定

行いたい解析に応じた必要なツール一式をinstallするためにflavorという仕組みが存在する。
例えば最小構成のインストールを行いたい場合は

```bash:install_minimum
fab -f $source/fabfile.py -H localhost install_biolinux:flavor=minimal
```

終わったら以下のコマンドでテストできるっぽい

```bash:test
$source/text/test_vagrant Minimal
```

`minimal`以外にも`proteomics`とか`phylogeny`とかいろいろある。要チェック

###デフォルトのflavor
`$source/contrib/flavor`内にデフォルトのflavorがある。
デフォルトの`config`ディレクトリを上書きする。

###オリジナルのflavor
自分用にカスタマイズしたflavorを使用したい場合は
`/path/to/myproject/`に設定ファイル`main.yaml`を置いておき、

```bash:install_myflavor
fab - H target_hostname -c $source/contrib/flavor/minimal/fabricrc_debian.txt install_biolinux:flavor=/path/to/myproject
```

する。



##biologicalデータのインストール

主要な生物種のゲノムやそのインデックス、dbsnp、トランスクリプトームなどのデータを[amazon  S3 bucketでホスティング](https://aws.amazon.com/datasets/Biology?browse=1)しており、そこからインストールする。すべてのデータを入れたい場合は

```bash:install_all_biodata
fab -f $source/data_fabfile.py -H <Host名> install_data_s3
```

これでインストールされるデータのリストは`$source/config/biodata.yaml`にある。
一部のデータのみを入れたい場合は、これを`my_biodata.yaml`としてコピー、編集して以下のコマンド

```bash:install_custom_biodata
fab -f $source/data_fabfile.py -H <Host名> install_data_S3:my_biodata.yaml
```

ダウンロードするディレクトリは`$source/config/fabricrc.txt`内に書かれている。デフォルトは`/mnt/biodata`


##追記

[2015/09/09]
簡単に作れるインデックスなどはAmazon S3でホスティングしているわけではないため、`install_data_S3`よりも、単に`install_data`にした方が良い。例

```bash
fab -f $source/data_fabfile.py -H <host名> install_data 
```
こうすると、
[Amazon S3からダウンロード]
↓
[[GGD](https://github.com/arq5x/ggd)[^2]を用いてEnsemblなどからダウンロード]
↓
[ローカルでインデックスのビルド]
の順に行ってくれるので、すべてのデータが入る。

[^2]: 外部のデータ置き場とのインターフェイスになることを目指したツール…ちゃんと管理されてるのか不安


---

まだ模索中なので随時更新する予定