![从 Github 获取生产服务器软件源代码是不是一个坏主意](https://linux22.com/image/1362746/%E4%BB%8E%20Github%20%E8%8E%B7%E5%8F%96%E7%94%9F%E4%BA%A7%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BD%AF%E4%BB%B6%E6%BA%90%E4%BB%A3%E7%A0%81%E6%98%AF%E4%B8%8D%E6%98%AF%E4%B8%80%E4%B8%AA%E5%9D%8F%E4%B8%BB%E6%84%8F.png)
我通常使用apt-get
但apt-get
可能会过时。
似乎一个相当不错的解决方案可能是nginx
从中获取我的软件(例如)的源代码github
,然后每次构建它。
有什么原因可以证明这不是一个好主意吗?
在我看来,这意味着我每次都拥有最新的代码,包括最新的错误修复。
答案1
这完全取决于你的生产系统有多重要。如果下载版本的工作方式发生变化并导致系统出现问题,您能承受停机吗?最新版本的软件可能存在以前版本中没有的一个或多个错误。或者最新版本的副作用可能会影响您的系统 - 可能以一种难以识别和纠正的微妙方式。
以这种方式引入新软件是有风险的。是的,保持与最新软件同步是诱人的。反对策略不是更新软件可能会导致系统运行的是十年甚至二十年前的软件。这在实际生产系统中确实会发生。
将软件下载到与生产系统相同的测试系统,然后进行全套测试,然后再考虑将更改应用于生产,这是一种更安全的做法。自动化测试可以帮助减轻测试整个系统的负担。当然,这可能是一项艰巨的工作。这是在维护可靠服务的重要性与确保相关人员在应用更改后系统安全所需的资源之间的权衡。
答案2
首先你应该四处看看,你可能会找到一个有新版本的 ppa。这是最简单的方法。
如果没有的话:
从源代码构建和安装软件可能会导致系统上的库或二进制文件混乱,因为另一个包可能会覆盖某些内容,反之亦然。
为了避免这种情况,有两种解决方案:
- 仅构建源代码并在本地使用二进制文件,但这意味着如果您想正确处理它们,您必须为其编写自己的 init 或 upstart 服务。
- 我认为最好的方法是:使用 apt-get source 获取源代码的存储库版本,用新源代码覆盖它,然后以 debian 方式构建它。有一个关于软件包构建的相当不错的教程这里。唯一的缺点是,如果构建过程中发生某些变化,您也必须在 Debian 脚本中进行相应的更改。
您还应该考虑到,新版本可能依赖于比您的存储库更新的库。在这种情况下,您可能会找到较新版本的 ppa,或者您应该以相同的方式自己构建一个,但这可能是一个相当漫长的过程,需要遍历所有依赖项。
简而言之,如果你运气好,你可能会很快轻松地完成这一步。如果你运气不好,那么你最好使用你的发行版。