快速Debian服务器引导使用定制的.deb文件

我需要一种可靠的方式来引导新的Debian服务器与定制预build软件。 例如,我需要从具有优化选项的源代码,nginx,Percona服务器等构build特定版本的PHP。 目前对于每个新的服务器我手动做这真是无聊。

我开始思考如何自动化这个过程。 当然,有厨师,木偶,cfengine等解决scheme,但他们都看起来相当复杂和脆弱。 我需要一些非常简单和经过validation的东西。 由于我使用基于Debian的服务器,因此我正考虑将所有必需的软件打包到一个.deb文件中。 这样我所要做的只是安装它,并且需要所有的依赖关系,安assembly置文件,执行安装后的挂钩等等。

你怎么看待这件事? 这是个好主意吗?

( 强制性的链接,我写了我的经验 )

如果是我,我会把任务分开,让不同的工具处理每个阶段:

  • Debian安装程序,预先获得格式化的磁盘,裸操作系统加载,以及某种configurationpipe理软件的安装。
  • 让configurationpipe理软件负责其余的软件包安装和configuration。
  • 确保你想安装任何自定义软件的.deb版本, 把它们放在可访问的web,ftp或ssh站点上 ,并通过configurationpipe理软件安装。

老实说,我会重新考虑你在Puppet上的位置(也许是厨师,但是我不会推荐cfengine – 我在2007年看过它,因为我认为在Solaris上运行会更容易,但是当我看到Puppet相当容易build立,我把cfengine抛在一边)。

你不必把所有的东西都交给configurationpipe理软件,只是有道理的。

  • 如果你想要Puppet做的就是保持一个Apacheconfiguration文件与主副本同步,并且在你创build一个新版本的时候重新启动httpd进程,它就可以完成了。
  • 如果你想确保某个特定类中的所有服务器都安装了一组特定的软件包,并且能够在一个地方修改该软件包,并让所有这些服务器安装你添加到列表中的软件包,太。

如果你想优化最小的初始疼痛,那么

  • 为PHP,nginx等制作单独的包,并将它们放在一个.deb存储库中。 我看不出有什么理由要制造一个巨大的包装。
  • 使用Debian-installer和preseed在安装时安装基本操作系统和您的自定义软件包。

为了制作自己的deb文件 ,至less有两个选项。 两者都需要在/etc/apt/sources.list中使用适当的deb-src条目:

  1. 从您的发行版中取出当前版本的软件包,修改其构build过程,然后重新构build。
  2. 从testing或不稳定的当前版本,可选地修改其构build过程,然后重build。

对于选项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。