Chromebookで開発環境を構築する(挫折編)
プロローグ
スマホ並みの手軽さで、すっかり日常使いのツールとして定着したChromebook。
crostiniが登場してから早一年と幾月。vscodeも導入できちょっとしたjavascriptベースでの開発ならなんとなくこなせるけど、あんなことやこんなこともしてみたいと欲望が増すばかり。
余談1
ChromebookのCPUはIntelのものとARM系のものがある。
crostiniはどちらでも動くけどARM系は開発環境を構築する上では既製のバイナリが少ない状況。ソースコードからビルドするにもCPUパワー不足やビルドするためのストレージが不足するなど苦難が待ち受けています。
何はともあれDockerを入れねば
aptでいとも簡単に導入できます。
調子にのってimageをpullしているとあることに気づくはずです。ストレージが不足していることに。。。
余談2
よくあるChromebookのスペックでは16〜32Gバイトの内蔵ストレージであることがほとんどです。
最近は64Gバイトのものもちらほら見かけますがまだ少数派です。
128Gバイト超えのものはPixelbookぐらいじゃないでしょうか。おそらくPixelbookならばここで書く悩みにはぶち当たらないのでしょう。
ストレージを増やす方法
Chromebookには外付けSDカードがついています。最近はcrostiniから直接アクセスするための機能が追加されています。いざマウント。。。これで128Gバイト追加されました。
意気揚々と/etc/systemd/system/docker.serviceを修正してサービス再起動
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root /mnt/chromeos/removable/SD
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
そしてエラー。
SDカードがFAT32でフォーマットされているため必要なパーミッションの設定ができないこと原因。
余談3
ここでも説明されていますがChromebookで利用可能な外部デバイスのファイルシステムではEXT4などLinuxで一般的に利用しているものは使えません。
FUSEを使ってマウント
そこでSDカード上にディスクイメージを作ってFUSEでマウントしてみました。
$>sudo apt-get install fuse2fs
SDカードにディスクイメージを作成し、EXT4でフォーマットしたのちDockerのデータディレクトリにFUSEでマウント。そしてサービスを起動。
$>dd if=/dev/zero of=disk.img bs=1G count=20
$>sudo mkfs.ext4 disk.img
$>sudo fuse2fs disk.img /var/lib/docker/ -o allow_other
$>sudo sytemctl start docker
うまく起動しました。
ドヤ顔でhello-worldをrun。動きました。でもモッサリ。。。
他のimageもpull。。。遅すぎる。
ディスクイメージに書き込みをテストしてみたら3MB/sぐらいしかでていません。いちをCLASS10のSDカードなのでもうちょっと速いことを期待していたのですが。。。
今回はこれで詰みました。
まとめ
- crostini環境でもdockerは動きます。(ARM系も)
- SDカードの領域を使ってEXT4のファイルシステムをマウントできます。(遅いけど)
- ローカルであれもこれもしたいと思うのはまだ修行が足りない証拠である。
次回へ続く