1

我正在学习厨师,到目前为止,我了解到最好将所有 opscode 食谱放在 cookbooks 目录中,并将我的所有自定义设置放在 site-cookbooks 中。通过这种方式,我可以在 site-cookbooks 中镜像例如 apt cookbook 并更改

默认['apt']['compile_time_update'] = true

强制进行 apt-get 更新,而在此之前它没有这样做。顺便说一句,我花了很长时间才发现这个属性文件将被命名为“customize.rb”,据我所知,它没有在任何地方记录。

为了获得一个简单的 LAMP Stack 依赖项的所有食谱,我使用了 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'

我的流浪文件如下:

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

我的主要问题是为什么厨师总是在处理 apt 食谱后立即尝试安装 php,尽管它在运行列表中的位置很差,导致尝试重新启动 apache 时出现编译错误,例如 apache 正在运行线程 MPM,但是你的 PHP模块未编译为线程安全的。

当我将配置分成两部分时,第一次运行没有任何 php 资源,然后在第二次运行中添加 php 资源(vagrant 配置),那么它工作正常。

我在那里错过了什么......我怎么能告诉厨师运行“apt,apache2,mysql” - 首先......然后安装php?

另一个问题是——我可以确定图书馆员添加的所有依赖项都由厨师(自动)包含在运行列表中,还是我必须像我在“构建要素”中那样手动包含所有依赖项,例如在我的流浪文件。

希望有人可以帮助我,谢谢。

4

2 回答 2

1

可以使用 run_action 方法在运行 run-list 之前执行操作。Priestjim 食谱以这种方式安装 php。解决方案可能是使用社区食谱并复制自定义食谱或在您的自定义食谱中进行 php 安装。

于 2015-10-16T06:07:56.217 回答
0

解决方案是在 site-cookbooks 中编写自定义配方,并将包安装更改为# 在编译时运行包安装,如下所示

node['php']['packages'].each do |pkg|
  package pkg
end

当然,将原始配方中的所有以下模板和目录定义附加到自定义配方中。

似乎现在正在工作。

也许这对任何人都有用,尽管这可能不是专业厨师的做法。

于 2015-10-16T09:19:38.043 回答