
このリポジトリは、ブラウザ上で動作するLinux仮想マシンである https://webvm.io のソースコードをホストしています。
新しいAlpine/Xorg/i3グラフィカル環境をお試しください:https://webvm.io/alpine.html
WebVMは、HTML5/WebAssembly上で完全にクライアントサイドで動作するサーバーレスの仮想環境です。Linux ABI互換になるように設計されています。多くのネイティブ開発ツールチェーンを含む、未改変のDebianディストリビューションを実行します。
WebVMはCheerpX仮想化エンジンを搭載しており、あらゆるブラウザ上でx86バイナリの安全でサンドボックス化されたクライアントサイド実行を可能にします。CheerpXには、x86からWebAssemblyへのJITコンパイラ、仮想ブロックベースのファイルシステム、Linuxシステムコールエミュレータが含まれています。
最新のブラウザでは、TCPやUDPを直接使用するためのAPIは提供されていません。WebVMは、トランスポート層としてWebSocketをサポートするVPNネットワークであるTailscaleと統合することで、ネットワーキングサポートを提供します。
これでWebVMは、あなた自身のローカルTailscaleネットワーク内のマシンにアクセスできるようになりました!
パブリックインターネットにアクセスしたい場合は、Exit Nodeが必要です。詳細な手順については Tailscale Exit Nodes を参照してください。(ネットワーク速度によっては、Tailscale Wasmモジュールのダウンロードに少し時間がかかる場合があります。)設定が完了したら:
Connect to Tailscale ボタンがあなたのIPアドレスに置き換わっているはずです。手動でログインする代わりに、webvm URLの末尾にtailscale認証キーを追加することもできます。
https://webvm.io/#authKey=<your-key>
エフェメラルキーを使用することをお勧めします。
また、Tailscaleコントロールサーバーのセルフホスト型オープンソース実装である headscale もサポートしています。
ただし、headscaleは残念ながらCORSヘッダーの追加をサポートしていません。それらを追加するには、プロキシサーバーを設定する必要があります。その方法については、headscaleの指示が こちら にあります。
準備ができたら、nginx設定ファイルの location / ブロックに以下の行を追加します。
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
headscaleネットワークにログインするには、webVM URLに #controlUrl=<your-control-url> を追加します。
注意事項:
--login-server コマンドラインオプションと同等です。& で区切ることを忘れないでください。
Settings をクリックします。Pages セクションに移動します。Github Actions を選択します。
Enforce HTTPS が有効になっていることを確認してください。Actions をクリックします。Deploy という名前のワークフローをクリックします。Run workflow をクリックし、メニューでもう一度 Run workflow をクリックします。Deploy ワークフローが開始されます。クリックして詳細を確認します。deploy_to_github_pages ジョブの下にURLが表示されます。
これで、dockerfiles/debian_mini を必要に応じてカスタマイズしたり、新しいDockerfileをゼロから作成したりできます。Path to Dockerfile ワークフローパラメータを使用して選択します。
完全なデスクトップAlpineイメージを使用したい場合は、そのDockerfileを こちら で見つけられます。
カスタムイメージの作成に関する詳細は、カスタムディスクイメージのドキュメント を参照してください。
git clone https://github.com/leaningtech/webvm.git
cd webvm
次のコマンドを実行して、DebianミニExt2イメージをダウンロードします:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(* 「Upload GitHub release」 ワークフローオプションを選択して、独自のディスクイメージをビルドすることもできます*)
ローカルのディスクイメージを参照するように config_public_terminal.js を編集します:
次の部分を置き換えます:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
以下のように:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(ディスクイメージの場所を指す絶対URLまたは相対URLを使用してください。)
"cloud" を正しいディスクイメージタイプである "bytes" に置き換えます。
次のコマンドを実行して依存関係をインストールし、WebVMをビルドします:
npm install
npm run build
出力は build ディレクトリに配置されます。
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf ファイルを変更してディスクイメージをサーブします。次のlocationブロックを追加します:location /disk-images/ {
root .;
autoindex on;
}
次のコマンドを実行してNginxを起動します:
nginx -p . -c nginx.conf
Nginxは自動的に build ディレクトリをサーブします。
ブラウザを開いて http://127.0.0.1:8081 にアクセスします。
ローカルのWebVMをお楽しみください!
Deploy ワークフローは、Dockerfileで指定された CMD を考慮します。REPLをビルドするには、このパッチを適用してデプロイするだけです。
diff --git a/dockerfiles/debian_mini b/dockerfiles/debian_mini
index 2878332..1f3103a 100644
--- a/dockerfiles/debian_mini
+++ b/dockerfiles/debian_mini
@@ -15,4 +15,4 @@ WORKDIR /home/user/
# We set env, as this gets extracted by Webvm. This is optional.
ENV HOME="/home/user" TERM="xterm" USER="user" SHELL="/bin/bash" EDITOR="vim" LANG="en_US.UTF-8" LC_ALL="C"
RUN echo 'root:password' | chpasswd
-CMD [ "/bin/bash" ]
+CMD [ "/usr/bin/python3" ]
Claude AIにアクセスするには、APIキーが必要です。以下の手順に従って開始してください:
"/home/user/chall1.bin のCTFチャレンジを解いてください。バイナリは標準入力から読み取ることに注意してください。"
重要: APIキーは非公開であり、決して共有しないでください。私たちはあなたのキーにアクセスできず、キーはブラウザのローカルにのみ保存されます。
バグの報告は Issues を使用してください。または、Discord でご挨拶やフィードバックをお寄せください。
このプロジェクトは以下に依存しています:
WebVMはCheerpX x86-to-WebAssembly仮想化技術に依存しており、これは NPM を介してプロジェクトに含まれています。
NPMパッケージはリリースごとに更新されます。
すべてのビルドは不変です。特定のバージョンが今日うまく動作する場合、それは永遠に動作し続けます。
WebVMはApacheライセンス、バージョン2.0の下でリリースされています。
このリポジトリの内容を自由に使用、変更、再配布していただけます。
公開CheerpXデプロイメントは 現状のまま 提供され、技術探求、テスト、個人による使用のために 無料で使用 できます。非営利、学術、公共部門を含む組織によるその他の使用にはライセンスが必要です。CheerpXビルドを他の場所でホストする目的でダウンロードすることは、商用ライセンスなしでは許可されていません。
CheerpXライセンス の詳細を読む
CheerpX/WebVM上に製品を構築したい場合は、[email protected] までご連絡ください。