نظام لينكس الفرعي للينكس
أعلم غرابة العنوان، وهذا آخر ما كنت أتمناه لتدوينتي الأولى فعليا!!
قبل أن تبدأ ستستفيد من هذه التدوينة في حال كنت من مستخدمي أنظمة جنو/لينكس ومستخدم لسطر الأوامر.
ماهو Distrobox
يمكن تعريف windows subsystem for linux (WSL) على أنه طبقة توافقية تسمح بتشغيل برامج أنظمة جنو/لينكس على نظام ويندوز. وفي المقابل نحتاج مشروع مشابه للينكس، ليس لتشغيل برامج ويندوز على لينكس، ولكن لتشغيل برامج لينكس من توزيعة على توزيعة أخرى، أو إنشاء نظام لينكس معزول داخل نظامك واستخدامه دون التأثير على النظام الأساسي من خلال مشروع distrobox.
أهم ميزة أتى بها distrobox هي التوافقية بين النظام الضيف والنظام المضيف، فمجلد HOME المستتخدم مشترك بين النظامين، وكذلك يمكن من خلاله تثبيت وتشغيل برامج الواجهات الرسومية، بل واستخدامها من النظام الأساسي مباشرة.
التثبيت
يجب أن تمتلك
dockerأوpodmanقبل أن تبدأ.
sudo apt install distrobox
# أو
sudo dnf install distroboxإضافة أنظمة جديدة
distrobox create --name system-name --image container:tag
# أو
distrobox create --name system-name --image container:tag --home /path/to/directoryيستخدم distrobox حاويات دوكر، وعليه يمكنك اختيار نظام التشغيل الذي تريده من dockerhub، أو عرض الأنظمة المتوافقة من خلال distrobox create -C وسيسرد قائمة بجميع الأنظمة الممكن تثبيتها.

على سبيل المثال الأمر التالي لتحميل النسخة المتدحرجة من debian
distrobox create --name debianbox-testing --image debian:testingوأخيرا يمكن سرد الأنظمة الموجودة من خلال الأمر التالي:
distrobox listشخصيا أفضل تثبيت كل نظام مع مجلد home مستقل حتى لا تختلط أي من ملفات النظامين (يظل بالإمكان الوصول لنظام الملفات الأساسي)، لذلك بداية انشئ المجلد التالي:
mkdir -p ~/.var/boxالآن سنثبت النسخة السابقة من ديبيان بالأمر:
distrobox create --name developer --image debian:testing --home ~/.var/box/devسيُنشئ المجلد dev ليحتوي ملفات home للنظام الجديد.
التعامل مع الأنظمة
للتبديل إلى طرفية النظام الجديد:
distrobox enter debianbox-testingعلى سبيل المثال هنا ثبت rstudio بداخل النظام الضيف:
sudo apt install r-base
sudo apt install ./rstudio-2022.02.2-485-amd64.deb
rstudio
لتنفيذ أمر في النظام الضيف دون الدخول إليه:
distrobox enter debianbox-testing -- htopولتنفيذ أمر من النظام الأساسي في النظام الضيف:
// من حاوية debian:testing
distrobox-host-exec flatpak run org.mozilla.firefoxوأكثر من ذلك يمكن ربط هذه الأوامر بشكل دائم، المثال التالي لتوصيل podman في النظام الأساسي إلى الضيف:
# إضافة podman إلى النظام الضيف
sudo ln -s /usr/bin/distrobox-host-exec /usr/local/bin/podman
# إضافة distrobox نفسه في النظام الأساسي إلى النظام الضيف
sudo ln -s /usr/bin/distrobox-host-exec /usr/local/bin/distroboxإيقاف وحذف النظام الضيف
ﻹيقاف النظام الضيف أو حذفه:
distrobox stop debianbox-testing
distro rm debianbox-testingاستنساخ النظام الضيف
يمكن استنساخ نظام من آخر بالصيغة الآتية:
distrobox create --name debianclone --clone debianbox-testingتصدير برمجيات الضيف للمضيف
أكثر جزء ممتع في الموضوع بالكامل هو إمكانية استخدام برمجيات الضيف من داخل المضيف، لكن قبل الدخول في التفاصيل يجب أن تدرك وجود ثلاثة أنواع للبرامج:
- تطبيقات الواجهات الرسومية
- خدمات تعمل في الخلفية استجابة لحدث معين، كـ
apacheوnginx - أدوات سطر الأوامر، كـ
ffmpegوimagemagic
يمكن تصدير البرامج والخدمات بالطريقة التالية:
distrobox-export --app rstudio
distrobox-export --service nginx
distrobox-export --bin /usr/bin/ffmpeg --export-path ~/.local/binستجد بعدها البرامج في نظامك بمجرد البحث عنها

