developer tip

Vagrant가 VM을 프로비저닝하는 데 사용하는 Chef 버전을 제어하는 ​​방법은 무엇입니까?

optionbox 2020. 10. 31. 09:36
반응형

Vagrant가 VM을 프로비저닝하는 데 사용하는 Chef 버전을 제어하는 ​​방법은 무엇입니까?


버전 0.10.10의 버그로 인해 현재 Chef 레시피가 실행되고 있지 않습니다. Vagrant가 사용하는 Chef 버전을 0.10.12로 업그레이드하려면 어떻게해야합니까?

VM의 현재 인스턴스에 대해서만 업데이트하고 싶지 않습니다. 계속해서 삭제하고 다시 빌드합니다. Vagrant 기본 상자 또는 내 (물리적) 시스템의 설치 항목을 변경해야합니까?


Vagrant 플러그인을 사용하면 vagrant -omnibus가 잘 작동했습니다.

vagrant plugin install vagrant-omnibus

그런 다음 프로비저닝을 수행하기 전에 Vagrantfile에서 요리사 버전을 구성 할 수 있습니다.

config.omnibus.chef_version = :latest

특정 버전을 지정할 수도 있습니다.

config.omnibus.chef_version = '11.6.0'

라인 추가

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"

config.vm.provision :chef_solo블록 전에 Vagrantfile에 .

http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/에 대한 hauraki의 의견에 소품

Jason Mayfield의 의견을 포함하도록 편집되었습니다. 확인하고 그에게도 찬성표를주세요. --no-upgrade속도를 높이고 --conservative두 번째 줄에 일치시키기 위해 추가 했습니다 . 대신 Jason이 한 작업을 수행하고 --no-upgrade--conservative.

익명 사용자가 제안한 편집을 포함하도록 편집 됨


베이스 박스를 재 조립하십시오. 먼저 프로비저닝하지 않고 SSH를 실행합니다.

vagrant up --no-provision 
vagrant ssh

그런 다음 상자를 업데이트하는 데 필요한 명령을 수행하십시오. 여기에는 Chef 및 Ruby 업데이트가 포함될 수 있습니다. 선택적으로 OS 등의 패키지를 업데이트합니다. 다운로드 한 패키지 파일 또는 캐시와 같이 필요하지 않은 모든 항목의 상자를 정리해야합니다.

예를 들어, Vagrant 상자 (원래 VeeWee로 빌드 ) 에서 Chef 용 Opscode Omnibus Full Stack Installer를 사용하고 패키지도 업데이트합니다.

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

크기를 줄이려면 디스크를 "0"으로 설정하는 것을 잊지 마십시오.

# 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 / boxes / BOXNAME)를 제거해야합니다.


프로비저닝을 위해 Chef를 사용할 때 지정할 수 있는 여러 옵션 이 있습니다. 이 중 하나는 version원하는 Chef 버전을 지정할 수있는입니다.

예를 들어, chef.version이 추출 라인을 참조하십시오 Vagrantfile.

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

답변에 댓글을 달 수는 없지만 위의 Bryan Larsen의 답변에 메모를 추가하고 싶었습니다. 그의 프로비저닝 명령이 작동하도록하려면 새 Chef 버전을 설치하는 동안 gem 기본 확장을 빌드 할 수 있도록 줄을 추가해야했습니다. 따라서 다음과 같이되었습니다.

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'

누구에게나 중요한 경우를 대비해 Ubuntu 13.04에있었습니다.


Chef Test Kitchen을 사용하는 경우 다음 .kitchen.yml과 같이 파일에 Chef 버전을 지정할 수 있습니다 .

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.6.0

참고 URL : https://stackoverflow.com/questions/11325479/how-to-control-the-version-of-chef-that-vagrant-uses-to-provision-vms

반응형