如何使用Puppet从源代码安装软件包?

我想安装没有二进制包(deb,rpm)的源代码包。

如果该模块已经安装在该机器上,我该如何停止模块的执行?

我在用着:

Exec { creates => "${zookeeper_path}/zookeeper/bin/zkServer.sh" } 

然而所有其他的块无论如何都被执行。 什么是最好的方法? 检查几个文件的存在? 当傀儡检查更改时,我不想解开和重新编译所有模块。

编辑:

安装过程由几个步骤组成:

  1. tar.gz
  2. 解压缩包
  3. 创build几个configuration文件
  4. 创build服务
  5. 确保服务正在运行

尝试了几个死路,从@Mike Renfro的评论,我想出了以下步骤(随时改进):

  1. 不要使用Puppet从源代码安装软件包(这需要太长的时间,带来太多的问题)

  2. 总是创build二进制包。 它可以很容易地重新分配和testing。

  3. 设置你自己的仓库 – 对于Debian来说,一个好的select是rebupro ,文档似乎很糟糕,但是有一个Puppet模块来安装: puppet-reprepro 。 添加新软件包相当简单:

    $ reprepro -Vb . includedeb squeeze ~/packages/my_package.deb

  4. 用fpm创build新的包。 构build一个包的过程非常简单,比在Puppet脚本中编写包容易得多。

  5. 安装软件包只需:

    package { "leiningen": ensure => present }

  6. 您可以简单地获取仍在testing版本中的软件包,并将其与本地存储库进行部署。

  7. 使用hiera进行特定于机器的configuration,在清单中,对于某些任务(比如Web服务器,数据库服务器等),通常只能使用可重用的模板。