كيف أقوم بربط دليل مشروع Vagrant بجهاز VirtualBox VM الموجود؟

StackOverflow https://stackoverflow.com/questions/9434313

  •  12-11-2019
  •  | 
  •  

سؤال

بطريقة ما، قام مشروع Vagrant الخاص بي بفصل نفسه عن VirtualBox VM الخاص به، لذلك عندما أقوم بذلك vagrant up سيقوم Vagrant باستيراد الصندوق الأساسي وإنشاء جهاز افتراضي جديد.

هل هناك طريقة لإعادة ربط مشروع Vagrant بالجهاز الظاهري الحالي؟كيف يقوم Vagrant بربط Vagrantfile داخليًا بدليل VirtualBox VM؟

هل كانت مفيدة؟

المحلول

تحذير: الحل أدناه يعمل مع Vagrant 1.0.x ولكن لا المتشرد 1.1+.

يستخدم Vagrant الملف ".vagrant" الموجود في نفس الدليل مثل "Vagrantfile" الخاص بك لتتبع UUID لجهاز VM الخاص بك.لن يكون هذا الملف موجودًا في حالة عدم وجود VM.تنسيق الملف هو JSON.يبدو الأمر هكذا في حالة وجود جهاز افتراضي واحد:

{
   "active":{
      "default":"02f8b71c-75c6-4f33-a161-0f46a0665ab6"
   }
}

default هو اسم الجهاز الظاهري الافتراضي (إذا كنت لا تستخدم إعدادات أجهزة افتراضية متعددة).

إذا تم فصل جهاز VM الخاص بك بطريقة أو بأخرى، فما يمكنك فعله هو القيام به VBoxManage list vms والتي ستدرج كل جهاز افتراضي يعرفه VirtualBox باسمه وUUID.ثم قم بإنشاء ملف يدويًا .vagrant الملف في نفس الدليل الخاص بك Vagrantfile وملء المحتويات بشكل صحيح.

يجري vagrant status للتأكد من أن Vagrant قد التقط التغييرات المناسبة.

ملحوظة: هذا غير مدعوم رسميًا من قبل Vagrant وقد يغير Vagrant تنسيقه .vagrant في أي وقت.ولكن هذا صالح اعتبارًا من Vagrant 0.9.7 وسيكون صالحًا لـ Vagrant 1.0.

نصائح أخرى

بالنسبة المتشرد 1.6.3 القيام بما يلي:

1) في الدليل حيث Vagrantfile يقع ، قم بتشغيل الأمر

VBoxManage list vms

سيكون لديك شيء من هذا القبيل:

"virtualMachine" {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

2) الذهاب إلى المسار التالي:

cd .vagrant/machines/default/virtualbox

3) إنشاء ملف يسمى معرف مع معرف الجهاز الظاهري الخاص بك xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

4) حفظ الملف ثم تشغيل المتشرد حتى

الحل مع الإصدار العلوي هو نفسه تمامًا.

لكن عليك أولاً تشغيل ملف .vbox يدويًا حتى يظهر فيه VBoxManage list vms

ثم يمكنك التحقق من .vagrant/machines/default/virtualbox/id للتأكد من أن uuid هو الصحيح.

كان القضية اليوم، يا .vagrant المجلد مفقود ووجدت أن هناك بضع خطوات أكثر من مجرد تعيين المعرف:

  1. تعيين المعرف:

    VBoxManage list vms
    

    ابحث عن المعرف وقم بالدخول {project-folder}/.vagrant/machines/default/virtualbox/id.

    لاحظ أن default قد تكون مختلفة إذا تم تعيينها في الخاص بك Vagrantfile على سبيل المثال config.vm.define "someothername".

  2. إيقاف الجهاز عن التزويد:

    قم بإنشاء ملف باسم action_provision في نفس دير مثل id الملف، اضبط محتوياته على: 1.5:{id} استبدال {id} بالمعرف الموجود في الخطوة 1.

  3. إعداد مفتاح عام/خاص جديد:

    يستخدم Vagrant مفتاحًا خاصًا مخزّنًا فيه .vagrant/machines/default/virtualbox/private_key لSSH في الجهاز.ستحتاج إلى إنشاء واحدة جديدة.

    ssh-keygen -t rsa
    

    أطلق عليه اسما private_key.

    vagrant ssh ثم انسخ ملف private_key.pub داخل /home/vagrant/.ssh/authorized_keys.

