如何升级从源代码安装的软件?

我从源代码安装NGinx,因为从Ubuntu的软件包是相当古老的。 我想知道什么是最好的方法来升级这些types的安装?

我目前的工作stream程涉及

  • 下载新的来源
  • 使用相同的path安装软件。
  • 重新启动软件。

有些事告诉我这不是最好的路线。

build议?

你是对的,认为这不是最好的路线。 这条路线需要很多手动步骤,而且很容易出错,而且不能很好地扩展。

在使用Linux发行版时,应该尽可能地坚持包pipe理。

使用包pipe理的优点:

  • 依赖支持
  • 易于安装/拆卸
  • 软件清单
  • 升级/降级支持,包括处理configuration文件
  • 源代码包基本上logging了你的构build过程,并且一旦写完就自动为你创build。
  • 包裹签名
  • 和更多。

当你开始从源头开始工作时,你将失去所有这些强大的function,事情开始变得非常快速。

为了解决你的特定问题,你应该检查出ubuntu的后台仓库 ,也许他们有一个可以使用的NGinx的更新版本。

如果他们没有合适的版本,那么最好的解决scheme就是自己创build一个backported的ubuntu软件包。 这确实不是那么难,而且每次手动编译源代码都不是那么容易。 反向移植要求,基本上,从Ubuntu的源代码包,取代旧的upsteam tar.gz文件与最新的一个,你想要的,并重build包。

您可以使用本指南来帮助您恢复软件包。

我发现在不同的位置安装不同的版本非常方便,只需要符合你想要使用的版本,如:

lrwxr-xr-x 1 root wheel 7B Jun 7 18:26 /usr/local/foo -> foo-1.0 drwxr-xr-x 2 root wheel 512B Jun 7 18:26 /usr/local/foo-1.0 drwxr-xr-x 2 root wheel 512B Jun 7 18:26 /usr/local/foo-1.1 

好处是:

  • 在升级期间将服务停机时间降至最低
  • 容易回滚
  • 你仍然可以使用相同的path,比如/usr/local/foo/bin/bar

当然,您仍然需要重新应用您对之前版本所做的任何configuration更改,但是您可以使用一些版本控制系统(RCS / SVN / GIT)或configurationpipe理工具(如Bcfg2) 。

而且,当然这只适用于less数几个主机。

下一次…如何编译成* .rpm或* .deb?

如果你打算在一台机器上安装它,那么每次从源代码安装都是问题最好的方法。 如果你打算在几台机器上安装这个软件,并且要确保它是一致的,那么可能值得学习如何制作Debian软件包。 你可以使用Ubuntu中的包装作为基础。

没有一个好方法。 有效的包pipe理创build的原因是为了解决这个问题。 升级和卸载源代码编译的东西很难。

我同意汤姆和大卫。

如果这是一次性案例,那么从源头重新编译可能是您最好的select。 如果它位于一系列机器上,那么现在是转向受支持的软件包pipe理的时候了。

恐怕这是唯一的方法。 如果你有更多的服务器需要维护 – 考虑在你编译的地方有独立的testing环境,并可能打包你的编译结果。

这将稍微标准化您的设置,并在多台服务器上轻松部署。 你也不需要生产机器上的gcc [很多人会认为这是安全的好处]。