使 linux ubuntu 服务器保持最新状态的最佳实践是什么(构建包、dist-upgrade、alt 存储库...)

Ste*_*ano 8 linux ubuntu update ubuntu-9.10 stability

我们正在运行基于Ubuntu 9.10 Karmic Koala的生产服务器,内核几乎是最新的 (2.6.38.2-grsec-xxxx-grs-ipv6-64) 但karmic 包存储库现在已经过时了,例如。Nginx 是 0.7.62 - 真的有问题 - 而最新的稳定版是 1.0.x!

此外,业力刚刚走到了生命的尽头。

这个问题:保持 UNIX 包最新的最佳实践?看起来很相似,但实际上只包含一些关于包管理器的建议;根本不是我需要的!

所以我看到的选项是:

  1. 获得一台新机器,从头开始安装,迁移
  2. 分销升级
  3. 使用不同的存储库(launchpad/ppa / backport / pinning
  4. 建立你自己的

#1 的缺点非常明显。

我不敢做一个 dist-upgrade 路径,因为停机时间和可能的灾难性后果对于生产服务器是不可能预测的,目前主要是重新构建我自己需要的包。但我确定我可能会遗漏一些。

我不太清楚使用 Ubuntu 向后移植的风险(稳定性/兼容性)是什么,此外,9.10 不再正式提供任何内容。Launchpad 是单独构建的,类似的问题 - 这比编译我自己的好多少?

构建包似乎很好,但是:

  1. 有时我无法重现正确的 ./configure 选项以重新使用我现有的配置文件
  2. 我确信有大量的包和依赖项现在已经过时并且可能是错误的来源

最后……最近发行版中的“旧”包怎么样?我想除了自己重新构建它们之外没有其他方法吗?2 和 4 的组合最终是最佳路径吗?

关于什么是最好的方法,或者为什么我的一些选择是好的/不好的原因,是否有任何客观的共识?

如果真的没有,我会接受在创建无限线程之前问题已关闭!

rap*_*ink 4

维护自己的发行版是一项艰巨的工作。即使你维护向后移植,你很快就会被需要修复的安全问题压垮,并且必须拉低级库来不断更新你的软件,这可能会破坏其他东西(我维护运行 6 年历史的发行版的服务器,它是不好玩)。

升级通常是一个很好的解决方案。do-release-upgrade制作精良,您应该能够毫无问题地升级(特别是如果您只使用官方软件包)。

我最喜欢的解决方案可能是重新安装路径。更具体地说,您的服务器应该使用配置管理系统(例如 Puppet、Cfengine 或 Chef)进行管理。如果您的所有配置/包需求都是使用此类工具指定的,并且您的数据在单独的分区上是安全的,那么快速重新安装就会容易得多。您只需安装新的发行版而不擦除数据分区,然后运行配置管理工具来重置您的包/配置。我相信这是最干净的方法,特别是如果您有多个服务器需要管理。

如果您使用非官方软件包,您可能需要在升级/重新安装之前识别它们。Maintenance-check可以帮助您识别非 Ubuntu 官方维护的软件包:

$ bzr branch lp:ubuntu-maintenance-check
$ cd ubuntu-maintenance-check
$ ./maintenance-check -f n
Run Code Online (Sandbox Code Playgroud)

如果要重新安装,还可以导出已安装的软件包列表:

$ dpkg --get-selections > myinstall.txt
Run Code Online (Sandbox Code Playgroud)

和你的 debconf 数据库:

$ debconf-get-selections > debconf.txt # from the debconf-utils package
Run Code Online (Sandbox Code Playgroud)

请注意,由于您当前正在使用 Karmic,因此升级到 Lucid 可能不会太暴力,这是一个 LTS 版本,直到 2015 年主服务器软件包仍受支持。这将为您留下足够的时间来为将来设置可行的自动化安装。

当您询问 Launchpad 软件包时,我想您指的是 PPA。有大量不同的 PPA。有些是实验性的,有些是稳定的。有些是由 Ubuntu 官方开发人员维护的,有些是由几乎不知道如何正确打包的人维护的。一般来说,很难说您在 PPA 上找到的软件包是否好,没有一般规则。在这种情况下,最好的提示可能是查看购电协议的所有者,以了解其包裹的可能质量。