我正在尝试使用 packer.io 为我已经使用 Chef (chef-solo
特别是)自动部署的服务器创建机器映像,使用amazon-chroot
构建器和chef-solo
配置器(围绕它的一些 shell 配置步骤用于初始化 / 清理的东西)。
此方法在系统的某个位置安装一个 EBS 卷,然后chroot
进入其中并在那里运行 Chef 配置过程。问题是,一些 Chef 食谱创建并启动服务,我无法让它们不在 chroot 中启动。我希望他们不要开始,原因有两个:
- 我正在尝试获得更清洁的机器图像
- 在构建过程结束时,在 chroot 中运行服务会阻止 Packer 卸载 EBS 卷并因此完成该过程
我已经/usr/sbin/policy-rc.d
正确创建(如 Packer 文档中所述),并且正在执行以下操作以停止initctl
工作:
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl
(当然我会在构建过程结束时恢复它)。但是,某些服务——特别是 Chef 安装的postfix
服务,在安装后仍然能够自行启动。
关于我应该采取哪些额外措施来阻止服务启动的任何建议?
欢迎使用 Debian / Ubuntu 特定的解决方案。
后缀服务使用一个初始化脚本,所以我猜他们是直接调用初始化脚本(而不是通过invoke-rc.d)。尝试创建一个名为
/lib/lsb/init-functions.d/00-policy-rc.d
: