BeagleBone BlackのUbuntu14.04.1にCloud9をインストールする

[前回](http://qiita.com/masato/items/59f73ae28683a5af95ea)はBeagleBone BlackにWebIDEのEclipse Orionをインストールしました。[Cloud9](https://github.com/ajaxorg/cloud9)はBeagleBone Blackの[イメージ配布サイト](http://beagleboard.org/latest-images)にあるDebianとAngstromには最初からインストールされています。

## Cloud9のインストール

BeagleBone BlackをWindows7とUSB-Ethernet接続をしてSSHでログインします。Cloud9はNode.jsでできています。[前回](http://qiita.com/masato/items/16b801c257551b1c68ae)インストールしたNode.jsとnpm環境を使います。

BeagleBone BlackにWindows7からSSH接続します。

``` bash
$ ssh ubuntu@arm.local
```

UbuntuにARM用のNode.jsをインストールします。Cloud9はGitHubからclone後に、npm installします。

バージョンを確認します。

``` bash
$ node -v
v0.10.25
$ npm -v
1.3.10
```

Cloud9を`git clone`してインストールします。

``` bash
$ git clone https://github.com/ajaxorg/cloud9.git
$ cd cloud9
$ npm install --production
```

バージョン確認します。

``` bash
$ npm list cloud9
cloud9@0.7.0 /home/ubuntu/cloud9
└── (empty)
```

Mercurialをインストールしないと起動に失敗します。

``` bash
$ sudo apt-get update
$ sudo apt-get install hg
```


## pm2でデモナイズ

[pm2](https://github.com/Unitech/pm2)をインストールします。

``` bash
$ sudo npm install pm2 -g
```

バージョンを確認します。

``` bash
$ sudo npm list -g pm2
/usr/local/lib
└── pm2@0.12.5
```

pm2にアプリを追加するスクリプトを用意します。

``` bash:~/pm2_cloud9.sh
#!/bin/bash
read -d '' my_json <<_EOF_
{
  "name"       : "cloud9",
  "script"     : "/home/ubuntu/cloud9/bin/cloud8.sh",
  "args"      : ["-l","0.0.0.0","-w","/home/ubuntu/applications"]
}
_EOF_
echo $my_json | pm2 start -
```

作業ディレクトリを作成します。

``` bash
$ mkdir -p /home/ubuntu/applications
```

pm2にClou9を登録してCloud9を起動します。

``` bash
$ chmod u+x pm2_cloud9.sh
$ ./pm2_cloud9.sh
[PM2] Process launched
┌──────────┬────┬──────┬───────┬────────┬───────────┬────────┬────────────┬──────────┐
│ App name │ id │ mode │ PID   │ status │ restarted │ uptime │     memory │ watching │
├──────────┼────┼──────┼───────┼────────┼───────────┼────────┼────────────┼──────────┤
│ cloud9   │ 0  │ fork │ 1189 │ online │         0 │ 2m     │ 1.090 MB   │ disabled │
└──────────┴────┴──────┴───────┴────────┴───────────┴────────┴────────────┴──────────┘
 Use `pm2 info <id|name>` to get more details about an app
```

再起動後もCloud9が起動するようにinitスクリプトを生成します。

``` bash
$ sudo pm2 startup ubuntu -u ubuntu
[PM2] Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup...
[PM2] -ubuntu- Using the command:
      su -c "chmod +x /etc/init.d/pm2-init.sh && update-rc.d pm2-init.sh defaults"
 Adding system startup for /etc/init.d/pm2-init.sh ...
   /etc/rc0.d/K20pm2-init.sh -> ../init.d/pm2-init.sh
   /etc/rc1.d/K20pm2-init.sh -> ../init.d/pm2-init.sh
   /etc/rc6.d/K20pm2-init.sh -> ../init.d/pm2-init.sh
   /etc/rc2.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
   /etc/rc3.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
   /etc/rc4.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
   /etc/rc5.d/S20pm2-init.sh -> ../init.d/pm2-init.sh
[PM2] Done.
```

pm2を一度リスタートして、Cloud9のプロセスが起動することを確認します。

``` bash
$ sudo /etc/init.d/pm2-init.sh restart
[sudo] password for ubuntu:
Restarting pm2
[PM2] Dumping processes
[PM2] Deleting all process
[PM2] deleteProcessId process id 0
┌──────────┬────┬──────┬─────┬────────┬───────────┬────────┬────────┬──────────┐
│ App name │ id │ mode │ PID │ status │ restarted │ uptime │ memory │ watching │
└──────────┴────┴──────┴─────┴────────┴───────────┴────────┴────────┴──────────┘
 Use `pm2 info <id|name>` to get more details about an app
[PM2] Stopping PM2...
[PM2] [WARN] No process found
[PM2] All processes has been stopped and deleted
[PM2] PM2 stopped
Starting pm2
[PM2] Spawning PM2 daemon
[PM2] Success
[PM2] Resurrecting
Process /home/ubuntu/cloud9/bin/cloud9.sh launched
┌──────────┬────┬──────┬──────┬────────┬───────────┬────────┬────────────┬──────────┐
│ App name │ id │ mode │ PID  │ status │ restarted │ uptime │     memory │ watching │
├──────────┼────┼──────┼──────┼────────┼───────────┼────────┼────────────┼──────────┤
│ cloud9   │ 0  │ fork │ 1405 │ online │         0 │ 0s     │ 1.074 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴───────────┴────────┴────────────┴──────────┘
 Use `pm2 info <id|name>` to get more details about an app
```

プロセスを確認します。

```bash
$ pm2 list 0
Describing process with pid 0 - name cloud9
┌───────────────────┬───────────────────────────────────────────┐
│ status            │ online                                    │
│ name              │ cloud9                                    │
│ id                │ 0                                         │
│ path              │ /home/ubuntu/cloud9/bin/cloud9.sh         │
│ args              │ -l 0.0.0.0 -w /home/ubuntu/applications   │
│ exec cwd          │ /home/ubuntu/cloud9                       │
│ error log path    │ /home/ubuntu/.pm2/logs/cloud9-error-0.log │
│ out log path      │ /home/ubuntu/.pm2/logs/cloud9-out-0.log   │
│ pid path          │ /home/ubuntu/.pm2/pids/cloud9-0.pid       │
│ mode              │ fork_mode                                 │
│ node v8 arguments │                                           │
│ watch & reload    │ ✘                                         │
│ interpreter       │ bash                                      │
│ restarts          │ 0                                         │
│ unstable restarts │ 0                                         │
│ uptime            │ 19s                                       │
│ created at        │ 2015-02-11T05:23:56.602Z                  │
└───────────────────┴───────────────────────────────────────────┘
```

ブラウザから確認します。

http://arm.local:3131

![cloud9.png](https://qiita-image-store.s3.amazonaws.com/0/43745/eefc7aa7-dda6-6372-7fd3-9526da411169.png)