我正在尝试使用 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 特定的解决方案。
答案1
Postfix 服务使用 init 脚本,因此我猜测他们直接调用 init 脚本(而不是通过invoke-rc.d)。尝试创建一个名为的文件/lib/lsb/init-functions.d/00-policy-rc.d
:
if test -e /usr/sbin/policy-rc.d; then
/usr/sbin/policy-rc.d || exit $?
fi