我从源代码安装 NGinx,因为 ubuntu 存储库中的软件包相当旧。我想知道升级这些类型的安装的最佳方法是什么?
我当前的工作流程涉及。
- 下载新源代码
- 使用相同的路径安装软件。
- 重新启动软件。
有什么东西告诉我这不是最好的路线。
有什么建议吗?
答案1
您认为这不是最佳途径,这是对的。此途径需要许多手动步骤,并且非常容易出错,并且扩展性不佳。
当使用 Linux 发行版时,您应该尽可能坚持包管理。
使用包管理的优点:
- 依赖项支持
- 易于安装/拆卸
- 软件清单
- 升级/降级支持,包括配置文件的处理
- 源包基本上记录了您的构建过程,并在编写完成后为您实现自动化。
- 程序包签名Package signature
- 和更多。
当您开始仅从源代码工作时,您会失去所有这些强大的功能,而且事情很快就会变得混乱。
为了解决您的具体问题,您应该查看ubuntu backports 存储库,也许他们有一个 NGinx 的更新版本供您使用。
如果他们没有合适的版本,那么最好的解决方案就是自己创建一个反向移植的 ubuntu 包。这真的不是那么难,而且比每次手动从源代码编译工作量要少。反向移植基本上需要从 ubuntu 获取源包,用您想要的最新文件替换旧的 upsteam tar.gz 文件,然后重建包。
您可以使用本指南以帮助您反向移植该软件包。
答案2
我发现在不同的位置安装不同的版本并只需符号链接到您想要使用的版本非常方便,例如:
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
其好处有:
- 最大限度地减少升级期间的服务停机时间
- 轻松回滚
- 你仍然可以使用相同的 o' 路径,例如
/usr/local/foo/bin/bar
当然,你仍然需要重新应用对前一个版本所做的任何配置更改,但为此,你可以使用一些版本控制系统(RCS/SVN/GIT)或配置管理工具,如乙型肝炎病毒。
当然,这只适合少数或更少的主机。
答案3
下次...将其编译成 *.rpm 或 *.deb 怎么样?
答案4
没有很好的办法。创建有效的包管理的原因就是为了解决这个问题。升级和卸载源代码编译的东西很难。
我同意汤姆和大卫的观点。
如果这是个例,那么从源代码重新编译可能是最好的选择。如果是在多台机器上,那么肯定是时候转向支持的包管理了。