عزل بيئات التطوير باستخدام حاويات LXD

سأتحدث عن أسلوب تنظيم بيئات التطوير المحلية المعزولة على محطة العمل الخاصة بي. وقد تم تطوير هذا النهج تحت تأثير العوامل التالية:

  • تتطلب اللغات المختلفة بيئات تطوير متكاملة وسلاسل أدوات مختلفة؛
  • قد تستخدم المشاريع المختلفة إصدارات مختلفة من سلاسل الأدوات والمكتبات.

يتمثل الأسلوب في التطوير داخل حاويات LXD التي يتم تشغيلها محليًا على جهاز كمبيوتر محمول أو محطة عمل مع إعادة توجيه إخراج الرسومات إلى المضيف.

تكوين المثال أوبونتو 20.04.

وترد تأملات في الخيارات والأسباب في نهاية المقال.

1. تركيب LXD

В أوبونتو 20.04 لم يعد LXD متاحًا للتثبيت كحزمة deb، فقط عبر snap:

$ snap install lxd

بعد التثبيت تحتاج إلى إجراء التهيئة:

$ lxd init

المعلمة الوحيدة التي قمت بتغييرها هي storage bakend - أنا أستعمل dir كأبسط واحد. نظرًا لأنني لا أستخدم الصور والنسخ، فقد ظهرت التحذيرات توثيق إنهم لا يخيفونني:

وبالمثل، يجب اعتبار الواجهة الخلفية للدليل كخيار الملاذ الأخير.
إنه يدعم جميع ميزات LXD الرئيسية، ولكنه بطيء للغاية وغير فعال لأنه لا يمكنه الأداء
النسخ الفورية أو اللقطات وبالتالي يحتاج إلى نسخ مساحة تخزين المثيل بالكامل في كل مرة.

2. إعداد ملف تعريف LXD

الملفات الشخصية في LXD - هذه مجموعات من المعلمات المطبقة على عدة حاويات. بالنسبة لاحتياجاتي، الملف الشخصي الوحيد الذي تم إنشاؤه افتراضيًا يكفي بالنسبة لي default مع التغييرات التالية:

  • $ lxc profile device add default X0 disk source=/tmp/.X11-unix/X0 path=/tmp/.X11-unix/X0 - حتى تتمكن التطبيقات الموجودة في الحاويات من التفاعل مع خادم X11 المضيف؛
  • $ lxc profile set default environment.DISPLAY :0 - بحيث يكون المتغير البيئي DISPLAY تم تركيبه بشكل صحيح في الحاويات؛
  • $ lxc profile set default raw.idmap "both 1000 1000" - للصحيح رسم الخرائط معرف.

3. إنشاء وإعداد الحاوية

إنشاء حاوية بناءً على صورة images:ubuntu/20.04:

$ lxc launch images:ubuntu/20.04 dev1

أفضّل الصور من المستودع https://images.linuxcontainers.org، نظرًا لأن لديهم عددًا أقل من البرامج المثبتة مسبقًا. ولهذا السبب أضفت البادئة images: إلى اسم الصورة. يمكن إنشاء حاوية بناءً على صورة من مستودع Ubuntu كما يلي: $ lxc launch ubuntu/20.04 dev1.

الوصول إلى الغلاف الجذري للحاوية:

$ lxc exec dev1 -- bash

سأقوم بتثبيت Firefox وVS Code (من المستودع وفقا للتعليمات):

$ apt update
$ apt install curl gpg firefox

$ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg
$ install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/
$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list

$ apt update
$ apt install code

سأقوم بتضمين حاوية للوضوح.

poweroff

مكافأة! من السهل جدًا وضع وحدة معالجة الرسومات (GPU) في حاوية حتى تتمكن التطبيقات التي تعمل فيها من استخدام بطاقة الرسومات. للقيام بذلك تحتاج:

  • اضف جهاز $ lxc config device add dev1 mygpu gpu;
  • قم بتثبيت برامج تشغيل بطاقة الفيديو في الحاوية - نفس البرامج المثبتة على المضيف.

