
آلة افتراضية للويب
يستضيف هذا المستودع الكود المصدري لـ https://webvm.io، وهي آلة افتراضية تعمل بنظام لينكس وتعمل في متصفحك.
جرب البيئة الرسومية الجديدة Alpine / Xorg / i3: https://webvm.io/alpine.html
WebVM هي بيئة افتراضية بدون خادم تعمل بالكامل من جانب العميل في HTML5/WebAssembly. وهي مصممة لتكون متوافقة مع واجهة لينكس الثنائية (ABI). تشغيل توزيعة دبيان غير معدلة بما في ذلك العديد من أدوات التطوير الأصلية.
WebVM مدعوم بمحرك CheerpX للظاهري، ويتيح تنفيذًا آمنًا ومعزولًا من جانب العميل لثنائيات x86 في أي متصفح. يتضمن CheerpX مترجم JIT من x86 إلى WebAssembly، ونظام ملفات افتراضي قائم على الكتل، ومحاكي استدعاءات نظام لينكس.
لا توفر المتصفحات الحديثة واجهات برمجة تطبيقات لاستخدام TCP أو UDP مباشرة. يوفر WebVM دعمًا للشبكات من خلال التكامل مع Tailscale، وهي شبكة VPN تدعم WebSockets كطبقة نقل.
أصبح WebVM الآن لديه إمكانية الوصول إلى الأجهزة في شبكة Tailscale المحلية الخاصة بك!
إذا كنت ترغب في الوصول إلى الإنترنت العام، ستحتاج إلى عقدة خروج. انظر عقد الخروج في Tailscale للحصول على تعليمات مفصلة. (اعتمادًا على سرعة شبكتك، قد تحتاج إلى الانتظار بضع لحظات حتى يتم تنزيل وحدة Tailscale Wasm.) بمجرد اكتمال الإعداد:
كبديل لتسجيل الدخول يدويًا، يمكنك إضافة مفتاح مصادقة Tailscale الخاص بك في نهاية عنوان URL لـ WebVM.
https://webvm.io/#authKey=<your-key>
يوصى باستخدام مفتاح مؤقت (ephemeral).
ندعم أيضًا headscale، وهو تطبيق مفتوح المصدر ذاتي الاستضافة لخادم التحكم في Tailscale.
على الرغم من أن headscale لا يدعم إضافة رؤوس CORS. ستحتاج إلى إعداد خادم وكيل (proxy) لإضافتها. يمكن العثور على تعليمات 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 في سطر الأوامر الخاص بـ Tailscale.& بينها.
إعدادات (Settings).الصفحات (Pages).إجراءات GitHub (GitHub Actions) كمصدر.
فرض HTTPS (Enforce HTTPS).الإجراءات (Actions).نشر (Deploy).تشغيل سير العمل (Run workflow) ثم مرة أخرى تشغيل سير العمل في القائمة.نشر (Deploy)، انقر عليه لرؤية التفاصيل.deploy_to_github_pages.
يمكنك الآن تخصيص dockerfiles/debian_mini لتناسب احتياجاتك، أو إنشاء ملف Dockerfile جديد من الصفر. استخدم معلمة سير العمل Path to Dockerfile لتحديده.
إذا كنت ترغب في استخدام صورة Alpine المكتبية الكاملة، يمكنك العثور على ملف Dockerfile الخاص بها هنا.
لمزيد من المعلومات حول إنشاء صور مخصصة، راجع وثائق الصور المخصصة.
git clone https://github.com/leaningtech/webvm.git
cd webvm
قم بتشغيل الأمر التالي لتنزيل صورة Ext2 لدبيان المصغرة:
wget "https://github.com/leaningtech/webvm/releases/download/ext2_image/debian_mini_20230519_5022088024.ext2"
(*يمكنك أيضًا بناء صورة القرص الخاصة بك عن طريق تحديد خيار سير العمل "Upload GitHub release" *)
قم بتحرير config_public_terminal.js ليشير إلى صورة القرص المحلية الخاصة بك:
استبدل:
"wss://disks.webvm.io/debian_large_20230522_5044875331.ext2"
بـ:
"disk-images/debian_mini_20230519_5022088024.ext2"
(استخدم مسارًا مطلقًا أو نسبيًا يشير إلى موقع صورة القرص.)
استبدل "cloud" بنوع صورة القرص الصحيح: "bytes"
قم بتشغيل الأوامر التالية لتثبيت التبعيات وبناء WebVM:
npm install
npm run build
سيتم وضع المخرجات في مجلد build.
mkdir disk-images
mv debian_mini_20230519_5022088024.ext2 disk-images/
nginx.conf الخاص بك لخدمة صورة القرص. أضف كتلة الموقع التالية:location /disk-images/ {
root .;
autoindex on;
}
قم بتشغيل الأمر التالي لتشغيل Nginx:
nginx -p . -c nginx.conf
سيقوم Nginx تلقائيًا بخدمة مجلد build.
افتح المتصفح واذهب إلى: http://127.0.0.1:8081.
استمتع بـ WebVM المحلي الخاص بك!
يأخذ سير عمل 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 على تقنية ظاهري CheerpX من x86 إلى WebAssembly، والتي يتم تضمينها في المشروع عبر NPM.
يتم تحديث حزمة NPM مع كل إصدار.
كل بناء غير قابل للتغيير، إذا كان إصدار معين يعمل بشكل جيد معك اليوم، فسيظل يعمل إلى الأبد.
يتم إصدار WebVM بموجب ترخيص Apache، الإصدار 2.0.
نرحب بك لاستخدام وتعديل وإعادة توزيع محتويات هذا المستودع.
يتم توفير نشر CheerpX العام كما هو ومجاني للاستخدام للاستكشاف التقني والاختبار والاستخدام من قبل الأفراد. أي استخدام آخر من قبل المنظمات، بما في ذلك المنظمات غير الربحية والأوساط الأكاديمية والقطاع العام، يتطلب ترخيصًا. لا يُسمح بتنزيل بناء CheerpX بغرض استضافته في مكان آخر دون ترخيص تجاري.
اقرأ المزيد عن ترخيص CheerpX
إذا كنت ترغب في بناء منتج فوق CheerpX/WebVM، يرجى التواصل: [email protected]