मैं एक मौजूदा वर्चुअलबॉक्स वीएम के साथ वैग्रांट प्रोजेक्ट डायरेक्टरी को कैसे जोड़ूँ?


132

किसी तरह मेरे वैगरंट प्रोजेक्ट ने अपने वर्चुअलबॉक्स वीएम से खुद को अलग कर लिया है, ताकि जब मैं vagrant upवैग्रैंट बेस-बॉक्स आयात करूं और एक नई वर्चुअल मशीन बनाऊं।

क्या मौजूदा वीएम के साथ वैग्रांत परियोजना को फिर से जोड़ने का कोई तरीका है? Vagrant आंतरिक रूप से एक Vagrantfile को VirtualBox VM निर्देशिका के साथ कैसे जोड़ता है?

जवाबों:


89

चेतावनी: नीचे दिया गया समाधान वैग्रांट 1.0.x के लिए काम करता है, लेकिन वैग्रैंट 1.1+ के लिए नहीं

Vagrant आपके VM के UUID को ट्रैक करने के लिए "Vagrantfile" के समान निर्देशिका में ".vagrant" फ़ाइल का उपयोग करता है। यदि कोई VM मौजूद नहीं है, तो यह फ़ाइल मौजूद नहीं होगी। फ़ाइल का प्रारूप JSON है। ऐसा लगता है कि यदि कोई एकल VM मौजूद है:

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

default डिफ़ॉल्ट वर्चुअल मशीन का नाम है (यदि आप मल्टी-वीएम सेटअप का उपयोग नहीं कर रहे हैं)।

यदि आपका वीएम किसी तरह डिसाइड हो गया है, तो आप क्या कर सकते हैं VBoxManage list vmsजो हर वीएम को सूचीबद्ध करेगा जिसे वर्चुअलबॉक्स इसके नाम और यूयूआईडी के बारे में जानता है। फिर मैन्युअल रूप .vagrantसे उसी के रूप में एक निर्देशिका में एक फ़ाइल बनाएं Vagrantfileऔर सामग्री को ठीक से भरें।

vagrant statusयह सुनिश्चित करने के लिए चलाएं कि वैग्रांत ने उचित बदलाव उठाए।

नोट: यह आधिकारिक तौर पर वैग्रांत द्वारा समर्थित नहीं है और वैग्रैंट .vagrantकिसी भी समय प्रारूप को बदल सकता है । लेकिन यह वैग्रांट 0.9.7 के रूप में मान्य है और वैग्रांट 1.0 के लिए मान्य होगा।


बहुत बढ़िया! धन्यवाद। मुझे लग रहा था कि कुछ गायब है।
jrdmcgr

48
Vagrant 1.1 के लिए, UUIDs को मशीन-विशिष्ट फ़ाइल में संग्रहीत किया जाता है .vagrant/machines/{name}/{provider}/id। वास्तव में, केवल एक चीज जिसमें फ़ाइल होती है वह है UUID।

2
मैंने इस ट्रिक को आजमाया लेकिन वैजाइनल स्टेटस ने स्टेट को रिपोर्ट नहीं किया। वग्रेंट अप फिर एक नया vm बनाता है और ठीक काम करता है। अगर मैं आईडी फाइल को बदल देता हूं तो रिपोर्ट नहीं बनती है, भले ही मैं इसे केवल बनाए गए बॉक्स के यूआईडी में बदल दूं।
रीस मार्सलैंड

4
वैग्रांट 1.1+ के साथ, सुनिश्चित करें कि आप आईडी के अंत में एक नई पंक्ति नहीं जोड़ते हैं। देखें github.com/mitchellh/vagrant/issues/1755 जानकारी के लिए
मैड्स Mobæk

1
मैं अपनी प्रोफ़ाइल (मैक) में .vagrant की तलाश कर रहा था। ध्यान दें कि (कम से कम मेरे लिए) यह कुकबुकबुक फ़ोल्डर और वैग्रांटफाइल के समान फ़ोल्डर में था। (
वैग्रांत

208

के लिए Vagrant 1.6.3 निम्न कार्य करें:

1) निर्देशिका में जहां आपका वैग्रांटफाइल स्थित है, कमांड को चलाएं

VBoxManage list vms

आपके पास कुछ इस तरह होगा:

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

2) निम्नलिखित पथ पर जाएं:

cd .vagrant/machines/default/virtualbox

3) अपने वीएम xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxx के आईडी के साथ आईडी नामक एक फ़ाइल बनाएं

4) फ़ाइल को सहेजें और योनि को चलाएं


