2012-07-04 7 views
69

संस्करण 0.10.10 में एक बग के कारण वर्तमान शेफ रेसिपी नहीं चल रहा है। मैं वाफ्रंट का उपयोग 010.12 पर शेफ के संस्करण को अपग्रेड कैसे कर सकता हूं?वाफ्रंट वीएम के प्रावधान के लिए उपयोग किए जाने वाले शेफ के संस्करण को कैसे नियंत्रित करें?

मैं इसे वीएम के वर्तमान उदाहरण के लिए अपडेट नहीं करना चाहता - मैं उनको नष्ट कर रहा हूं और पुनर्निर्माण करता हूं। क्या मुझे वग्रेंट बेस बॉक्स में कुछ या मेरी (भौतिक) सिस्टम की स्थापना में कुछ बदलने की ज़रूरत है?

उत्तर

103

Vagrant प्लगइन vagrant-omnibus का उपयोग करना मेरे लिए महान काम किया:

config.omnibus.chef_version = :latest 

तुम भी एक विशिष्ट निर्दिष्ट कर सकते हैं:

vagrant plugin install vagrant-omnibus 

आप तो बस प्रावधान करने से पहले Vagrantfile में अपने महाराज संस्करण कॉन्फ़िगर कर सकते हैं संस्करण:

config.omnibus.chef_version = '11.6.0' 
+11

इसे वोट दिया जाना चाहिए, और संभवतः सही उत्तर के रूप में चिह्नित किया जाना चाहिए बल्कि पुराने वर्तमान में सही सही जवाब दिया गया है। – jimeh

+0

