User: WebVM
Discord server Issues

This repository hosts the source code for https://webvm.io, a Linux virtual machine that runs in your browser.

Try out the new Alpine / Xorg / i3 graphical environment: https://webvm.io/alpine.html



WebVM is a server-less virtual environment running fully client-side in HTML5/WebAssembly. It's designed to be Linux ABI-compatible. It runs an unmodified Debian distribution including many native development toolchains.

WebVM is powered by the CheerpX virtualization engine, and enables safe, sandboxed client-side execution of x86 binaries on any browser. CheerpX includes an x86-to-WebAssembly JIT compiler, a virtual block-based file system, and a Linux syscall emulator.

Enable networking
Modern browsers do not provide APIs to directly use TCP or UDP. WebVM provides networking support by integrating with Tailscale, a VPN network that supports WebSockets as a transport layer.

Open the "Networking" panel from the side-bar
Click "Connect to Tailscale" from the panel
Log in to Tailscale (create an account if you don't have one)
Click "Connect" when prompted by Tailscale
If you are unfamiliar with Tailscale or would like additional information see WebVM and Tailscale.
Fork, deploy, customize
deploy_instructions_gif

Fork the repository.
Enable Github pages in settings.
Click on Settings.
Go to the Pages section.
Select Github Actions as the source.
If you are using a custom domain, ensure Enforce HTTPS is enabled.
Run the workflow.
Click on Actions.
Accept the prompt. This is required only once to enable Actions for your fork.
Click on the workflow named Deploy.
Click Run workflow and then once more Run workflow in the menu.
After a few seconds a new Deploy workflow will start, click on it to see details.
After the workflow completes, which takes a few minutes, it will show the URL below the deploy_to_github_pages job.


You can now customize dockerfiles/debian_mini to suit your needs, or make a new Dockerfile from scratch. Use the Path to Dockerfile workflow parameter to select it.

Local deployment
From a local git clone

Download the debian_mini Ext2 image from https://github.com/leaningtech/webvm/releases/
You can also build your own by selecting the "Upload GitHub release" workflow option
Place the image in the repository root folder
Edit config_github_terminal.js
Uncomment the default values for CMD, ARGS, ENV and CWD
Replace IMAGE_URL with the URL (absolute or relative) for the Ext2 image. For example "/debian_mini_20230519_5022088024.ext2"
Build WebVM using npm, output will be placed in the build directory
npm install
npm run build
Start NGINX, it automatically points to the build directory just created
nginx -p . -c nginx.conf
Visit http://127.0.0.1:8081 and enjoy your local WebVM
Example customization: Python3 REPL
The Deploy workflow takes into account the CMD specified in the Dockerfile. To build a REPL you can simply apply this patch and deploy.

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" ]
Bugs and Issues
Please use Issues to report any bug. Or come to say hello / share your feedback on Discord.

More links
WebVM: server-less x86 virtual machines in the browser
WebVM: Linux Virtualization in WebAssembly with Full Networking via Tailscale
Mini.WebVM: Your own Linux box from Dockerfile, virtualized in the browser via WebAssembly
Reference GitHub Pages deployment: Mini.WebVM
Crafting the Impossible: X86 Virtualization in the Browser with WebAssembly Talk at JsNation 2022
Thanks to...
This project depends on:

CheerpX, made by Leaning Technologies for x86 virtualization and Linux emulation
xterm.js, https://xtermjs.org/, for providing the Web-based terminal emulator
Tailscale, for the networking component
lwIP, for the TCP/IP stack, compiled for the Web via Cheerp
Versioning
WebVM depends on the CheerpX x86-to-WebAssembly virtualization technology, which is included in the project via NPM.

The NPM package is updated on every release.

Every build is immutable, if a specific version works well for you today, it will keep working forever.

License
WebVM is released under the Apache License, Version 2.0.

You are welcome to use, modify, and redistribute the contents of this repository.

The public CheerpX deployment is provided as-is and is free to use for technological exploration, testing and use by individuals. Any other use by organizations, including non-profit, academia and the public sector, requires a license. Downloading a CheerpX build for the purpose of hosting it elsewhere is not permitted without a commercial license.

Read more about CheerpX licensing

If you wa



这是啥项目？
Assistant: WebVM 是一个允许你在浏览器中运行完整 Linux 虚拟环境的项目。它通过 HTML5 和 WebAssembly 技术实现完全在客户端执行，无需服务器支持。其设计目标是与 Linux ABI 兼容，并运行未经修改的 Debian 发行版，其中包括许多原生开发工具链。

以下是 WebVM 项目的几个关键特点：

1. **技术支持**：WebVM 使用 CheerpX 虚拟化引擎，支持安全、沙盒化的 x86 二进制文件在浏览器上的执行。CheerpX 包括一个 x86 到 WebAssembly 的即时编译器、虚拟块级文件系统，以及 Linux 系统调用仿真器。

2. **网络支持**：由于现代浏览器不直接提供 TCP 或 UDP 的 API，WebVM 通过集成 Tailscale（一个支持 WebSockets 传输层的 VPN 网络）提供网络支持。

3. **自定义和部署**：用户可以通过 GitHub Pages 部署自己的 WebVM 实例，或者本地部署。用户也可以自定义 Dockerfile，以创建个性化的虚拟机环境。

4. **开源和授权**：WebVM 在 Apache 2.0 许可证下发布，用户可以自由使用、修改和再分发。不过，CheerpX 的公用部署仅限于个人技术探索、测试和使用，其他用途需要商业授权。

整体来说，WebVM 是一个旨在于提升浏览器内虚拟化能力的创新项目，可以用于技术探索和开发环境搭建。不过，项目的某些功能（如商业用途）可能需要特别注意相关的许可协议。
User: 如何部署？
Assistant: 要在本地或通过 GitHub Pages 部署 WebVM，你可以按照以下步骤进行：

### 1. 使用 GitHub Pages 部署

1. **Fork 仓库：**
   - 登录 GitHub，访问 [WebVM 的 GitHub 仓库](https://github.com/leaningtech/webvm)，并点击 "Fork" 以创建你自己的仓库副本。

2. **启用 GitHub Pages：**
   - 进入你 fork 的仓库，点击 "Settings"（设置）。
   - 在左侧菜单中找到并点击 "Pages"。
   - 在 "Build and Deployment" 的 "Source" 中选择 "GitHub Actions" 作为来源。

3. **运行部署 Workflow：**
   - 点击 "Actions" 选项卡以访问 GitHub Actions。
   - 可能会有启用 Actions 的提示，接受此提示，这只需要在你的 fork 首次使用时执行。
   - 找到名为 "Deploy" 的工作流程，点击进入。
   - 点击页面上的 "Run workflow" 按钮，再次点击确认运行。
   - 等待几分钟，部署工作流程完成后，将会显示部署的 URL。

### 2. 本地部署

1. **下载或构建 Ext2 镜像：**
   - 从 [GitHub Releases](https://github.com/leaningtech/webvm/releases) 页面下载 `debian_mini` Ext2 镜像。
   - 或者，你可以通过选择 “Upload GitHub release” 工作流程方法构建你自己的镜像。

2. **准备项目文件：**
   - 将下载的镜像放置在项目的根目录中。
   - 编辑 `config_github_terminal.js` 文件。
     - 取消注释默认值的 CMD, ARGS, ENV 和 CWD。
     - 替换 IMAGE_URL 为 Ext2 镜像的 URL（可以是绝对路径或相对路径，例如 "/debian_mini_20230519_5022088024.ext2"）。

3. **构建项目：**
   - 确保已安装 Node.js 和 npm。
   - 在项目根目录中运行下列命令，以安装依赖并构建项目：
     ```bash
     npm install
     npm run build
     ```

4. **启动 NGINX 服务器：**
   - 使用以下命令启动 NGINX 服务器，它会自动指向刚刚创建的 build 目录：
     ```bash
     nginx -p . -c nginx.conf
     ```
   - 打开浏览器访问 `http://127.0.0.1:8081`，即可在本地使用 WebVM。

只需根据这些步骤，你就可以在云端（通过 GitHub Pages）或本地搭建 WebVM 环境。如果需要修改 Dockerfile 以满足特定需求，也可以在 `dockerfiles/debian_mini` 文件中进行更改。
User: 详细一点，比如我要在debian上原生运行
Assistant: