WebVM
本仓库托管了 https://webvm.io 的源代码,这是一个在浏览器中运行的 Linux 虚拟机。
WebVM 是一个完全在客户端运行的无服务器虚拟环境,基于 HTML5/WebAssembly。它设计为与 Linux ABI 兼容。它运行未经修改的 Debian 发行版,包括许多原生开发工具链。
WebVM 由 CheerpX 虚拟化引擎驱动,可以在任何浏览器上安全、沙盒化地执行 x86 二进制文件。CheerpX 包括一个 x86 到 WebAssembly 的 JIT 编译器、一个虚拟块式文件系统和一个 Linux 系统调用模拟器。
启用网络
- 点击页面顶部的"通过 Tailscale 连接"。
- 登录 Tailscale(如果没有账户,请创建一个)。
- 如果您不熟悉 Tailscale 或需要更多信息,请参阅 WebVM 和 Tailscale。
分叉、部署、自定义
- 分叉仓库。
- 在设置中启用 Github Pages。
- 点击"Settings"。
- 转到"Pages"部分。
- 选择"Github Actions"作为源。
- 如果您使用自定义域名,请确保启用"Enforce HTTPS"。
- 运行工作流程。
- 点击"Actions"。
- 接受提示。这只需要执行一次,以启用分叉的 Actions。
- 点击名为"Deploy"的工作流程。
- 点击"Run workflow",然后在菜单中再次点击"Run workflow"。
- 几秒钟后,新的"Deploy"工作流程将开始,点击它查看详情。
- 工作流程完成后(需要几分钟),它将在"deploy_to_github_pages"作业下显示 URL。
现在您可以根据需要自定义 dockerfiles/debian_mini
,或者从头开始创建新的 Dockerfile。使用"Path to Dockerfile"工作流程参数来选择它。
本地部署
从本地 git clone
- 从 https://github.com/leaningtech/webvm/releases/ 下载
debian_mini
Ext2 镜像。- 您也可以通过选择"Upload GitHub release"工作流程选项来构建自己的镜像。
- 将镜像放在仓库根目录。
- 编辑
index.html
。- 取消注释
CMD
、ARGS
、ENV
和CWD
的默认值。 - 将
DEVICE_TYPE
替换为"bytes"
。 - 将
IMAGE_URL
替换为 Ext2 镜像的名称。例如"debian_mini_20230519_5022088024.ext2"
。
- 取消注释
- 启动本地 HTTP 服务器。
- 享受您的本地 WebVM。
自定义示例:Python3 REPL
"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" ]
错误和问题
请使用 Issues 报告任何错误。 或者来 Discord 打个招呼/分享您的反馈。
更多链接
- WebVM:浏览器中的无服务器 x86 虚拟机
- WebVM:通过 Tailscale 实现完整网络的 WebAssembly 中的 Linux 虚拟化
- Mini.WebVM:通过 WebAssembly 在浏览器中虚拟化的 Dockerfile 定制 Linux 环境
- GitHub Pages 部署参考:Mini.WebVM
- 创造不可能:使用 WebAssembly 在浏览器中实现 X86 虚拟化 JsNation 2022 演讲
感谢...
本项目依赖于:
- CheerpX,由 Leaning Technologies 开发,用于 x86 虚拟化和 Linux 模拟
- xterm.js,https://xtermjs.org/,提供基于 Web 的终端模拟器
- Tailscale,提供网络组件
- lwIP,提供 TCP/IP 协议栈,通过 Cheerp 编译为 Web 版本
版本控制
WebVM 依赖于 CheerpX x86 到 WebAssembly 虚拟化技术。当前最新构建的链接始终可在 https://cheerpxdemos.leaningtech.com/publicdeploy/LATEST.txt 获取。CheerpX 的构建是不可变的,并且有唯一的版本。示例链接如下:
https://cheerpxdemos.leaningtech.com/publicdeploy/20230517_94/cx.js
我们强烈建议用户不要使用最新构建。请直接使用特定的构建,以避免意外的回归。由于构建是不可变的,如果它们现在对您有用,它们将永远保持有用。
许可证
WebVM 根据 Apache License, Version 2.0 发布。
欢迎使用、修改和重新分发本仓库的内容。
公共 CheerpX 部署按原样提供,可免费用于技术探索、测试和非商业用途。不允许下载 CheerpX 构建以在其他地方托管。
如果您想基于 CheerpX/WebVM 构建产品,请联系:sales@leaningtech.com