2

我正在通过http://gettingstartedwithdjango.com/en/lessons/introduction-and-launch/上的视频教程工作

我正在开发 win7 并为我的终端使用 git-bash。我已经安装了最新的 virtualbox - 4.2.12 和最新的 vagrant - 1.22。

我试图运行 vagrant 并得到:

  $ vagrant up
  Bringing machine 'default' up with 'virtualbox' provider...
  [default] Setting the name of the VM...
  [default] Clearing any previously set forwarded ports...
  [default] Creating shared folders metadata...
  [default] Clearing any previously set network interfaces...
  [default] Preparing network interfaces based on configuration...
  [default] Forwarding ports...
  [default] -- 22 => 2222 (adapter 1)
  [default] -- 8000 => 8888 (adapter 1)
  [default] Booting VM...
  [default] Waiting for VM to boot. This can take a few minutes.
  [default] VM booted and ready for use!
  [default] Configuring and enabling network interfaces...
  [default] Mounting shared folders...
  [default] -- /vagrant
  [default] -- /tmp/vagrant-chef-1/chef-solo-1/cookbooks
  [default] -- /tmp/vagrant-chef-1/chef-solo-2/cookbooks
  [default] Running provisioner: shell...
  [default] Running: inline script
  stdin: is not a tty
  ERROR:  Error installing chef:
          ERROR: Failed to build gem native extension.      

          /usr/bin/ruby1.8 extconf.rb
  creating Makefile      

  make
  sh: 1: make: not found    


  Gem files will remain installed in /var/lib/gems/1.8/gems/yajl-ruby-1.1.0 for in
  spection.
  Results logged to /var/lib/gems/1.8/gems/yajl-ruby-1.1.0/ext/yajl/gem_make.out
  Building native extensions.  This could take a while...
  The following SSH command responded with a non-zero exit status.
  Vagrant assumes that this means the command failed!      

      chmod +x /tmp/vagrant-shell && /tmp/vagrant-shell

当我做:

$ which make

我得到:

/c/opscode/chef/embedded/bin/make

所以看起来 make 在文件路径中

我怎样才能解决这个问题?

附录:当我将 vagrantfile 编辑为:

config.vm.provision :shell, :inline => "curl -L https://opscode.com/chef/install.sh | bash"

我得到:

/tmp/vagrant-shell: line 1: curl: command not found
4

4 回答 4

2

您使用的 basebox 默认没有安装“build-essential”包,它有一个“ shell provisioner ”,可以将 Chef gem 安装到默认的 Ruby 环境中。Chef 依赖于 JSON RubyGem,它本身具有必须编译的 C 扩展。这就是要寻找的东西make

要解决此问题,我建议使用 Opscode 的 Chef 的“omnibus”全栈安装程序。这可以通过将 shell 配置程序行更改为:

config.vm.provision :shell, :inline => "curl -L https://opscode.com/chef/install.sh | bash"

或者,如果您的 basebox 没有 curl,请使用 wget:

config.vm.provision :shell, :inline => "wget -O https://opscode.com/chef/install.sh | bash"

[install.sh][3]脚本仅检查 VM 以确定其平台是什么,以便它可以从 S3 存储桶中检索正确的 URL。如果您愿意,可以使用构造的 URL 直接下载 .deb 文件:

https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/11.04/x86_64/chef_11.4.4-2.ubuntu.11.04_amd64.deb

然后安装它:

dpkg -i chef_11.4.4-2.ubuntu.11.04_amd64.deb

请参阅有关shell 配置程序的 Vagrant 文档,了解如何将其编写为小脚本。

于 2013-06-15T16:45:56.323 回答
0

如果操作系统没有预先安装 make,并且您仍想继续前进,您可以执行以下操作:

e = package "make" do
        action :nothing
end

e.run_action(:install)

它将在编译时安装 make 包,在您的任何食谱尝试使用它之前。你应该把它放在你的一个食谱中,最好放在顶部,这样其他读者就可以清楚地知道发生了什么。

于 2013-06-15T08:53:35.863 回答
0

你在哪台机器上跑过which make?(主人/客人)。确保 guest(virtualbox) 有一个make.

https://github.com/scottmuc/vagrant-postgresql/issues/1#issuecomment-7798110

于 2013-06-15T04:17:33.347 回答
0

原来,谢谢我的厨师版本错误。我需要不是最新的版本 11.4.2。最近的对我不起作用。我去了

http://www.opscode.com/chef/install/

并下载并安装:

chef-client-11.4.2-1.windows.msi

它在做 vagrant destroy 之后起作用,并在 vagrant up 之后工作。

于 2013-06-17T15:04:41.447 回答