8
एक नई लाइन के बिनाid फ़ाइल बनाने का एक अच्छा तरीका है । echo -n '<your id here>' > id
Xiong Chiamiov

1
बहुत अच्छा काम करता है। लेकिन ऐसा क्यों होता है?
जॉनीक्यू

वैग्रांत 1.7.2 के साथ मेरे लिए काम किया। धन्यवाद!
राफेन

1
पूरी तरह से काम किया।
केसी रॉबिन्सन

# test1 और test2 बॉक्स ...for box in test1 test2; do virtualboxid=$(VBoxManage list vms | grep $box | cut -d' ' -f2); echo -n $virtualboxid > .vagrant/machines/$box/virtualbox/id; done
luismartingil

48

ऊपरी संस्करण के साथ समाधान काफी समान है।

लेकिन पहले आपको हाथ से .vbox फ़ाइल लॉन्च करने की आवश्यकता है ताकि यह दिखाई दे VBoxManage list vms

फिर आप यह जांचने के लिए .vagrant/machines/default/virtualbox/idदेख सकते हैं कि यूआईडी सही है।


4
इसके अलावा, यह ध्यान देने योग्य है कि यदि आप idफ़ाइल को संपादित कर रहे हैं , तो आपको इसे एक ही पंक्ति में रखना होगा। किसी कारण से यह अंत में newline को पसंद नहीं करता है (मेरा पाठ संपादक इसे डिफ़ॉल्ट रूप से जोड़ता है, इसलिए मुझे समस्याएं थीं)।
Dan2552

मैं इसके साथ एक समस्या में भाग गया क्योंकि मैंने उस फ़ोल्डर का नाम बदल दिया था जिसमें वह था। वैग्रंट ने मौजूदा VM का उपयोग करने के बजाय फ़ोल्डर के समान नाम के साथ एक नया VM बनाने पर जोर दिया। मैंने .vagrant1.0 प्रारूप में एक फ़ाइल बनाकर इसे ठीक किया , और इसने इसे स्वचालित रूप से अपग्रेड किया। जैसे ही मैंने किया, उसने वास्तव में पुराने वीएम का नाम बदलकर नई परियोजना निर्देशिका नाम कर दिया।
योना

2
मुझे यकीन नहीं है कि डिस्कनेक्ट के कारण क्या हुआ, जहां मेरी योनि / मशीनें / डिफ़ॉल्ट / वर्चुअलबॉक्स / आईडी ने गलत वर्चुअलबॉक्स मशीन आईडी को इंगित किया। जो फ़ाइल मदद की वह $ HOME / .VirtualBox / VirtualBox.xml थी। इसके पास मशीनरैजिस्ट्री सेक्शन है जिसमें वर्चुअलबॉक्स मशीन यूयूआईडीएस मशीन के नाम से मैप की गई है। उदाहरण के लिए <MachineEntry uuid = "{f232f951-103b-af28-9f8d-b2ab21bs258f}" src = "$ HOME / VirtualBox VMs \ <मशीन-नाम \" मशीन-नाम> .vbox "/>
arntg

14

आज का मुद्दा था, मेरा .vagrantफ़ोल्डर गायब था और पाया कि आईडी सेट करने की तुलना में कुछ और कदम थे:

  1. आईडी सेट करें:

    VBoxManage list vms
    

    आईडी ढूंढें और सेट करें {project-folder}/.vagrant/machines/default/virtualbox/id

    ध्यान दें कि defaultआपके Vagrantfileईजी में सेट होने पर भिन्न हो सकते हैं config.vm.define "someothername"

  2. मशीन को प्रावधान करने से रोकें:

    फ़ाइल के रूप action_provisionमें एक ही dir में एक फ़ाइल बनाएं id, इसे सेट करें: चरण 1 में मिली आईडी के साथ 1.5:{id}प्रतिस्थापित {id}करना।

  3. एक नई सार्वजनिक / निजी कुंजी सेट करें:

    वैग्रैंट .vagrant/machines/default/virtualbox/private_keyमशीन में ssh में संग्रहीत एक निजी कुंजी का उपयोग करता है । आपको एक नया जनरेट करना होगा।

    ssh-keygen -t rsa
    

    इसे नाम दें private_key

    vagrant sshफिर उसकी प्रतिलिपि private_key.pubमें /home/vagrant/.ssh/authorized_keys


"अधिकृत_कीप्स" एक फ़ाइल या निर्देशिका है?
user2568374

