6

我是一个 Vagrant n00b,在knife使用 chef-solo 设置一个非常简单的 CentOS LAMP 盒子时,我在让 Vagrant 和 Chef 的命令一起玩得很好时遇到了问题。

以下是这个问题的简要说明:

  1. 我在 vagrantbox.es 上使用 CentOS 6.3 w/ Chef 基本框创建了一个基本的 Vagrantfile。您可以在这个 gist中看到基础知识。
  2. 我已经通过knife cookbook site install nameofcookbook使用将它们放入的配置下载了所有食谱./chef/cookbooks
  3. 我已经成功运行vagrant up到 You can see the basics in this gist
  4. 我已经测试过 apache、php 等。一切都很好。
  5. 现在技巧来了:在 VM 运行的情况下,我运行 Knife 来添加另一个包(在本例中为 i3)
  6. 从这里开始,Vagrant 无法在 VM 中执行各种任务:
  7. 当我运行时,vagrant provision我收到这样的错误

    The chef binary (either `chef-solo` or `chef-client`) was not found on
    the VM and is required for chef provisioning. Please verify that chef
    is installed and that the binary is available on the PATH.
    
  8. 当我运行时,vagrant halt我收到一个错误,即 ssh 命令以非零错误代码退出。

  9. 但是,我可以运行vagrant ssh,并确认 (a) chef-solo 实际上存在于框中,并且 (b) 我可以通过框中的命令行关闭。
  10. 当我运行时,vagrant up我收到这样的错误:
    The following SSH command responded with a non-zero exit status.
    Vagrant assumes that this means the command failed!
    mkdir -p /vagrant</li>
    

我难住了。我已经在两个盒子上发生过这种情况,而且我知道 Knife 和 Vagrant 应该能够很好地配合使用。

我究竟做错了什么?

非常感谢任何帮助,我对深入研究 Vagrant 感到非常兴奋!

4

1 回答 1

17
chef.add_recipe "sudo"

第一次运行后核对你的 sudo 文件。

为您的 vagrant 用户将适当的 json 添加到您的 vagrant 文件中。

就像是:

config.vm.provision :chef_solo do |chef|

  # add your recipes
  # chef.add_recipe "foo"
  # chef.add_role   "bar"
  chef.json = {
    "authorization" => {
        "sudo" => {
            "users" => [ "vagrant" ],
            "passwordless" => true,
        }
    }
  }
end
于 2012-11-23T13:47:15.807 回答