ChromeOSを開発マシンにするために知っておく基本的な３つのこと

Chromebookは電源が長持ちするので、持ち歩いて隙間時間でコーディング、なんてことができる。
はじめのころは、croutonでubuntuをいれてやっていたが、やはりChromeOSのほうが断然軽く動くし、お手軽に使える。
とはいえ使うためのコツがあるので、それを共有したいと思う。
なお、Chromebookをdeveloper modeで起動していることを前提としているので、そのやり方は[こちら](http://qiita.com/yasuki/items/f6a8a350087517b0069b)を参照。

## 1. sshクライアント
ChromeOSで一般的なterminalプログラム起動は、`Ctrl+Alt+t`であり、これはブラウザ内でcroshを起動する。
developer modeでOSを起動していれば、croshの`shell`コマンドでbashを起動することができる。
しかし、如何せんブラウザ内で起動しているターミナルプログラムなので、`Ctrl+w`はブラウザのショートカットとして認識され、ブラウザタブを閉じようとしてしまう。
このショートカットは、bashのコマンドライン編集では直前の単語削除だし、vimではウィンドウ操作のコマンドであり、使えないことでのストレスはハンパない。
そのため、ブラウザ内起動ではないterminalプログラムを探すこととなる。
そこで、以下のChromeアプリを使うことがおすすめだ。
[Secure Shell](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0CB0QFjAA&url=https%3A%2F%2Fchrome.google.com%2Fwebstore%2Fdetail%2Fsecure-shell%2Fpnhechapfaindjhompbnflcldabbghjo%3Fhl%3Dja&ei=TTsWVdzAH-bLmAXGlIGAAw&usg=AFQjCNFRVHIiFa467JDTZNXbXLlomQ5c7A&sig2=NOFEBSm8xtnuUHrT-3tF5w&bvm=bv.89381419,d.dGY)

これは、ブラウザとは独立したウィンドウで起動するterminalプログラムである。
残念ながら、Secure Shellのcroshウィンドウを複数実行する方法がわからない。実現できるのであれば方法を教えてほしい。

Secure Shellは一般的にはsshクライアントとして使うのだが、その場合１点だけコツがいる。
RSA鍵のインポートが難しかったのだ。
こちらの[FAQ](http://git.chromium.org/gitweb/?p=chromiumos/platform/assets.git;a=blob;f=chromeapps/nassh/doc/faq.txt)を読むと、公開鍵のファイル名は以下のようにしておく必要がある。

* 公開鍵ファイル：拡張子を`.pub`とする
* 秘密鍵ファイル：拡張子を付けてはいけない

そうした上で、`Identity`の項の`import...`ボタンを押して、ファイル選択するウィンドウで、上記２つの鍵ファイルを同時複数に選択して、オープンすると読み込むことができる。

## 2. ユーザランド
ChromeOS/Chromiumは、アーキテクチャとしてユーザが使うストレージ領域とシステム領域を明確に分けている。
そして、ユーザが使う領域では、独自のプログラムが実行できないようになっているのだ。

```shell-session
[chronos@localhost:~]$ df -m
Filesystem                                                   1M-blocks  Used Available Use% Mounted on
/dev/root                                                         1205  1055       151  88% /
devtmpfs                                                          1946     0      1946   0% /dev
tmp                                                               1947   106      1841   6% /tmp
run                                                               1947     1      1946   1% /run
shmfs                                                             1947    31      1916   2% /dev/shm
/dev/sda1                                                        10721  4008      6162  40% /home
/dev/sda8                                                           12     1        12   1% /usr/share/oem
/dev/mapper/encstateful                                           3162    58      3105   2% /var
media                                                             1947     0      1947   0% /media
none                                                              1947     0      1947   0% /sys/fs/cgroup
/home/.shadow/88d11efa6e80238bf0899c98bba8777c28961de0/vault     10721  4008      6162  40% /home/chronos/user
/dev/sdb1                                                        28962 13451     14034  49% /media/removable/USB_UNITY
```
この`/home/.shadow`配下がユーザランドだ。
この中では、自作したプログラムはおろかシェルスクリプトですら、直接的な実行が許されない。

```shell-session
[chronos@localhost:~]$ cat hoge.sh
#!/bin/sh
echo 'hello world, hoge'
exit 1
[chronos@localhost:~]$ chmod a+x hoge.sh 
[chronos@localhost:~]$ ./hoge.sh
bash: ./hoge.sh: Permission denied
```
以下のようにすれば実行できる。

```shell-session
[chronos@localhost:~]$ sh ./hoge.sh
hello world, hoge
[chronos@localhost:~]$ cat ./hoge.sh | sh
hello world, hoge
```
ところが、`/usr/local/bin`に持ってくると直接実行できる。

```shell-session
[chronos@localhost:~]$ sudo cp hoge.sh /usr/local/bin
[chronos@localhost:~]$ /usr/local/bin/hoge.sh 
hello world, hoge
```
なんらかのソースをビルドするときは、シェルから起動することも多い。
１ファイルだけ実行するなら、shに引数で渡してやればいいのだが、シェルスクリプトの中で、さらにファイル名直接指定でサブスクリプトを呼び出している場合は、そこでエラーになってしまう。
なので、作業は`/usr/local/home`といった作業ディレクトリを作り、その下で実行するほうがよい。

作業ディレクトリは、chronosユーザを所有者として、書き込み権限を与えておくと、いちいちルート権限で実行しなくても良くなる。
さらに、chronosユーザのホームディレクトリに/usr/local/homeへのシンボリックリンクを作っておくと便利である。
以下のように作業ディレクトリを作るとよい。

```shell-session
$ sudo mkdir /usr/local/home
$ sudo chown -R chronos:chronos /usr/local/home
$ ln -s /usr/local/home /home/chronos/user/sandbox
```

上記の通り作ったとすると、使い方は以下のようになる。

```shell-session
[chronos@localhost:~]$ cd ~
[chronos@localhost:~]$ cat ~/sandbox/hoge.sh 
#!/bin/sh
echo 'hello world, hoge'
exit 1

[chronos@localhost:~]$ ~/sandbox/hoge.sh 
hello world, hoge
[chronos@localhost:~]$ cd sandbox/
[chronos@localhost:sandbox]$ ./hoge.sh 
hello world, hoge
[chronos@localhost:sandbox]$ pwd
/home/chronos/user/sandbox
```

なお、USBなど他の領域に作業ディレクトリを作り、`/usr/local/`からシンボリックリンクを貼っても、実ファイルがシステム領域にないとプログラム実行はできなかった。なので、内蔵ディスクを消費するしかないようだ。

## 3. crew
あとは、[crew](http://qiita.com/yasuki/items/9d7f7eb3f38aa51701d3)を入れたらほぼなんでもできる。
`pip`などの周辺ツールや、環境変数の設定を忘れずに。