Distrobox
أدوات توزيعة أخرى على جهازك، تتشارك معك مجلد المنزل
يشغّل Distrobox الـ userspace لأي توزيعة Linux داخل container مدموج عمدًا بالنظام المضيف لا معزول عنه: مجلد المنزل نفسه، والأجهزة نفسها، والشاشة نفسها. هو الحل المعتاد على نظام immutable أو لابتوب عمل مقيّد. وهو صراحةً ليس sandbox، والمشروع نفسه يقول ذلك.
يناسبك إن كنت
- تشغّل نظامًا immutable أو atomic وتحتاج مكانًا قابلًا للتعديل للحزم العادية
- لابتوب عملك مقيّد وتريد بيئة تتحكم فيها دون طلب صلاحيات root
- تريد قاعدة مستقرة عمدًا مع سلسلة أدوات bleeding edge فوقها
انتبه إلى
- ليس sandbox ولا يحاول أن يكون، فهو الأداة الخاطئة لأي شيء لا تشغّله أصلًا باسمك
- مع docker كـ backend يعمل الـ container كـ root، والـ root داخله يمكنه تغيير أشياء خارجه
- تفعيل systemd داخل container يوقف تكامل العمليات مع المضيف الذي كان سبب استخدامه
- إعادة الكتابة بـ Go ما زالت release candidate بينما خط الـ shell هو الموصى به، وكلاهما مجمّد على إصلاحات الأخطاء
- تحتاج Nvidia إلى flag صريح أو toolkit مُعدّ بشكل منفصل، وعلى macOS يعمل من سطر الأوامر فقط
التثبيت
Prefer your distribution's package, otherwise the recommended line
curl -fsSL https://raw.githubusercontent.com/89luca89/distrobox/legacy/install | shالاندماج هو الهدف، والعزل هو ما يتخلى عنه
الـ container هنا ليس صندوقًا تضع فيه الأشياء. يركّب مجلد منزلك الحقيقي، ويصل إلى شاشتك وصوتك، ويرى أجهزتك، ويمكنه تشغيل أوامر على المضيف، والتطبيق المثبّت داخله يمكن تصديره ليظهر في القائمة العادية للمضيف. والنتيجة تشبه امتلاك مدير حزم لتوزيعة ثانية أكثر مما تشبه container.
التوثيق صريح على نحو غير معتاد في أن هذه مقايضة لا مكسب مجاني، إذ ينص على أن الـ sandboxing ليس هدفًا وأنه لا يجب أن تتوقع العزل الذي يمنحه container عادي أو Flatpak. خذ ذلك حرفيًا. أي شيء تتردد في تشغيله باسمك مكانه في موضع آخر، لأن هذا يملك مجلد منزلك كله.
هو في منتصف إعادة كتابة، والإصدار الذي يجب تشغيله هو القديم
ينتقل المشروع من تطبيقه الأصلي المكتوب بالـ shell إلى ملف تنفيذي واحد بلغة Go. خط Go ما زال release candidate، وخط الـ shell يبقى ما يوصي به سكربت التثبيت للإنتاج، وكلاهما مجمّد على إصلاحات الأخطاء حتى تبلغ إعادة الكتابة التكافؤ، دون موعد ملتزم به لذلك.
لا شيء من هذا يجعله رهانًا سيئًا، فهو موجود في المستودعات الافتراضية لمعظم التوزيعات الكبرى ومثبّت مسبقًا على عدة توزيعات immutable. لكنه يعني أن تثبّته من توزيعتك لا من سكربت وجدته، وأن تتوقع إعادة تصدير التطبيقات حين يصل الخط الجديد.