如何配置Chef Solo以在新的Vagrant盒子上安装Nginx?

时间:2013-10-01 20:34:19

标签: nginx ubuntu-12.04 chef vagrant

我是Chef的新手,文档(甚至是他们网站的主页)让我头疼。我甚至不确定我是否将它用于正确的目的。

我的目的是设置一个Vagrantfile,告诉Chef Solo在我启动一个新盒子时自动安装一些软件。 这是Solo主厨的预期用途之一,我是否正确?

我不确定这是否属于“地球上最严峻的基础设施挑战”,但无论如何。

我的第一个目标是让Chef Solo为我安装nginx。在我的项目中,我克隆了nginx的食谱:

$ git clone https://github.com/opscode-cookbooks/nginx.git cookbooks/nginx

我编辑了Vagrantfile看起来像这样:

Vagrant.configure("2") do |config|
  config.vm.box = "opscode-ubuntu-1204"
  config.vm.provision :chef_solo do |chef|
    chef.add_recipe "nginx"
  end
end

当我运行vagrant up时,我收到了一些错误,其中找不到某些食谱(build-essentialapt等),所以我将它们从适当的回购中克隆出来。现在,当我vagrant up时,我得到了这个输出:

[2013-10-01T20:31:03+00:00] INFO: Processing package[nginx] action install (nginx::package line 38)    

Error executing action `install` on resource 'package[nginx]'
Chef::Exceptions::Exec
----------------------

apt-get -q -y install nginx=1.1.19-1ubuntu0.1 returned 100, expected 0

Resource Declaration:
---------------------
# In /tmp/vagrant-chef-1/chef-solo-1/cookbooks/nginx/recipes/package.rb

 38: package node['nginx']['package_name'] do
 39:   notifies :reload, 'ohai[reload_nginx]', :immediately
 40: end
 41: 

Compiled Resource:
------------------
# Declared in /tmp/vagrant-chef-1/chef-solo-1/cookbooks/nginx/recipes/package.rb:38:in `from_file'

package("nginx") do
  action :install
  retries 0
  retry_delay 2
  package_name "nginx"
  version "1.1.19-1ubuntu0.1"
  cookbook_name :nginx
  recipe_name "package"
end

[2013-10-01T20:31:08+00:00] INFO: Running queued delayed notifications before re-raising exception
[2013-10-01T20:31:08+00:00] ERROR: Running exception handlers
[2013-10-01T20:31:08+00:00] ERROR: Exception handlers complete
[2013-10-01T20:31:08+00:00] FATAL: Stacktrace dumped to /tmp/vagrant-chef-1/chef-stacktrace.out
[2013-10-01T20:31:08+00:00] FATAL: Chef::Exceptions::Exec: package[nginx] (nginx::package line 38) had an error: Chef::Exceptions::Exec: apt-get -q -y install nginx=1.1.19-1ubuntu0.1 returned 100, expected 0

厨师从未成功完成!任何错误都应该在上面的输出中可见。请修复您的食谱,以便它们正确完成。

如何修复食谱以使其正确完成?

2 个答案:

答案 0 :(得分:23)

为了更有效地使用厨师,我建议安装以下流浪插件:

vagrant plugin install vagrant-omnibus
vagrant plugin install vagrant-berkshelf

Berkshelf是一个管理食谱依赖关系的工具。 omnibus plugin对于确保您使用最新版本的厨师非常有用。

以下示例演示了安装nginx之类的简单方法。

实施例

├── Berksfile
└── Vagrantfile

Berkshelf

列出所需的食谱。 Berkshelf将从opscode社区网站下载它们(和依赖项)。

site :opscode

cookbook "nginx"

Vagrantfile

以下vagrant文​​件将安装nginx,使其在主机的端口8080上可用:

Vagrant.configure("2") do |config|

  # Box details
  config.vm.box = "Berkshelf-CentOS-6.3-x86_64-minimal"
  config.vm.box_url = "https://dl.dropbox.com/u/31081437/Berkshelf-CentOS-6.3-x86_64-minimal.box"

  # Plugins
  config.berkshelf.enabled = true
  config.omnibus.chef_version = :latest

  # Network
  config.vm.network :forwarded_port, guest: 80, host: 8080

  # Chef solo provisioning
  config.vm.provision :chef_solo do |chef|
    chef.add_recipe "nginx"
  end

end

注意:

  • 此示例使用CentOS。应该在Ubuntu上同样有效。

答案 1 :(得分:0)

嗨,我遇到了同样的问题,而在搜索时偶然发现了你的问题。我已经解决了它简单包括APT配方。之所以需要它,是因为在安装软件包之前必须先对新实例进行apt-get更新。就这样。