4. استخدام الحاوية

إذا لم تكن الحاوية قيد التشغيل بعد، فأنت بحاجة إلى تشغيلها:

lxc start dev1

تشغيل VS Code كمستخدم غير جذر أوبونتو:

lxc exec dev1 -- sudo --login --user ubuntu code

إطلاق فايرفوكس:

lxc exec dev1 -- sudo --login --user ubuntu firefox

سيتم عرض نوافذ التطبيقات على المضيف، ولكن سيتم تنفيذها داخل الحاوية - على غرار إعادة توجيه الرسومات باستخدام ssh.

لا أقوم بإيقاف تشغيل الحاويات قيد التشغيل يدويًا، لأنني لا أرى فائدة كبيرة في ذلك - فأنا أقتصر على إغلاق نوافذ التطبيقات قيد التشغيل.

5. الخلاصة

أفضل عدم استخدام نظام تشغيل مضيف للتطوير، لأن ذلك يتطلب تثبيت أدوات التطوير، وتصحيح أخطاء إصدارات المكتبات، وتكوين مكونات النظام بطريقة معينة، وغيرها من المعالجات. كل هذا يمكن أن يؤدي إلى سلوك غير متوقع في برامج أخرى غير قابلة للتطوير، أو حتى في نظام التشغيل بأكمله. على سبيل المثال، يمكن أن تؤدي التغييرات في تكوين OpenSSL إلى توقف نظام التشغيل عن التشغيل بشكل صحيح.

لقد جربت أدوات مختلفة لعزل بيئات التطوير:

  • تعد الأجهزة الافتراضية (KVM، VirtualBox، وما إلى ذلك) الخيار الأكثر وضوحًا، ولكنها تستهلك موارد أكثر بكثير، على الرغم من عدم وجود خيارات أخرى للتطوير في نظام Windows (إذا كان المضيف هو Linux)؛
  • أدوات تطوير السحابة التي تعمل على جهاز محلي (Cloud9 في حاوية أو جهاز افتراضي، Eclipse Che، وما إلى ذلك) - لم يتم تطويرها لهذا الوضع من التشغيل، فهي تتطلب تكوينًا وصيانة إضافية، ومن الأفضل استخدامها للغرض المقصود منها الغرض - في السحابة.
  • حاويات Docker - مرة أخرى، مخصصة لشيء آخر، في رأيي، فهي ليست مريحة للغاية للنماذج الأولية السريعة باستخدام البرامج التي لم يتم تعبئتها بعد في حاويات منفصلة.

إن النهج المختار يثير إعجابي ببساطته وانخفاض حاجز الدخول. في الحاويات نفسها، يمكنك استخدام الأساليب الخاصة بالمشروع: تثبيت كل شيء وتكوينه يدويًا، أو استخدام الأتمتة (Puppet، Ansible، وما إلى ذلك)، وحتى النشر البنية التحتية القائمة على عامل ميناء. أستخدم أيضًا حاويات LXD لتشغيل برامج معينة تتطلب تثبيت عدد كبير من التبعيات أو إصدار نظام تشغيل مختلف - في هذه الحالة يمكنك إنشاء حاوية بإصدار نظام التشغيل المطلوب، على سبيل المثال $ lxc launch images:ubuntu/16.04 dev16.

من المهم أن نتذكر أنه فيما يتعلق بالعزلة، تتمتع الحاويات بسطح هجوم أكبر مقارنةً بالمحاكاة الافتراضية - حيث يشترك المضيف والحاوية في نواة واحدة، وهي ثغرة يمكن أن تسمح للبرامج الضارة بالهروب من الحاوية. عند تجربة البرامج المشكوك فيها، من الأفضل استخدام آليات عزل أكثر ملاءمة.

وصلات مفيدة

المصدر: www.habr.com

إضافة تعليق