
Виртуальная машина для Интернета
В этом репозитории находится исходный код сайта https://webvm.io — виртуальной машины Linux, работающей в вашем браузере.
Попробуйте новое графическое окружение Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM — это серверная виртуальная среда, работающая полностью на стороне клиента в HTML5/WebAssembly. Она спроектирована как совместимая с ABI Linux. В ней работает немодифицированный дистрибутив Debian, включающий множество нативных инструментов разработки.
WebVM работает на движке виртуализации CheerpX и обеспечивает безопасное, изолированное выполнение x86-бинарных файлов в любом браузере. CheerpX включает JIT-компилятор x86-в-WebAssembly, виртуальную файловую систему на основе блоков и эмулятор системных вызовов Linux.
Современные браузеры не предоставляют API для прямого использования TCP или UDP. WebVM обеспечивает поддержку сети за счёт интеграции с Tailscale — VPN-сетью, поддерживающей WebSockets в качестве транспортного уровня.
Теперь WebVM имеет доступ к машинам в вашей локальной сети Tailscale!
Если вы хотите получить доступ к общедоступному интернету, вам понадобится выходной узел (Exit Node). Подробные инструкции см. в Tailscale Exit Nodes. (В зависимости от скорости вашей сети вам может потребоваться подождать несколько секунд, пока загрузится модуль Tailscale Wasm.) После настройки:
В качестве альтернативы ручному входу вы можете добавить ключ аутентификации Tailscale в конец URL-адреса WebVM.
https://webvm.io/#authKey=<your-key>
Рекомендуется использовать эфемерный ключ.
Мы также поддерживаем headscale — самостоятельную реализацию сервера управления Tailscale с открытым исходным кодом.
Однако, к сожалению, headscale не поддерживает добавление CORS-заголовков. Вам потребуется настроить прокси-сервер для их добавления. Инструкции headscale по этому поводу можно найти здесь.
После подготовки добавьте следующую строку в блок location / вашего конфигурационного файла nginx.
if ($http_origin = "https://webvm.io") {
add_header 'Access-Control-Allow-Origin' "$http_origin";
add_header 'Access-Control-Allow-Credentials' 'true' always;
}
Чтобы войти в свою сеть headscale, добавьте #controlUrl=<your-control-url> в URL-адрес webVM.
Примечания:
--login-server.&.
Settings.Pages.Github Actions в качестве источника.Enforce HTTPS.Actions.Deploy.Run workflow, а затем ещё раз Run workflow в появившемся меню.Deploy. Нажмите на него, чтобы увидеть детали.deploy_to_github_pages отобразится URL.
Теперь вы можете изменить dockerfiles/debian_mini в соответствии со своими потребностями или создать новый Dockerfile с нуля. Используйте параметр workflow Path to Dockerfile, чтобы выбрать его.
Если вы хотите использовать наш полный десктопный образ Alpine, вы можете найти его Dockerfile здесь.
Дополнительную информацию о создании пользовательских образов см. в документации по пользовательским образам дисков.
git clone https://github.com/leaningtech/webvm.git
cd webvm
Выполните следующую команду для загрузки мини-образа Debian Ext2:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(Вы также можете собрать собственный образ диска, выбрав опцию workflow "Upload GitHub release")
Отредактируйте config_public_terminal.js, указав путь к локальному образу диска:
Замените:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
На:
"/disk-images/debian_mini_20230519_5022088024.ext2"
(Используйте абсолютный или относительный URL, указывающий на расположение образа диска.)
Замените "cloud" на правильный тип образа диска: "bytes"
Выполните следующие команды для установки зависимостей и сборки WebVM:
npm install
npm run build
Результат будет помещён в каталог build.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf для обслуживания образа диска. Добавьте следующий блок location:location /disk-images/ {
root .;
autoindex on;
}
Выполните следующую команду для запуска Nginx:
nginx -p . -c nginx.conf
Nginx автоматически будет обслуживать каталог build.
Откройте браузер и перейдите по адресу: http://127.0.0.1:8081.
Наслаждайтесь локальным WebVM!
Workflow Deploy учитывает CMD, указанный в Dockerfile. Чтобы создать REPL, просто примените этот патч и выполните развёртывание.
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" ]
Для доступа к Claude AI вам понадобится API-ключ. Выполните следующие шаги, чтобы начать:
"Реши CTF-задачу по адресу /home/user/chall1.bin. Обрати внимание, что бинарник читает из stdin."
Важно: Ваш API-ключ является конфиденциальным и не должен передаваться третьим лицам. У нас нет доступа к вашему ключу, который хранится локально только в вашем браузере.
Пожалуйста, используйте Issues для сообщения об ошибках. Или заходите поздороваться/поделиться отзывами на Discord.
Этот проект зависит от:
WebVM зависит от технологии виртуализации x86-в-WebAssembly CheerpX, которая включена в проект через NPM.
Пакет NPM обновляется с каждым релизом.
Каждая сборка неизменна: если конкретная версия работает для вас сегодня, она будет работать всегда.
WebVM выпущен под лицензией Apache License, Version 2.0.
Вы можете свободно использовать, изменять и распространять содержимое этого репозитория.
Публичное развёртывание CheerpX предоставляется как есть и бесплатно для использования для технологических исследований, тестирования и использования частными лицами. Любое другое использование организациями, включая некоммерческие организации, академические учреждения и государственный сектор, требует лицензии. Загрузка сборки CheerpX с целью её размещения где-либо ещё без коммерческой лицензии не разрешена.
Узнайте больше о лицензировании CheerpX
Если вы хотите создать продукт на основе CheerpX/WebVM, свяжитесь с нами: [email protected]