यह एक फ़ाइल है, यदि आप इसे खोजते हैं तो आपको बहुत सारी चीजें
मिलेंगी

क्योंकि मैं उसी कुंजियों का उपयोग कर रहा था, मुझे अंतिम सेटप (तीसरा) नहीं करना था। अन्यथा, वास्तव में अच्छी तरह से समझाया गया है और सब कुछ सही है।
दाजाग

Win10 पर तीसरा कदम कैसे करें step
नवोनो

9

वैग्रंट 1.7.4 के साथ आज उसी समस्या के साथ अद्यतन करें:

उदाहरण के लिए, जोड़ी बॉक्स 'vip-quickstart_default_1431365185830_12124' योनि में।

$ VBoxManage list
"vip-quickstart_default_1431365185830_12124" {50feafd3-74cd-40b5-a170-3c976348de27}
$ echo -n "50feafd3-74cd-40b5-a170-3c976348de27" > .vagrant/machines/default/virtualbox/id

6

मल्टी-वीएम सेटअप के लिए, यह इस तरह दिखेगा:

{
   "active":{
        "web":"a1fc9ae4-5d43-49cb-be31-ab3c4f74745d",
        "db":"13503bc5-76b8-4c26-95c4-32435b372212"
   }
}

आप उन VM को बनाने के लिए उपयोग किए जाने वाले Vagrantfile से vm नाम प्राप्त कर सकते हैं। इस पंक्ति को देखें:

config.vm.define :web do |web_config|

"वेब" इस मामले में vm का नाम है।


और db एक डिफॉल्ट VM है ??
रॉबर्ट

1
मुझे नहीं लगता कि यहां एक डिफ़ॉल्ट है, बस वेब और डीबी। वैग्रांटफाइल के आधार पर, एक क्रम होता है, जो पहले vm बनता है।
agwntr

5

मैं OSX El Capitan पर Vagrant 1.8.1 का उपयोग कर रहा हूं

मेरे कंप्यूटर के पुनरारंभ होने पर मेरा vm सही ढंग से बंद नहीं हुआ था, इसलिए जब मैंने कोशिश की vagrant up यह हमेशा नया vm बना रहा था। यहां कोई समाधान मेरे लिए काम नहीं किया। लेकिन जो काम किया, वह इंगम्यूरिलो के जवाब की भिन्नता थी

इसलिए .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


4

इसे @ पेटकोप के उत्तर से संशोधित किया गया है

Daud vagrant haltयदि आपने अभी तक बॉक्स को बंद नहीं किया है तो ।

फिर अपने वर्चुअलबॉक्स को सूचीबद्ध करें: VBoxManage list vms

यह आपके सभी वर्चुअलबॉक्स को सूचीबद्ध करेगा। जिस बॉक्स को आप वापस करना चाहते हैं उसे पहचानें और आईडी को घुंघराले कोष्ठक के बीच रखें {}

फिर प्रोजेक्ट आईडी फ़ाइल को संपादित करें: sudo nano .vagrant/machines/default/virtualbox/id(प्रोजेक्ट डायरेक्टरी से)

वीबी की सूची से कॉपी की गई आईडी से इसे बदलें।

कोशिश करो 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!

आपको सब सेट होना चाहिए।


3

वैग्रांत 1.9.1 में:

मेरे पास 'Ubuntu 16.04.1' नाम के वर्चुअल बॉक्स में एक VM था, इसलिए मैंने इसे एक योनि बॉक्स के साथ पैक किया:

vagrant package --base "Ubuntu 16.04.1"

के साथ प्रतिक्रिया ...

==> Ubuntu 16.04.1: Exporting VM...
==> Ubuntu 16.04.1: Compressing package to: blah blah/package.box

0

मैं macos पर हूँ और पाया कि बक्से पर .locks को हटाने से मेरी समस्या हल हो गई।

किसी कारण के लिए

vagrant halt

इन तालों को नहीं हटाया, और मेरी सभी सेटिंग्स .vagrant / मशीन / डिफ़ॉल्ट / वर्चुअलबॉक्स को टाइममेचाइन का उपयोग करके पुनर्स्थापित करने के बाद, तालों को हटाकर, सही मशीन बूट हो गई।

केवल 1 छोटी समस्या बनी हुई है, यह ग्रब में बूट हो गया है इसलिए मुझे एक बार एंटर दबाना था, पता नहीं कि यह रह रहा है या नहीं, लेकिन मुझे जल्द ही पता चल जाएगा।

मैं योनि 1.7.4 और वर्चुअलबॉक्स 5.0.2 चला रहा हूं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.