تحديث مع نفس المشكلة اليوم مع Vagrant 1.7.4:

  • موضوع مفيد في https://github.com/mitchellh/vagrant/1755 وخاصة الأوامر التالية:

    على سبيل المثال، إلى مربع الإقران "VIP-QuickStart_Default_1431365185830_12124" إلى Vagrant. giveacodicetagpre.

للكمات متعددة VM، سيبدو هكذا: giveacodicetagpre.

يمكنك الحصول على أسماء VM من vagrantfile المستخدمة لإنشاء تلك VMS.ابحث عن هذا الخط: giveacodicetagpre.

"الويب" هو اسم VM في هذه الحالة.

أنا استخدم المتشرد 1.8.1 على أو إس إكس إل كابيتان

لم يتم إغلاق الجهاز الافتراضي الخاص بي بشكل صحيح عند إعادة تشغيل جهاز الكمبيوتر الخاص بي، لذلك عندما حاولت ذلك vagrant up كان يقوم دائمًا بإنشاء جهاز افتراضي جديد.لا توجد حلول هنا عملت بالنسبة لي.ولكن ما نجح كان الاختلاف إجابة إنجموريلو

لذلك بدلا من خلق .vagrant/machines/default/virtualbox/id بناءً على معرف التشغيل VBoxManage list vms.اضطررت إلى تحديث المعرف في .vagrant/machines/local/virtual_box/id

لدي بطانة واحدة تقوم بهذا بشكل أساسي بالنسبة لي:

echo -n `VBoxManage list vms | head -n 1 | awk '{print substr($2, 2, length($2)-2)}'` > .vagrant/machines/local/virtualbox/id

يفترض هذا أن المربع الأول هو الذي أحتاجه للبدء في التشغيل VBoxManage list vms

في Vagrant 1.9.1:

كان لدي VM في المربع الظاهري باسم "Ubuntu 16.04.1" لذلك تعبئتها كمربع متشرد مع: giveacodicetagpre.

يستجيب مع ... giveacodicetagpre.

يتم تعديل هذا من إجابة @ Petecoop.

يجري vagrant halt إذا لم تقم بإغلاق الصندوق بعد.

ثم قم بإدراج الصناديق الافتراضية الخاصة بك: VBoxManage list vms

سوف يسرد جميع الصناديق الافتراضية الخاصة بك.حدد المربع الذي تريد الرجوع إليه واحصل على المعرف الموجود بين الأقواس المتعرجة: {}.

ثم قم بتحرير ملف معرف المشروع: sudo nano .vagrant/machines/default/virtualbox/id (من دليل المشروع)

استبدله بالمعرف الذي نسخته من قائمة VBs.

يحاول vagrant reload.

إذا لم ينجح ذلك وتم تعليقه على ترخيص SSH (حيث تعثرت)، انسخ المفتاح العام غير الآمن من ملف بوابة متشرد.استبدال محتوى /.vagrant/machines/default/virtualbox/private_key.النسخ الاحتياطي الأصلي بالطبع: cp private_key private_key-bak.

ثم اركض vagrant reload.سيقول أنه تم تحديد المفتاح غير الآمن وإنشاء مفتاح جديد.

default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!

يجب انك انتهيت.

أنا على macos ووجدت أن إزالة .Llocks في المربعات حل مشكلتي.

لسبب ما giveacodicetagpre.

لم يزيل هذه الأقفال، وبعد استعادة جميع الإعدادات الخاصة بي في .vagrant / machine / default / virtualbox باستخدام timemachine، إزالة الأقفال، الجهاز الأيمن تمهيد.

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

أنا أقوم بتشغيل المتشرد 1.7.4 و VirtualBox 5.0.2

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top