我需要一种可靠的方式来引导新的Debian服务器与定制预build软件。 例如,我需要从具有优化选项的源代码,nginx,Percona服务器等构build特定版本的PHP。 目前对于每个新的服务器我手动做这真是无聊。
我开始思考如何自动化这个过程。 当然,有厨师,木偶,cfengine等解决scheme,但他们都看起来相当复杂和脆弱。 我需要一些非常简单和经过validation的东西。 由于我使用基于Debian的服务器,因此我正考虑将所有必需的软件打包到一个.deb文件中。 这样我所要做的只是安装它,并且需要所有的依赖关系,安assembly置文件,执行安装后的挂钩等等。
你怎么看待这件事? 这是个好主意吗?
( 强制性的链接,我写了我的经验 )
如果是我,我会把任务分开,让不同的工具处理每个阶段:
老实说,我会重新考虑你在Puppet上的位置(也许是厨师,但是我不会推荐cfengine – 我在2007年看过它,因为我认为在Solaris上运行会更容易,但是当我看到Puppet相当容易build立,我把cfengine抛在一边)。
你不必把所有的东西都交给configurationpipe理软件,只是有道理的。
如果你想优化最小的初始疼痛,那么
为了制作自己的deb文件 ,至less有两个选项。 两者都需要在/etc/apt/sources.list中使用适当的deb-src条目:
对于选项1,您应该可以执行apt-get build-dep somepackage; apt-get source somepackage apt-get build-dep somepackage; apt-get source somepackage将构build依赖项和源代码发布到当前版本的任何包中。 进入包的源文件夹,并编辑你的configuration更改debian/rules 。 编辑debian/changelog使版本号更高,并添加你的笔记。 然后运行dpkg-buildpackage来构build新的二进制文件和源代码。
对于选项2,它基本上是相同的过程,除了构build依赖关系可能更复杂以满足。 testing或不稳定可能有更新版本的Boost,glibc或其他。 有时候一个包会依赖于你没有的新版本。 有时你可以从debian/control删除版本号的要求,并没有任何问题。 如果这不起作用,那么你必须recursion地将构build依赖关系移回到你的版本。
还有一个机会就是你的软件包已经在Debian的backports仓库中了,在这种情况下,你可以得到一个新版本的软件包,可以在你的当前版本上安装(或修改和重build)。 例如,Debian lenny有nginx 0.6.32,但是lenny-backports有0.7.67。 挤压有0.7.67,但是没有挤压backports的nginx。