Pages

Tuesday, 19 November 2024

webvm, 浏览器里的虚拟机

 Virtual Machine for the Web

webvm.io

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

Thanks to...

This project depends on:

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.

from https://github.com/leaningtech/webvm

(https://github.com/leaningtech/webvm/blob/main/config_github_terminal.js ,

https://github.com/leaningtech/webvm/blob/main/config_public_terminal.js

https://github.com/leaningtech/webvm/releases/ )

 

No comments:

Post a Comment