Virtual Machine for the Web
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.
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 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.
- If you are using a custom domain, ensure
- Click on
- 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 moreRun workflow
in the menu.
- Click on
- 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.
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
andCWD
- Replace
IMAGE_URL
with the URL (absolute or relative) for the Ext2 image. For example"/debian_mini_20230519_5022088024.ext2"
- Uncomment the default values for
- Build WebVM using
npm
, output will be placed in thebuild
directorynpm install
npm run build
- Start NGINX, it automatically points to the
build
directory just creatednginx -p . -c nginx.conf
- Visit
http://127.0.0.1:8081
and enjoy your local WebVM
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" ]
Please use Issues to report any bug. Or come to say hello / share your feedback on Discord.
- 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
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
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