![使用自定义的 .deb 文件快速启动 Debian 服务器](https://linux22.com/image/547727/%E4%BD%BF%E7%94%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%20.deb%20%E6%96%87%E4%BB%B6%E5%BF%AB%E9%80%9F%E5%90%AF%E5%8A%A8%20Debian%20%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我需要一种可靠的方法来使用自定义预构建软件引导新的 Debian 服务器。例如,我需要从具有优化选项的源构建特定版本的 PHP、nginx、Percona 服务器等。目前,对于每个新服务器,我都手动执行此操作,这真的很无聊。
我开始思考如何自动化这个过程。当然,有 Chef、Puppet、cfengine 等解决方案,但在我看来它们都非常复杂和脆弱。我需要一些非常简单且经过验证的东西。由于我使用的是基于 Debian 的服务器,所以我正在考虑将所有必需的软件打包到一个 .deb 文件中。这样,我所要做的就是安装它,并需要所有依赖项、设置配置文件、执行安装后挂钩等。
你觉得怎么样?这是个好主意吗?
答案1
如果是我的话,我会拆分任务并让不同的工具处理每个阶段:
- 预装 Debian 安装程序格式化磁盘、加载裸操作系统并安装某种配置管理软件。
- 让配置管理软件负责其余的软件包安装和配置。
- 确保你已安装所有自定义软件的 .deb 版本,将它们放在可访问的 Web、FTP 或 SSH 站点上,并通过配置管理软件安装它们。
老实说,我会重新考虑你对 Puppet 的看法(也许还有 Chef,但我不推荐 cfengine——我在 2007 年就研究过它,因为我认为它在 Solaris 上运行起来更容易。但是当我看到 Puppet 相对容易设置时,我就把 cfengine 扔到一边了)。
你不必亲手一切转到配置管理软件,这才有意义。
- 如果您希望 Puppet 执行的只是使 Apache 配置文件与主副本保持同步,并在每次创建新版本时重新启动 httpd 进程,那么它就会执行此操作。
- 如果您想确保特定类别的所有服务器都安装了一组特定的软件包,并且能够在一个地方更改该集合并让所有这些服务器安装您添加到列表中的软件包,它也会这样做。
如果你想在最小的初始痛苦上进行优化,那么
- 为 PHP、nginx 等制作单独的包,并将它们放在 .deb 存储库中。我看不出制作一个大包有什么理由。
- 使用带有 preseed 的 Debian-installer 在安装时安装基本操作系统和自定义软件包。
制作你自己的 deb 文件,至少有两个选项。两者都需要 /etc/apt/sources.list 中的相应 deb-src 条目:
- 从您的发布中获取软件包的当前版本,修改其构建过程,然后重建。
- 从测试版或不稳定版中获取当前版本,可选择修改其构建过程,然后重建。
对于选项 1,您应该能够apt-get build-dep somepackage; apt-get source somepackage
获取当前版本中任何软件包的构建依赖项和源。进入软件包的源文件夹,然后debian/rules
根据配置更改进行编辑。编辑debian/changelog
以提高版本号并添加您的注释。然后运行dpkg-buildpackage
以构建新的二进制文件和源。
对于选项 2,它基本上是相同的过程,只是构建依赖项可能更难满足。测试版或不稳定版可能有较新版本的 Boost、glibc 或其他版本。有时包会依赖于您没有的较新版本。有时您可以删除版本号要求debian/control
并顺利构建。如果这不起作用,那么您必须递归地将构建依赖项移植回您的版本。
还有一种可能是,您的软件包已经在 Debian 的 backports 存储库中,在这种情况下,您将获得一个较新版本的软件包,可以在当前版本上安装(或修改和重建)。例如,Debian lenny 有 nginx 0.6.32,但 lenny-backports 有 0.7.67。Squeeze 有 0.7.67,但 squeeze-backports 根本没有 nginx。