8

私は Chef を初めて使用し、ドキュメンテーション (彼らの Web サイトのホームページでさえも) に頭が混乱します。正しい目的で使用しているかどうかさえわかりません。

私の意図はVagrantfile、新しいボックスをスピンアップしたときに、Chef Solo にいくつかのソフトウェアを自動的にインストールするように指示する a をセットアップすることです。これは、Chef Solo の使用目的の 1 つです。よろしいですか?

それが「地球上で最も困難なインフラストラクチャの課題」の1 つに該当するかどうかはよくわかりませんが、何でも構いません。

私の最初の目標は、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

シェフが正常に完了しませんでした! 上記の出力にすべてのエラーが表示されるはずです。正しく完了するようにレシピを修正してください。

レシピが正しく完了するようにするにはどうすればよいですか?

4

2 に答える 2

23

シェフをより効果的に使用するには、次の vagrant プラグインをインストールすることをお勧めします。

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

Berkshelfはクックブックの依存関係を管理するためのツールです。omn ​​ibus プラグインは、chef の最新リビジョンを使用していることを確認するのに役立ちます。

次の例は、nginx などのインストールがいかに簡単になるかを示しています。

├── Berksfile
└── Vagrantfile

バークシェルフ

必要なクックブックを一覧表示します。Berkshelf は、opscode コミュニティ Web サイトからそれら (および依存関係) をダウンロードします。

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 でも同じように動作するはずです。
于 2013-10-01T22:25:46.110 に答える
0

こんにちは、私は同じ問題に遭遇し、検索中にあなたの問題に遭遇しました。APTレシピを含めて簡単に解決しました。パッケージをインストールする前に、新しいインスタンスで更新を apt-get する必要があるため、必要な理由。それで全部です。

于 2013-10-22T16:57:19.773 に答える