Closed yamamoto-febc closed 2 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がAPIをサポートし、ある程度無料枠が提供されるのであればUsacloud Sandboxのようにバックエンドをコンテナにする方針も取れる。この場合上記のような複雑な実装は不要。しかしAPIだけでHacobuneを操作できるようになるかは現時点では不明。
ボーナス: 上記の実装を採用した場合、https://github.com/sacloud/usacon/pull/63 などで導入されたSharedArrayBufferを利用するためのクロスオリジン分離対応が不要となる。これによりwebRequest
やwebRequestBlocking
などのパーミッションが不要になるというメリットもある。
プロトタイプ: https://sacloud.github.io/usacon-v86-prototype/
copy/v86上でUsacloudを起動するプロトタイプ実装のデモ。 初期段階としては以下のように実装している。
問題点: 遅い
Linux自体のブートプロセスはv86のステート機能を利用し起動済みステートを保持&復元することで短縮できそう。 usacloud自体の起動やAPIリクエストの速度についても遅い印象だが、現行のwasm版と比較すると問題にならない程度かもしれない。
https://github.com/sacloud/usacon-v86-prototype/commit/2621520033d6bcae911ea001719c0c8dd2411fa1 でv86のステート機能を利用するように更新済み。 OSイメージ+ステートで42MBほどになるが、UsaConでブラウザ拡張として利用するならあまり問題にならないかも。
次回大きな設計変更を行う際に再考する。
現在のwasm-terminal上でUsacloudのwasmを動かす形の代わりに https://github.com/copy/v86 上でミニマムなLinux + x86向けのUsacloudを動かせないか検討する。
上手くいけばbash-completionが動かせたり、ストレージの扱いが容易になるなど様々なメリットがありそう。 以下のような点について確認が必要。
参考情報
UsaConの前身であるUsacloud Sandboxでは、Docker上でrbashを動かしていた。 参考: Usacloud SandboxでのDockerfile抜粋
ミニマムなLinux上に上記のような環境を構築しUsacloud+ミニマムなコマンド群(echoやenv、jqなど)を動かしたい。 これをv86上でどう実現するか調査する。