فاگرانت+فيرتال باكس على ماكو سيتالينا: لكنه يعمل على جهازي!

ما هو فاگرانت؟

أطلقت في البداية في مارس 2010 من قبل ميتشيل هاشيكورت من Hashicorp وشريكه في الجريمة جون بيندر، فاگرانت هو أداة سطر الأوامر مفتوحة المصدر لإدارة دورة الحياة للآلات الافتراضية (VM). تهدف الأداة إلى زيادة كفاءة التطوير من خلال تسهيل هذه العملية بكثير. بينما كان فاگرانت في الأصل مرتبطًا بـ Oracle VirtualBox، منذ الإصدار 1.1، أضاف أيضًا الدعم لـ VMware وKVM وغيرها. ومع ذلك، بقدر ما هو مفيد في تطوير الويب، فإن استخدام فاگرانت ليس دائمًا خيار لا ينقضى.

لماذا نستخدم فاگرانت؟ هل هو يستحق ذلك؟

أولاً وقبل كل شيء، يوفر فاگرانت مرونة أكبر مع بيئة قائمة على المُدخل غير القابلة للتغيير. هذا يسمح للمطورين ببناء بيئات تتطلب ميزات فقط متاحة على أنظمة أخرى.

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

تثبيت فاگرانت على الجهاز المكتبي

للبدء مع فاغرانت، قم بتنزيل الحزمة المثبتة أو الحزمة المناسبة من صفحة تنزيلات Vagrant الرسمية. التعليمات التالية تخص فاغرانت v2.3.3 (أحدث إصدار بحلول ديسمبر 2022).

تثبيت فاغرانت على ويندوز

من أجل تثبيت فاغرانت على ويندوز، تحتاج أولاً لتنزيل حزمة MSI. بعد ذلك، يمكنك ببساطة تشغيل الملف ومرورك بعملية تثبيت عادية.

ملاحظة: سيضيف الحزمة المثبتة تلقائيًا “فاغرانت” إلى مسار النظام الخاص بك، لذا سيكون متاحًا أيضًا في المحطات. إذا لم يتم العثور على فاغرانت، جرب تسجيل الخروج وإعادة الدخول إلى النظام، حيث إن هذا حدث شائع على ويندوز.

تثبيت فاغرانت على MacOS Catalina

على افتراض أن لديك بالفعل مدير حزمة “برو”، لتكون مجهزًا بسرعة بفاغرانت على ماك، يمكنك تشغيل التثبيت بهذا الأمر الواحد:

 

```bash
$> brew install vagrant
```

بديلًا، يمكنك تثبيت فاغرانت من الملفات المبرمجة.

تثبيت فاغرانت على لينكس

بالنسبة لأنظمة لينكس، سنوضح عملية التثبيت لـ فاغرانت على أوبونتو 20.04:

تثبيت المفتاح:

 

```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```

إضافة المستودع:

 

```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```

سحب التحديثات وتشغيل التثبيت:

 

```bash
$> sudo apt update && sudo apt install vagrant
```

هذا كل ما في الأمر! الآن كل ما عليك فعله هو فتح المحطة الخاصة بك وكتابة “فاجرانت”. لكن من الجدير بالذكر، إذا قمت بتشغيل Vagrant وحدها، ستتلقى قائمة بالأوامر الفرعية المتاحة.

المشاكل الرئيسية التي قد تواجهها أثناء تثبيت Vagrant

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

الآتي هي حلول سريعة من الوثائق الرسمية لـ Vagrant التي يمكن أن تساعدك في استخدام Vagrant وVirtualBox عند وجود نظام تخطيط موارد افتراضي آخر:

على نظام التشغيل Linux

عند استخدام نظام تخطيط موارد افتراضي آخر، قد تواجه الخطأ التالي:

 

```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", <ID of the VM>, "--type", "headless"]

Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```

من أجل جعل برنامج VirtualBox يعمل بشكل صحيح، ستحتاج إلى إضافة النظام الفاشل الآخر إلى قائمة الحظر في جهاز الكمبيوتر الخاص بك.

للقيام بذلك، اكتشف أولاً ما هو اسم النظام الفاشل:

 

