升级到最新的Tomcat / JRE或坚持LTS提供的?

使用运行Tomcat 7.0.26的Ubuntu 12.04运行服务器。 我应该关心更新tomcat安装到最新的7.0.42版本还是应该坚持提供什么? 如果我坚持,那么我是不是容易受到7.0.26版本的威胁和错误? 我被build议总是使用最新的小版本的东西,如JRE 7,Tomcat 7等,这不是在这里保持良好?

不要使用与Linux发行版一起分发的关键任务工具。 他们往往滞后几个版本,可能不会按照您的期望configuration。 例如,Python总是在名为site-packages的目录中安装附加软件包,Debian和Ubuntu发行版除外。

有两种方法可以处理这些关键任务组件,即对您的业务至关重要的事情,以及针对特定服务器的目标。 第一个或多或less是手动的,但是可以用bash脚本自动化。 在这个变种中,你从什么发行版本调用“upstream”下载了软件包。 这意味着你从Oracle站点获得JDK,从Apache站点获得Tomcat等等。 这也意味着你正在得到原始包的格式,这可能是一个tarball。 即使在上游提供了一个.deb的情况下,如果它指定了你不想从Ubuntu获得的依赖,但是却想控制自己,那么你可能无法使用它。 在Oracle Java的情况下,我只需tar zxvf压缩包,将生成的目录mv到/ opt,并将条目添加到/etc/bash.bashrc以获得JAVA_HOME和PATHvariables。 大多数Apache工具(如Tomcat)也是如此。 理想情况下,请不要从外部Internet站点wget(或curl)软件包,而是将其下载一次,并将其放在内部http服务器上以部署到您的服务器。

另一种select是以Debian格式设置自己的本地回购,并将关键任务包添加到其中。 然后将其添加到您的资源中,并将首选项configuration为高于LTS回购,以便您的包覆盖LTS。 要做到这一点,你必须下载压缩包并构build你自己的.deb包,包括定义依赖关系,这样你自己的依赖包就可以进入了。这对于大型的安装来说比较好,比如超过50个服务器,否则就不行除了写得很好的bash脚本外,还可以省下很多功夫。

现在,当安全更新出现时,获取新的tarball的副本,将其放到你的http服务器上,并更改你的bash脚本(或者构build新的.deb),然后在所有服务器上通过ssh远程运行bash脚本使用SaltStack或Ansible来帮助这个)。

至于总是使用最新的次要版本,我不会build议。 当新版本发布时,您应该始终阅读发行说明,决定这些更改是否对您有用或必要,在testing服务器上运行一些内部testing,然后才能升级。 如果这些变化很小,或者对您的影响最小,那么落后几个版本就可以了。 重要的是,你控制整个过程,你做出决定,权衡你的情况,然后继续升级你的时间表。 有时威胁会要求你现在升级,有时候不要; 阅读发行说明,了解什么时候

别忘了,你没有运行Ubuntu或Centos。 你正在运行Linux。 Ubuntu和Centos可以使一些任务变得更容易,特别是在build立一个新的服务器的时候,但是在它下面,99%或者更多的系统是标准的Linux,而且是无限延展的。

请联系负责在Tomcat中运行的应用程序的应用程序供应商/开发人员。 虽然Ubuntu存储库可能是最好的select…供应商可能(并经常)有特定的Java版本要求。

如果你是tomcat实例上所有webapps的开发者,这个select的责任在你手中。

留在Ubuntu提供的东西,假设它仍然提供安全更新。 如果它是生命的尽头,则迁移到较新的安装。

更新:我无法评论,所以我反驳狄龙先生的回答。 Linux供应商提供的软件版本,比如Ubuntu,可能会比较老,但与软件开发人员发布的最新版本相比,它们都经过了充分的testing和validation。 不得不构build自己的应用程序堆栈,testing并部署它是昂贵且不必要的。

在阅读答案时,我认为有两件至关重要的事情是缺失的。

  1. 没有一个开放的Linux供应商会对像Tomcat这样的软件的兼容性进行广泛的检查,它的利基和多样性也是如此。 我认为只有红帽才会用JBoss来完成整个堆栈,只有在使用企业支持和版本时才能保证。

  2. 在Tomcat上运行的大多数应用程序都是自定义的,否则他们已经提供了自己的内部应用程序服务器(如Jira,Confluence,Jenkins)。 而对于大多数定制应用程序唯一的答案是testing它。

回答这个问题。

通常坚持最新的小版本是有道理的,但在合理的范围内。 所以只有当你看到一个影响到你的bug或者你的域中的安全相关的时候才升级(如果它修复了一个安全错误,例如你不需要升级的Applets)。 您也可以直接从Linux发行版中执行此操作,对于Oracle JDK和Tomcat,有一些PPA存储库提供了Ubuntu更新周期之外的最新版本。

话虽如此,取决于你的应用程序,小升级也可能会破坏事情。 特别是当你进入reflection和字节代码生成时,你必须小心(这也适用于像Hibernate这样的库)。 当升级小版本的Sun JDK时,我们遇到了一些问题,因为库有新字节码的问题。

但那是什么testing。 所以只要确保你的开发者和构build环境使用你在服务​​器上的相同版本,否则你迟早会破坏的。