لاحظ أن تصدير أدوات سطر الأوامر يحتاج لتحديد أحد مجلدات النظام لتصدير الأمر إليه.
تمرير معاملات إضافية
قد ترغب بتشغيل البرنامج بخيارات محددة، مثلا البرامج المبنية باستخدام الكترون كـ atom و vs-code قد تحتاج لتمرير المعامل --foreground. لتمرير معاملات إضافية إلى الأمر استخدم --extra-flags
distrobox-export --app atom --extra-flags "--foreground"
distrobox-export --bin /usr/bin/snort --export-path ~/.local/bin --extra-flags "-A console"تشغيل البرامج المصدرة بصلاحيات الروت
يمكن تنفيذ هذا بإضافة --sudo نهاية أمر التصدير فقط
distrobox-export ... --sudoالغاء البرامج المصدرة
في حال قررت عدم حاجتك لبرنامج في النظام الضيف، ورغبت بإزالة الربط يمكن استخدام --delete
distrobox-export ... --deleteاستخدامات متقدمة
كل ما سبق أكثر من كافي للعمل مع جهازك، توجد بعض القيود على الأنظمة المنشئة بـ distrobox عكس الأنظمة المنشئة باستخدام المحاكيات كـ virtualbox سأتحدث عن هذه القيود وطرق معالجتها.
الوصول لأقراص النظام
رغم الشفافية الكبيرة بين النظام الضيف والمضيف في distrobox سهولة التواصل بين الاثنين، إلا أن النظام الضيف قادر فقط على الوصول إلى ملفات home للنظام المضيف فقط، ولتوصيل بقية الأقراص بعد معرفة مساراتها (يمكن الاطلاع على مسار القرص بالأمر lsblk أو من خلال مدير الأقراص).
# عرض الأقراص
lsblk
# توصيل قرص
distrobox create --name wine --image ubuntu:bionic --home ~/.var/box/wine --volume /mnt/0e2ec13d-dd7c-4501-916f-ab6711c4648dالحصول على صلاحيات الجذر
المستخدم root في النظام الضيف ليس هو نفسه root المضيف، ولكنه يملك صلاحيات مشابهة، لإنشاء حاوية بصلاحيات root للمضيف:
# إنشاء النظام
distrobox create --name sys --image alpine --root
# الدخول عليه
distrobox enter sys --rootإضافة init system للنظام
بعض البرمجيات تحتاج لـ init system (البرمجية المسؤولة عن تشغيل الخدمات والعلميات عند إقلاع النظام وإدارتها)، مثل mysq والذي يظهر رسالة خطأ متعلقة بـ systemd عند تثبيته.
لاحظ إن بعض حاويات الأنظمة تدعم بشكل افتراضي مثل المسرودة أدناه، وغيرها تحتاج لتثبيت systemd، لذلك فتفعيل init system للنظام يعتمد على الحاوية.
- docker.io/almalinux/8-init
- registry.access.redhat.com/ubi7/ubi-init
- registry.access.redhat.com/ubi8/ubi-init
- registry.access.redhat.com/ubi9/ubi-init
- registry.opensuse.org/opensuse/leap:latest
- registry.opensuse.org/opensuse/tumbleweed:latest
# للحاويات المدعومة افتراضيا
distrobox create --name test --image docker.io/almalinux/8-init --init
# للحاويات التي لا تدعم
distrobox create --name test --image debian:unstable --init --additional-packages "systemd"حفظ الأنظمة وتحميلها من ملف
قد ترغب في نقل أنظمتك إلى صديق، أو حتى حفظ نسخة احتياطية، لا يوفر distrobox دعم مباشر لكن يمكن تنفيذها من خلال podman
# بناء صور من الأنظمة، يٌنفذ لكل نظام على حدة
podman container commit -p your_first_distrobox_name first_copy_name
podman container commit -p your_second_distrobox_name second_copy_name
# حفظ صورة مبنية أو أكثر إلى ملق
podman save first_copy_name:latest second_copy_name:latest other_copies:latest -o filename.tarبعد حفظ الصور الى الملف المختار قم بنقله للجهاز الجديد، استورده للنظام ثم انشئ أنظمة distrobox من الصور المستوردة
# استيراد الصور المحفوظة في الملف إلى podman
podman load < filename.tar
# اطلع الان على الصور المبنية
podman images
# localhost/first_copy_name:latest
# localhost/second_copy_name:latest
# انشئ أنظمتك من الصور السابقة
distrobox create --name new_system_name --image first_copy_name:latest --home /path/to/image/homeمواضيع إضافية
- إذا كنت مطور وأردت ربط vscode من فلاتباك بنظام على
distroboxفراجع هذا الدليل. - وهذا لتثبيت سطح مكتب كامل على النظام الضيف.
- أخيرا لتشغيل أنظمة وهمية بداخل حاويات
distroboxفاتبع هذا الدليل.
خاتمة
أخيرا وجود distrobox مهم كأداة للمطورين أسهل من استخدام podman أو docker مباشرة.
وكذلك للمستخدمين العاديين حيث لم تصل البرامج المحزمة بـ flatpak إلى مرحلة النضج الكامل.