sacloud / usacon

A browser extension for using SakuraCloud CLI in the control panel
GNU Affero General Public License v3.0
0 stars 1 forks source link

copy/v86を利用できないか検討 #90

Closed yamamoto-febc closed 2 years ago

yamamoto-febc commented 3 years ago

現在のwasm-terminal上でUsacloudのwasmを動かす形の代わりに https://github.com/copy/v86 上でミニマムなLinux + x86向けのUsacloudを動かせないか検討する。

上手くいけばbash-completionが動かせたり、ストレージの扱いが容易になるなど様々なメリットがありそう。 以下のような点について確認が必要。

参考情報

UsaConの前身であるUsacloud Sandboxでは、Docker上でrbashを動かしていた。 参考: Usacloud SandboxでのDockerfile抜粋

RUN ln -s /bin/bash /bin/rbash \
  && echo /bin/rbash >> /etc/shells \
  # ...
  && chown root. /home/usacloud/.bashrc \
  && chmod 755 /home/usacloud/.bashrc \
  && mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

ミニマムなLinux上に上記のような環境を構築しUsacloud+ミニマムなコマンド群(echoやenv、jqなど)を動かしたい。 これをv86上でどう実現するか調査する。

yamamoto-febc commented 3 years ago

ゲストからのネットワーク接続はWebSocketによるリレーとなる。 https://github.com/copy/v86/blob/master/docs/networking.md

UsaConはセンシティブなデータを含むためユーザー共有のリレーサーバを立てる方針は受け入れられない。

通常のhttpsによるAPIコールの代わりにホスト側でAPIを叩く仕組みを用意すれば良いが、 この場合何らかの形でゲスト->ホスト呼び出しを実装する必要がある。

シリアル経由などで実装可能と思われるがどれくらいの実装ボリュームになるかまだ見えていない。 参考: https://github.com/copy/v86/blob/master/examples/serial.html

実装イメージ

関連: Hacobuneを利用する案

HacobuneがAPIをサポートし、ある程度無料枠が提供されるのであればUsacloud Sandboxのようにバックエンドをコンテナにする方針も取れる。この場合上記のような複雑な実装は不要。しかしAPIだけでHacobuneを操作できるようになるかは現時点では不明。

yamamoto-febc commented 3 years ago

ボーナス: 上記の実装を採用した場合、https://github.com/sacloud/usacon/pull/63 などで導入されたSharedArrayBufferを利用するためのクロスオリジン分離対応が不要となる。これによりwebRequestwebRequestBlockingなどのパーミッションが不要になるというメリットもある。

yamamoto-febc commented 3 years ago

プロトタイプ: https://sacloud.github.io/usacon-v86-prototype/

copy/v86上でUsacloudを起動するプロトタイプ実装のデモ。 初期段階としては以下のように実装している。

yamamoto-febc commented 3 years ago

問題点: 遅い

Linux自体のブートプロセスはv86のステート機能を利用し起動済みステートを保持&復元することで短縮できそう。 usacloud自体の起動やAPIリクエストの速度についても遅い印象だが、現行のwasm版と比較すると問題にならない程度かもしれない。

yamamoto-febc commented 3 years ago

https://github.com/sacloud/usacon-v86-prototype/commit/2621520033d6bcae911ea001719c0c8dd2411fa1 でv86のステート機能を利用するように更新済み。 OSイメージ+ステートで42MBほどになるが、UsaConでブラウザ拡張として利用するならあまり問題にならないかも。

yamamoto-febc commented 2 years ago

次回大きな設計変更を行う際に再考する。