通过 Chef solo 和 Vagrant 安装 apt 包

Install apt package via Chef solo and Vagrant

我需要为 Ubuntu、

安装 libgmp3-dev

Vagrant 文件:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["chef/site-cookbooks", "cookbooks"]
    chef.add_recipe "build-essential"
    chef.add_recipe "apt"
  end
end

chef/site-cookbooks/system/recipes/default.rb:

package 'libgmp3-dev' do
  action :install
end

但是我创建虚拟机的时候,里面没有libgmp3-dev

更新。 找到了这个解决方案:

config.vm.provision :shell, :inline => 'sudo apt-get install libgmp3-dev -y'

但我认为这不是一个很好的解决方案

根据 Vagrant docs for the Chef Solo provisioner,您的 Vagrantfile 中似乎缺少一个食谱...

chef.add_recipe "system"

如果您使用 system cookbook from Supermarket,您需要包含 system::install_packages 配方并设置 node['system']['packages']['install'] 属性:

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = ["chef/site-cookbooks", "cookbooks"]
    chef.add_recipe "build-essential"
    chef.add_recipe "apt"

    chef.add_recipe "system::install_packages"
    chef.json = {
      "system" => {
        "packages" => {
          "install" => ["libgmp3-dev"]
        }
      }
    }
  end
end

如果您使用自己的 system 食谱和您粘贴的 package 说明,我认为 应该足够了。