使Linux ubuntu服务器保持最新状态的最佳做法是什么(构建软件包,dist-upgrade,alt仓库...)


8

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

此外,Karmic刚刚达到使用寿命。

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

所以我看到的选项是:

  1. 购买新机器,从头开始安装,迁移
  2. 发行升级
  3. 使用其他存储库(launchpad / ppa / backport / pinning
  4. 建立你自己的

1.的缺点非常明显。

不过,我不敢做dist-upgrade的路径,因为对于生产服务器而言,停机和可能的灾难性后果是无法预测的,并且目前主要是在重建我自己所需的软件包。但是我确定我可能会错过一些。

对我来说,目前尚不清楚使用ubuntu反向端口会带来哪些风险(稳定性/兼容性),此外,对于9.10而言,官方也未提供任何支持。Launchpad是个人构建的,类似的问题-这比编译自己的脚本好多少。

构建软件包看起来不错,但是:1.有时我在重现正确的./configure选项以重用我现有的配置文件时遇到麻烦。1.我确信现在有很多软件包和依赖项已经过时了并且可能是来源错误

最后...最近发行的“旧”软件包呢?我想没有其他办法可以自己重建它们了吗?2.和4.的组合最终是最佳途径吗?

是否有最佳方法的客观共识,或者为什么我的一些选择可以/不可以?

如果确实没有,我将接受这个问题在创建无尽线程之前已解决!


1
出于某种原因,您当前遇到的是服务器仅应使用LTS版本。在回答您的问题之前,在您无法执行#1或#2之前,您将陷入#4的困境。我看到#3经常开始失败,这是因为没有可用的依赖关系而花费了更多的时间。
daemonofchaos 2011年

确实是@KayakJim,尽管我们当时应该已经弄清楚了-但是当服务器负载较低时,维护是可以接受的,我们认为远远不够。经验教训(希望如此)。
斯特凡诺

Answers:


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

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

$ dpkg --get-selections > myinstall.txt

和您的debconf数据库:

$ debconf-get-selections > debconf.txt # from the debconf-utils package

需要注意的是,由于您当前使用的是Karmic,因此升级到Lucid(LTS版本)可能不会太猛烈,Lucid是LTS版本,直到2015年,主要服务器软件包仍受支持。这将为您留出足够的时间来为将来设置可行的自动化安装。

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


当然,我们没有考虑过puppet&co。当时。但是的确,您确实提出了一个很好的观点,那就是,如果我们走重新安装的道路,最好准备一个易于复制的安装。PS。不幸的是,“尤其是如果您只使用官方软件包”,当然不会!
斯特凡诺

然后,您可能要采取的第一步是识别非官方程序包。maintenance-check可以帮助您(请参阅我的编辑)。
ℝaphink

针对其他技巧的选定答案,包括使用conf管理系统和维护检查以及有关PPA的技巧。不过,在研究最新的存储库后,我才意识到,软件包并非总是最新的。即使在11.04中,nginx版本也很旧(0.8.54-4),在这种发行版本中,它们永远不会移至1.0.x。对于这些情况有什么建议吗?
斯特凡诺

1
@Stefano:Ubuntu使用与Debian相同的策略,即在发行后(确切地说是冻结功能之后),软件不会在主存储库中升级。实际上,这可能会导致软件版本仍旧保持不变(特别是如果软件发布速度很快)。您可以使用反向端口获取新版本,但是您可能会失去稳定性和安全性更新。没有完美的解决方案,除非您愿意维护自己的反向端口,正如我之前所说,这是非常昂贵的。
ℝaphink

2

如果服务器没有暴露在世间,并且您完全信任用户(通常这不是一个好主意),那么如果服务器正常运行,则可以保留它。

如果它以任何方式暴露于外界,和/或您接受合法用户以非法方式使用它的想法,那么您绝对需要对已安装的软件进行修复和修补。

在这种情况下,您有两个选择:

  1. 运行受支持的发行版,并获取软件更新,或者

  2. 将所有修复程序向后移植到不受支持的发行版,坦率地说,这似乎不可行。

我不是Ubuntu用户,所以我无法评论通过选项3获得的补丁程序的完整性,但是如果您有任何疑问,我认为您将不会完全了解。

最好的解决方案是迁移到Ubuntu的LTS版本,这将在一段时间内为您提供给定软件包版本的支持。随着时间的流逝,某些软件包将过时,但是您的环境将具有安全补丁,并且将保持稳定(没有软件包版本增加)。根据我的经验,已知工作环境的稳定性通常比新功能更有价值。

看来,您目前的职位是无法维持的,您必须搬家。唯一安全的方法是获得第二台计算机(或虚拟机)并测试迁移,直到您具有可重复的成功过程,然后将其应用于生产计算机。如果您使用备份进行测试迁移,那么您也将有一个很好的机会来测试备份过程。


谢谢@ Pawel-Brodacki。服务器肯定是暴露的!我了解您对功能的稳定性的观点。问题是,稳定性通常伴随主要版本步骤而来。例如。nginx 1.0。*系列甚至比最新的natty中包含的0.8系列更稳定。有什么建议吗?
斯特凡诺

1
如果目前足够好,则适用“如果没有损坏,请不要修复”规则。之后,这是业务计算:增加了稳定性,比您自己维护一套软件包要节省更多。如果只是nginx或nginx和少量库,则可以自己进行编译,测试和部署。但是,在这种情况下,应谨慎跟踪软件包的开发以快速关闭所有发现的错误。
帕维尔Brodacki

2

唯一真正的前进方式是发行版升级。我可以理解您对此感到紧张,因为到目前为止,您将要提前发布多个版本(11.04刚刚发布)。

我建议对本机中的驱动器进行克隆,然后使用单独的计算机来运行克隆,然后使用该计算机进行一系列测试升级。记录所有遇到的问题,然后重复进行,直到您对所有问题都有明确的过程为止。然后将此应用到您的实时服务器。

如果您无法承受任何停机时间,那么迁移是您的唯一出路。忘记固定和反向移植,那只会使您在有限的时间内存活下来。而“自己动手”选项甚至都不值得考虑。仅我的2便士的价值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.