我们使用CentOS或EPEL repos中没有的
Ruby,Collectd,Ant,Java(以及更多)版本.到目前为止,我们安装这些的策略一直是一种黑客行为:
原文链接:https://www.f2er.com/centos/373578.html>为每个包写一个(版本控制的)脚本,将源或二进制文件从主机站点下载到Puppet主机上,并在必要时编译源代码;必要时重新打包到gzipped tarball中
>使用Puppet文件服务器将二进制文件分发到我们的服务器,Puppet显示解压缩/usr/local(或任何地方)的tar包
编写脚本可能很麻烦,如果我们依赖下载的其中一个站点更改了API,则必须更新它们.此外,软件在每个环境中都是单独编译的,这看起来很浪费,并且可能导致缺少编译时依赖性的问题(例如,Ruby:需要’readline’或者需要’yaml’可能在某些环境中工作但在其他环境中不能工作)
所以,我可以想到另外两个选择:
>只需将自定义构建的第三方二进制文件签入到subversion中,然后将其与其余的Puppet代码一起分发.我担心它会严重影响结账和Puppet代码推送的性能;我们正在寻找近800MB(并且还在增长)的第三方代码.另外,将Java的多个版本和体系结构并排检查到版本控制中感觉是错误的.
>不要版本控制二进制文件或编写下载脚本 – 当我们决定升级Ruby时,在开发盒上编译它并在我们决定升级时手动将新包上传到我们所有的Puppet主服务器.除了,如果包裹被清除怎么办?或者在不同的主人身上变得不同步?现在,我们可以从头开始轻松地重新生成所有自定义包.
三个选项中哪一个更好?人们通常如何使用Puppet管理自定义编译/重新打包的第三方软件?如果您创建本地Yum存储库,那么版本控制用于创建RPM的过程吗?如果您的百胜回购被删除会发生什么?