我正在尝试了解如何组织我的 Chef 厨房并扩展 Opscode 社区食谱的功能。免责声明:n00b。
计划堆栈
- Ubuntu 12.04.2
- Apache2(软件包)
- PHP 5.4.13(已编译)
- MySQL 服务器
- MySQL 客户端
APACHE COOKBOOK + 编译后的 PHP
Apache cookbook 仅提供了将 php 作为软件包安装的方法。官方 Ubuntu 12.04 软件包安装 PHP 5.3,没有好的非官方 5.4+ 软件包。该应用程序需要 PHP 5.4+。因此,必须使用标志从源代码编译 PHP "--with-apxs2"
。
峰面积X射线光电子能谱
要编译 PHP 以与 Apache2 一起使用,需要 apxs2(或 apxs),它似乎没有被安装apache::default
(即使apache2 -l
显示mod_so.c
和Apache 文档似乎表明这表示安装。)
- 我确实注意到了第 142-143 行默认的 apache.conf.erb 模板有一行注释掉
LoadModule
了“保持 apxs 正常运行”的内容,但我不明白它的用途。Apache2 文档中是否缺少一些简单的内容来说明如何安装或启用 apxs? - Apache cookbook 没有提供安装
dev
软件包的方法。那么应该在哪里进行安装?我的“sample_lamp_app”配方?在“my_apache2”等“扩展”社区 cookbook 的配方中?带有not_if
测试 apxs 条件的“php::source”配方?
笔记
请不要回答“升级到 Ubuntu 12.10”或“改用这个非官方的 Apache2 cookbook”之类的问题。首先,项目规范要求 12.04。其次,我更感兴趣的是学习在 cookbook 中组织和交互的正确方法。
答案1
几周前,我在一次会议上向 Opscode 的一位员工问了同样的问题。
我们目前使用的是旧版本的 chef (10.14.4),因为它允许您将食谱存储在多个位置,chef 会将它们全部合并在一起。当您这样做时,它会警告您已弃用的行为,但 Opscode 的人似乎没有正确的答案来做到这一点。
目录结构
我们只覆盖要更改的部分和元数据文件。在本例中,我们复制了默认.rb文件,进行更改并将其保存在我们的食谱覆盖目录。请注意,我们还复制了元数据.rb,其中我们增加了版本号。我通常会在前面加上一个 9,这样我的版本号就始终是最高的,因此版本号类似于92.2.13代替2.2.13这样,我就使用9作为命名空间的类型了。
`-- chef
|-- cookbooks
| `-- apache2
| |-- attributes
| | `-- ...
| |-- CHANGELOG.md
| |-- CONTRIBUTING.md
| |-- definitions
| | `-- ...
| |-- files
| | `-- ...
| |-- Gemfile
| |-- LICENSE
| |-- metadata.json
| |-- metadata.rb
| |-- README.md
| |-- recipes
| | `-- ...
| `-- templates
| `-- ...
`-- cookbooks-overrides
`-- apache2
|-- metadata.rb
`-- recipes
`-- default.rb
刀.rb
我们告诉厨师在哪里可以找到食谱
...
cookbook_path [
"#{ENV['HOME']}/dev/deployment/chef/cookbooks",
"#{ENV['HOME']}/dev/deployment/chef/cookbooks-overrides"
]
现在,当你使用以下命令将食谱推送到 Chef 服务器时刀具食谱上传,您会收到一个警告,因为该食谱存在于多个地方,但它仍然会很乐意将它们合并在一起,最终您会得到一本可以满足您的要求的食谱。
我确信这不是“正确的方法”,但到目前为止,这无疑是一种成功的方法。只需稍加努力,确保在更新底层食谱(在本例中为 apache2)时,覆盖仍然有效。
其他参考
这个帖子谈论创建“包装食谱”来做你想做的事情。
这个帖子谈论管理第三方食谱的工具。