私はシェフを学んでいますが、これまでのところ、すべての opscode クックブックをクックブック ディレクトリに置き、すべてのカスタマイズをサイト クックブックに置くのが最善であることを理解しました。このようにして、たとえば apt cookbook を site-cookbooks にミラーリングし、
デフォルト['apt']['compile_time_update'] = true
その前に行わなかった apt-get 更新を強制します。ところで、この属性ファイルが「customize.rb」という名前になることを知るのにかなり時間がかかり、私の知る限り、どこにも文書化されていません。
シンプルな LAMP スタックの依存関係を持つすべてのクックブックを取得するには、vagrant-librarian プラグインを使用しています。したがって、私のCheffileは次のようになります。
site 'http://community.opscode.com/api/v1'
cookbook 'apt', '~> 2.8.2'
cookbook 'openssl', '~> 4.4.0'
cookbook 'apache2', '~> 3.1.0'
cookbook 'mysql', '~> 6.1.0'
cookbook "php", github: "priestjim/chef-php"
cookbook 'phpmyadmin', '~> 1.0.6'
私のVagrantfileは次のとおりです。
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/trusty64"
config.vm.provider "virtualbox" do |v|
v.memory = 1024
v.name = 'chef-lamp'
end
config.vm.network "private_network", ip: "192.168.33.10"
config.vm.host_name = "project.dev"
config.vm.synced_folder "./public", "/vagrant/"
config.omnibus.chef_version = "12.3.0"
config.vm.provision "chef_solo" do |chef|
chef.arguments = '--force-formatter'
chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
chef.add_recipe 'apt'
chef.add_recipe 'build-essential'
chef.add_recipe 'mysql'
chef.add_recipe 'xml'
chef.add_recipe 'openssl'
chef.add_recipe 'apache2'
chef.add_recipe 'apache2::mod_php5'
chef.add_recipe 'apache2::mod_rewrite'
chef.add_recipe 'php'
chef.add_recipe 'php::module_mysql'
chef.add_recipe 'apache2::mod_php5'
chef.add_recipe 'apache2::vhost'
#chef.add_recipe 'phpmyadmin'
end
end
私の主な質問は、Apache がスレッド化された MPM を実行しているなど、apache を再起動しようとするとコンパイルエラーが発生するランリストの途中にあるにもかかわらず、シェフが apt クックブックを処理した直後に常に php をインストールしようとするのはなぜですか?モジュールはスレッドセーフになるようにコンパイルされていません。
プロビジョニングを2つの部分に分割し、最初の実行でphpリソースを使用せずに実行し、2回目の実行でphpリソースを追加すると(vagrantプロビジョニング)、正常に動作します。
そこに何が欠けているのですか...シェフに「apt、apache2、mysql」を実行するように指示するにはどうすればよいですか-最初に....次にphpをインストールしますか??
別の質問は次のとおりです-司書によって追加されたすべての依存関係がシェフによって(自動的に)ランリストに含まれていることを確信できますか、それとも、たとえば私のVagrantfile.
誰かが私を助けてくれることを願っています、ありがとう。