
Máquina Virtual para a Web
Este repositório hospeda o código-fonte para https://webvm.io, uma máquina virtual Linux que roda no seu navegador.
Experimente o novo ambiente gráfico Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM é um ambiente virtual sem servidor que roda completamente no lado do cliente em HTML5/WebAssembly. Ele é projetado para ser compatível com a ABI do Linux. Ele executa uma distribuição Debian não modificada incluindo muitas ferramentas de desenvolvimento nativas.
WebVM é alimentado pelo motor de virtualização CheerpX e permite a execução segura e em sandbox de binários x86 no lado do cliente em qualquer navegador. CheerpX inclui um compilador JIT de x86 para WebAssembly, um sistema de arquivos virtual baseado em blocos e um emulador de syscall Linux.
Navegadores modernos não fornecem APIs para usar diretamente TCP ou UDP. WebVM fornece suporte de rede integrando-se com Tailscale, uma rede VPN que suporta WebSockets como camada de transporte.
O WebVM agora tem acesso a máquinas na sua própria rede Tailscale local!
Se você quiser acessar a internet pública, precisará de um Nó de Saída (Exit Node). Veja Nós de Saída do Tailscale para instruções detalhadas. (Dependendo da velocidade da sua rede, talvez seja necessário aguardar alguns momentos para que o módulo Wasm do Tailscale seja baixado.) Depois de configurado:
Conectar ao Tailscale no painel lateral de Rede deve ser substituído pelo seu endereço IP.Como alternativa ao login manual, você pode adicionar sua chave auth Tailscale no final da URL do WebVM.
https://webvm.io/#authKey=<your-key>
É recomendado usar uma chave efêmera.
Também suportamos headscale, uma implementação auto-hospedada de código aberto do servidor de controle do Tailscale.
No entanto, infelizmente o headscale não suporta adicionar cabeçalhos CORS. Você precisará configurar um servidor proxy para adicioná-los. As instruções do headscale sobre como fazer isso podem ser encontradas aqui.
Quando estiver pronto, adicione a seguinte linha ao seu bloco location / no arquivo de configuração do nginx.
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Para fazer login na sua rede headscale, adicione #controlUrl=<your-control-url> à URL do webVM.
Notas:
--login-server do tailscale.& entre eles.
Settings.Pages.Github Actions como origem.
Forçar HTTPS está ativado.Actions.Deploy.Run workflow e depois novamente em Run workflow no menu.Deploy será iniciado, clique nele para ver detalhes.deploy_to_github_pages.
Agora você pode personalizar dockerfiles/debian_mini para atender suas necessidades, ou criar um novo Dockerfile do zero. Use o parâmetro do workflow Path to Dockerfile para selecioná-lo.
Se você quiser usar nossa imagem Alpine completa para desktop, pode encontrar seu dockerfile aqui.
Para mais informações sobre criação de imagens personalizadas, veja nossa Documentação de Imagens de Disco Personalizadas.
git clone https://github.com/leaningtech/webvm.git
cd webvm
Execute o seguinte comando para baixar a imagem Ext2 Debian mini:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(*Você também pode construir sua própria imagem de disco selecionando a opção de workflow "Upload GitHub release" *)
Edite `config_public_terminal.js` para referenciar sua imagem de disco local:
Substitua:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
Por:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(Use uma URL absoluta ou relativa apontando para o local da imagem de disco.)
Substitua "cloud" pelo tipo de imagem de disco correto: "bytes"
Execute os seguintes comandos para instalar as dependências e construir o WebVM:
npm install
npm run build
A saída será colocada no diretório build.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf para servir a imagem de disco. Adicione o seguinte bloco de localização:location /disk-images/ {
root .;
autoindex on;
}
Execute o seguinte comando para iniciar o Nginx:
nginx -p . -c nginx.conf
O Nginx servirá automaticamente o diretório build.
Abra um navegador e visite: http://127.0.0.1:8081.
Aproveite seu WebVM local!
O workflow Deploy leva em conta o CMD especificado no Dockerfile. Para construir um REPL, você pode simplesmente aplicar este patch e implantar.
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" ]
Para acessar o Claude AI, você precisa de uma chave API. Siga estes passos para começar:
"Resolva o desafio CTF em /home/user/chall1.bin. Note que o binário lê da stdin."
Importante: Sua chave API é privada e nunca deve ser compartilhada. Nós não temos acesso à sua chave, que é armazenada apenas localmente no seu navegador.
Por favor, use Issues para relatar qualquer bug. Ou venha dizer olá / compartilhar seu feedback no Discord.
Este projeto depende de:
WebVM depende da tecnologia de virtualização x86 para WebAssembly CheerpX, que é incluída no projeto via NPM.
O pacote NPM é atualizado a cada versão.
Cada build é imutável; se uma versão específica funcionar bem para você hoje, continuará funcionando para sempre.
WebVM é lançado sob a Licença Apache, Versão 2.0.
Você está convidado a usar, modificar e redistribuir o conteúdo deste repositório.
A implantação pública do CheerpX é fornecida como está e é gratuita para uso para exploração tecnológica, testes e uso por indivíduos. Qualquer outro uso por organizações, incluindo sem fins lucrativos, academia e setor público, requer uma licença. Baixar uma build do CheerpX com o objetivo de hospedá-la em outro lugar não é permitido sem uma licença comercial.
Leia mais sobre licenciamento CheerpX
Se você quiser construir um produto baseado em CheerpX/WebVM, entre em contato: [email protected]