```bash
$> lsmod | grep kvm
kvm_intel             204800  6
kvm                   593920  1 kvm_intel
irqbypass              16384  1 kvm
```

بعد ذلك، استخدم فقط أمر “الحظر” لإضافة النظام الفاشل إلى قائمة الحظر الخاصة بك.

 

```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```

أخيرًا، أعد تشغيل جهاز الكمبيوتر الخاص بك واستخدم الأمر “فاجرانت” مرة أخرى.

على نظام التشغيل Windows

على Windows، إذا كنت تحاول بدء جهاز حاسوب مستند إلى VirtualBox VM، قد تواجه شاشة زرقاء مخيفة.

لاستخدام VirtualBox بشكل طبيعي، يجب أن تتأكد من تعطيل Hyper-V. استخدم الأمر البسيط التالي لإيقاف تشغيل الميزة على Windows 10:

 

```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```

على Windows 11، يمكنك أيضًا استخدام Powershell مرفوع الأمان:

 

```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```

بدلاً من ذلك، يمكنك تعطيل Hyper-V من إعدادات نظام Windows.

  • انقر بزر الماوس الأيمن على زر Windows واختر “التطبيقات والميزات”
  • افتح “تشغيل أو إيقاف تشغيل ميزات Windows”
  • قم بإلغاء تحديد Hyper-V وأخيراً انقر على “موافق”

أعد تشغيل جهاز الكمبيوتر لتطبيق هذه التغييرات.

على MacOS

إذا واجهت رسالة خطأ عند محاولة تنفيذ VBoxManage:

فشل في فتح /dev/vboxnetctl: لا يوجد مثل هذا الملف أو الدليل

إما إعادة تثبيت Virtualbox بالكامل أو ببساطة استخدم الأوامر التالية:

 
sudo /Library/StartupItems/VirtualBox/VirtualBox restart

أو

 
sudo /Library/StartupItems/VirtualBox/VirtualBox start

لاحظ أنه في الإصدارات الأحدث، لا يوجد ملف /Library/StartupItems/VirtualBox/VirtualBox، لذا ستحتاج إلى استخدام الأمر التالي: 

 
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl

MacOS Catalina: لكنه يعمل على جهازي

قد يحدث قضية أخرى على جهاز Mac هي تلك المشكلة الكلاسيكية عندما تسمع عن تطبيق “يعمل بشكل جيد على جهازي”، ولا مجال للتوسل أو البكاء لجعله يفعل الشيء نفسه في أي مكان آخر. لقد واجه فريقي من SPG هذه المشكلة من قبل.

تخيل أنك تقوم حاليًا بنشر واختبار البيئات المحلية باستخدام Vagrant + VirtualBox. أحد مهندسي البرمجة في فريقك يستخدم نسخة خاصة من VagrantBox، والتي حتى الآن تعمل بشكل جيد بالنسبة لهم. سيُعرفون بـ المطور 1. على جهاز العمل الخاص بهم، تعمل VirtualBox v6.1.34، Vagrant 2.2، و Ubuntu بدون مشكلة.

من ناحية أخرى، من الواضح أن المطور 2 بحاجة لترقية بيئته المحلية. يستخدم حاليًا مزيجًا من MacOS، VirtualBox v6.1.24، و Vagrant 2.1.x على جهاز العمل الخاص بهم.

نتيجة لذلك، على الأقل في الوهلة الأولى، يبدو استراتيجية المطور 2 بسيطة:  

  • الخطوة 1: قم بتحديث إصدارات VirtualBox و Vagrant (من الضروري استخدام إصدارات موحدة)   
  • الخطوة 2: تثبيت جميع مكونات المشروع الإضافية

تم إكمال كلتا العمليتين بنجاح، لكن النتيجة كانت غير متوقعة بالتأكيد – لسبب ما، لا يمكن الوصول إلى الموقع الذي تم تثبيته على VirtualBox الآن. ما الذي حدث؟

عندما تواجه مثل هذا اللغز، من الحيثيات أن تفكر في حل وتتخذ إجراءات معقولة مثل تلك المدرجة أدناه: 

  • فحص ملفات السجل    
  • تأكد من أن جميع خدمات VirtualBox، مثل PHP، Nginx و MySQL، تعمل    
  • استخدم curl للوصول إلى الصفحة