हां। यह धागे के लिए सही जवाब है क्योंकि यह उबंटू मशीन होने पर बॉक्स पर निर्भर नहीं है। एक पूर्ण कामकाजी उदाहरण के लिए [मेरे रेपो की जांच करें] (https://github.com/elgalu/jenkins-box-for-travis/blob/74c56b7/Vagrantfile#L25) –

+0

क्या यह काम करता है यदि आप 'नवीनतम' को प्रतिस्थापित करते हैं विशिष्ट संस्करण? –

31

बेस बॉक्स को पुनर्निर्माण करें। सबसे पहले, बिना प्रावधान और एसएसएच के इसे लाएं।

vagrant up --no-provision 
vagrant ssh 

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

उदाहरण के लिए, मैं अपने Vagrant बक्से में Opscode Omnibus Full Stack Installer for Chef (मूल रूप से VeeWee के साथ बनाया गया है) का उपयोग, और मैं भी संकुल अद्यतन करते हैं,।

sudo dpkg --purge chef chef-full 
sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash 
sudo apt-get update && sudo aptitude safe-upgrade 
sudo rm /var/cache/apt/archives/*.deb 

आकार को कम करने के लिए डिस्क को "शून्य" मत भूलना।

# a bunch of commands like gem install chef, apt-get upgrade, whatever 
sudo dd if=/dev/zero of=/EMPTY bs=1M 
sudo rm /EMPTY 
exit 

फिर, बॉक्स को पैकेज करें और इसे उपयोग के लिए अपने Vagrant वातावरण में जोड़ें।

vagrant package 
vagrant box add mynewlucid32 package.box 

आप एक ही बॉक्स नाम का उपयोग करना चाहते हैं, तो आप मौजूदा बॉक्स को हटाने के लिए (~/.vagrant.d/बॉक्स/BOXNAME) पहले की आवश्यकता होगी।

+0

आप इसे और postinstall.sh स्क्रिप्ट में कुछ और कमांड यहां पा सकते हैं: https://gist.github.com/1052287 – StephenKing

+0

FYI, 'wget -O - https://opscode.com के बजाय /chef/install.sh | सुडो बश 'निम्नलिखित नया है [अनुशंसा] (http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac) प्रक्रिया। 'sudo true && curl -L https://www.opscode.com/chef/install.sh | सुडो बश 'पूर्व को "वैध पैकेज पुनर्प्राप्त करने में असमर्थ" हो सकता है! – pdeschen

40

अपने config.vm.provision :chef_solo ब्लॉक से पहले लाइनों

config.vm.provision :shell, :inline => 'apt-get install build-essential ruby1.9.1-dev --no-upgrade --yes' 
config.vm.provision :shell, :inline => "gem install chef --version 11.4.2 --no-rdoc --no-ri --conservative" 
अपने Vagrantfile को

जोड़ें।

http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/

संपादित पर Hauraki की टिप्पणी करने के लिए सहारा जेसन मेफील्ड की टिप्पणी शामिल करने के लिए। सुनिश्चित करें और उसे एक अपवित्र भी दें। मैंने --no-upgrade को चीजों को गति देने और दूसरी पंक्ति पर --conservative से मिलान करने के लिए जोड़ा। आप जेसन द्वारा किए गए कार्यों को कर सकते हैं, और --no-upgrade और --conservative दोनों को हटा सकते हैं।

गुमनाम user228653 ने सुझाव दिया संपादित शामिल करने के लिए संपादित

+0

धन्यवाद - इस समय परीक्षण करने की स्थिति में नहीं, लेकिन कानूनी लगता है। (ब्लॉग से नोट: शेफ वास्तव में शेफ को अपग्रेड करने के लिए दो बार चला जाता है, फिर एक बार वास्तविक के लिए।) –

+0

वास्तव में, मुझे लगता है कि आप बहुत अधिक कर सकते हैं ब्लॉग आलेख को अनदेखा करें। यह एक और समाधान है, लेकिन मैंने टिप्पणियों में से जो एक चुना है वह छोटा, मीठा और प्रभावी है। –

+2

मेरे लिए परीक्षण और काम कर रहा है –

11

मैं जवाब पर टिप्पणी पोस्ट करने में असमर्थ हूँ, लेकिन मैं इसके बाद के संस्करण ब्रायन लार्सन के जवाब के लिए एक नोट जोड़ना चाहते थे। अपने प्रावधान कमांड को काम करने के लिए, मुझे नए शेफ संस्करण के इंस्टॉलेशन के दौरान मणि देशी एक्सटेंशन बनाने में सक्षम होने से पहले एक लाइन जोड़ने की आवश्यकता थी। इसलिए, यह बन गया:

config.vm.provision :shell, inline: 'apt-get install ruby1.9.1-dev' 
config.vm.provision :shell, inline: 'gem install chef --version 11.4.4 --no-rdoc --no-ri' 

यह उबंटू 13.04 पर था, ऐसा होता है कि किसी को भी मायने रखती है।

11

कईहैं प्रावधान के लिए शेफ का उपयोग करते समय आपनिर्दिष्ट कर सकते हैं। इनमें से एक version है, जो आपको इच्छित शेफ संस्करण निर्दिष्ट करने की अनुमति देता है।

config.vm.provision :chef_solo do |chef| 
    chef.version = "10.14.2" 
    chef.cookbooks_path = "cookbooks" 
    chef.add_recipe("vagrant_main") 
end 
+2

मेरी राय में यह सही उत्तर के रूप में चिह्नित किया जाना चाहिए। कारण: (1) यह बाहरी प्लगइन और ऑपरेटिंग सिस्टम से स्वतंत्र है (2) आपकी टीमों के विकास वातावरण को मानकीकृत करना आसान बनाता है। – Mia

0

आप बावर्ची टेस्ट रसोई का उपयोग कर रहे हैं, तो आप बावर्ची संस्करण .kitchen.yml फ़ाइल में इस तरह निर्दिष्ट कर सकते हैं,:

उदाहरण के लिए, मेरा एक Vagrantfile के इस उद्धरण में chef.version लाइन देख

provisioner: 
    name: chef_zero 
    require_chef_omnibus: 12.6.0 
संबंधित मुद्दे

 संबंधित मुद्दे