
Macchina virtuale per il Web
Questo repository ospita il codice sorgente di https://webvm.io, una macchina virtuale Linux che gira nel tuo browser.
Prova il nuovo ambiente grafico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM è un ambiente virtuale senza server che gira interamente lato client in HTML5/WebAssembly. È progettato per essere compatibile con l'ABI Linux. Esegue una distribuzione Debian non modificata che include molti toolchain nativi per lo sviluppo.
WebVM è alimentato dal motore di virtualizzazione CheerpX e consente l'esecuzione sicura e isolata di binari x86 lato client in qualsiasi browser. CheerpX include un compilatore JIT x86-to-WebAssembly, un file system virtuale basato su blocchi e un emulatore di syscall Linux.
I browser moderni non forniscono API per utilizzare direttamente TCP o UDP. WebVM fornisce supporto di rete integrandosi con Tailscale, una rete VPN che supporta WebSocket come livello di trasporto.
Ora WebVM ha accesso alle macchine nella tua rete Tailscale locale!
Se desideri accedere a Internet pubblico, avrai bisogno di un Nodo di Uscita. Vedi Tailscale Exit Nodes per istruzioni dettagliate. (A seconda della velocità della tua rete, potresti dover attendere qualche istante per il download del modulo Wasm di Tailscale.) Una volta configurato:
In alternativa all'accesso manuale, puoi aggiungere la tua chiave di autenticazione Tailscale alla fine dell'URL di WebVM.
https://webvm.io/#authKey=<la-tua-chiave>
Si consiglia di utilizzare una chiave effimera.
Supportiamo anche headscale, un'implementazione open source self-hosted del server di controllo Tailscale.
Tuttavia, headscale purtroppo non supporta l'aggiunta di intestazioni CORS. Dovrai configurare un proxy per aggiungerle. Le istruzioni di Headscale per farlo si trovano qui.
Una volta pronto, aggiungi le seguenti righe al blocco location / nel tuo file di configurazione nginx.
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Per accedere alla tua rete headscale, aggiungi #controlUrl=<il-tuo-control-url> all'URL di WebVM.
Note:
--login-server della riga di comando di tailscale.& in mezzo.
Impostazioni.Pagine.GitHub Actions come sorgente.
Forza HTTPS sia abilitato.Azioni.Deploy.Esegui workflow e poi di nuovo su Esegui workflow nel menu.Deploy inizierà; cliccaci sopra per vedere i dettagli.deploy_to_github_pages.
Ora puoi personalizzare dockerfiles/debian_mini per le tue esigenze, o creare un nuovo Dockerfile da zero. Usa il parametro del workflow Percorso del Dockerfile per selezionarlo.
Se desideri utilizzare la nostra immagine Alpine desktop completa, puoi trovare il suo dockerfile qui.
Per maggiori informazioni sulla creazione di immagini personalizzate, consulta la nostra documentazione sulle immagini disco personalizzate.
git clone https://github.com/leaningtech/webvm.git
cd webvm
Esegui il seguente comando per scaricare l'immagine Debian mini Ext2:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(*Puoi anche costruire la tua immagine disco selezionando l'opzione del workflow "Carica release GitHub" *)
Modifica config_public_terminal.js per fare riferimento alla tua immagine disco locale:
Sostituisci:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
Con:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(Usa un URL assoluto o relativo che punti alla posizione dell'immagine disco.)
Sostituisci "cloud" con il tipo corretto di immagine disco: "bytes"
Esegui i seguenti comandi per installare le dipendenze e costruire WebVM:
npm install
npm run build
L'output verrà inserito nella directory build.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf per servire l'immagine disco. Aggiungi il seguente blocco location:location /disk-images/ {
root .;
autoindex on;
}
Esegui il seguente comando per avviare Nginx:
nginx -p . -c nginx.conf
Nginx servirà automaticamente la directory build.
Apri un browser e visita: http://127.0.0.1:8081.
Goditi la tua WebVM locale!
Il workflow Deploy tiene conto del CMD specificato nel Dockerfile. Per costruire un REPL puoi semplicemente applicare questa patch e distribuire.
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" ]
Per accedere a Claude AI, hai bisogno di una chiave API. Segui questi passaggi per iniziare:
"Risolvi la sfida CTF in /home/user/chall1.bin. Nota che il binario legge da stdin."
Importante: La tua chiave API è privata e non dovrebbe mai essere condivisa. Noi non abbiamo accesso alla tua chiave, che viene conservata solo localmente nel tuo browser.
Utilizza Issues per segnalare qualsiasi bug. Oppure vieni a salutarci / condividere il tuo feedback su Discord.
Questo progetto dipende da:
WebVM dipende dalla tecnologia di virtualizzazione x86-to-WebAssembly CheerpX, inclusa nel progetto tramite NPM.
Il pacchetto NPM viene aggiornato a ogni release.
Ogni build è immutabile: se una versione specifica funziona bene per te oggi, continuerà a funzionare per sempre.
WebVM è rilasciato sotto la Licenza Apache, Versione 2.0.
Sei libero di utilizzare, modificare e ridistribuire i contenuti di questo repository.
La distribuzione pubblica di CheerpX è fornita così com'è ed è libera da usare per esplorazione tecnologica, test e uso da parte di singoli individui. Qualsiasi altro uso da parte di organizzazioni, inclusi senza scopo di lucro, accademia e settore pubblico, richiede una licenza. Non è consentito scaricare una build di CheerpX allo scopo di ospitarla altrove senza una licenza commerciale.
Leggi di più sulla licenza di CheerpX
Se desideri costruire un prodotto basato su CheerpX/WebVM, contattaci: [email protected]