في هذه الحالة، لكن، يبدو أن كل شيء يعمل كما ينبغي، دون أي مشاكل واضحة داخل مثيل VirtualBox نفسه.

فريقك يقرر بعد ذلك تغيير الاتجاه وتحديد ما إذا كان مستضيف VirtualBox يمكن الوصول إليه من الخارج. بعد استخدام أمر ping بسيط، لم يكونوا مستعدين لاكتشاف أن 100٪ من الباكتات فقدت. على الرغم من أن هذا الخبر مخيف إلى حد ما، قد يكون أيضاً سبب المشكلة كلها.

بعد تتبع هذا المسار، اكتشفوا أخيراً أن أدوات HostOnly تحتاج الآن إلى تعيين نطاقات مختلفة من عناوين IP. يبدو أن هذا بدأ مع تحديث VirtualBox v6.1.30 (تحديث الشعيرات، من بين أمور أخرى):

 

192.168.55.х prior to the update

192.168.56.х. after the update.

هناك، واضح كالنهار، في دليل مستخدم VirtualBox المُلصق مؤخراً:الدليل المستخدم

على Linux، Mac OS X، وSolaris، سيسمح Oracle VM VirtualBox فقط بتعيين عناوين IP في نطاق 192.168.56.0/21 لأدوات host-only.”

يلهث الجميع في فريقك نفساً مشتركة. اختفت المشكلة بشكل مفاجئ بعد إنشاء جهاز HostOnly جديد وتغيير الجهاز في مثيل VirtualBox. أصبح المكون الويب الحرج في الحل أخيراً قابل للوصول، ويكون مطور 2 سعيدًا أخيرًا.

Vagrant أم… ما هي البدائل الأخرى؟ كيف هي أفضل؟

بكثير من الحماسة، يمكن أن يُسامحك إذا كنت تبحث عن بدائل Vagrant. إذا قمت بذلك، من المحتمل أن تصادف العديد من المواقع التي تقارن هذه الأداة مع الحاويات (في كثير من الأحيان، Docker). لكن هل هذا مقارنة صحيحة بالفعل؟ كما يتضح، هي كذلك، طالما أنك على علم بالفرق بين الاثنين.

العديد من مزايا Docker على الواجهات الخادم يمكن أيضًا اعتبارها عيوب – فقط يعتمد ذلك على ما تحتاجه. لذا، لنبدأ بأحد الأمور الكبيرة: وقت التشغيل. بينما يمكن للحاويات البدء بسرور لأنها في الأساس مجرد مجموعة من العمليات، هذا يعني أيضًا أنها تستخدم جدارة النظام الضرورية. نتيجة لذلك، بدلاً من الاعتماد على الأجهزة الافتراضية، تستخدم الحاويات الأجهزة الرئيسية مباشرة.

يمكن للواجهات الخادم أيضًا أن تمتلك موارد مخصصة من حيث الذاكرة، ووقت المعالجة، ومساحة القرص، وغيرها. من ناحية أخرى، تتشارك الحاويات الموارد مع العمليات الأخرى على جهاز المستخدم الرئيسي. وبالمثل، بينما يتيح لك Vagrant إنشاء جهاز ظاهري بأكمله – والذي سيتطلب وقتًا أطول ومواردًا أكثر – نهج Docker المكتنز بالحاويات يسمح لك بالنشر بشكل أسرع مع موارد أقل.

لذا، بناءً على ذلك، تذكر أن هذه ليست منافسة. إنها ببساطة تتعلق باحتياجات شركتك.

الخاتمة

بينما لا يُمكن إنكار أن Vagrant أداة قوية بلا شك، إلا أنها ليست محصنة ضد المشاكل. إذا كانت شركتك تفتقر إلى الخبرة أو المعرفة، قد يكون لدى فريق من المطورين البرمجيات المخصص يساعدك. على كل حال، حتى عندما يكون الأمر مجرد “يعمل على جهازي”، يوجد حل لكل مشكلة.

Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o