这是一个典型问题关于何时使用套装软件以及何时自行构建和安装软件。
什么时候我应该从操作系统发行版提供的软件包安装软件,而不是自己从源代码构建和安装?什么时候从源代码构建更好?
答案1
除非有充分理由,否则您应该使用发行版的软件包。使用发行版的软件包可以为您带来重要的好处:
- 安装和卸载软件包并保持其更新的工作量更少。
- 打包系统将自动安装软件的依赖项,并保持它们保持更新。
- 发行版会自动为您提供安全更新,因此您不必跟踪它们或担心错过它们。
- 打包系统将以您的发行版首选的方式配置内容。例如,在基于 apt 的系统上,Apache 会在 /etc/apache2/*-enabled 中安装符号链接,并使用工具(a2enconf、a2enmod 等)来启用或禁用 Apache 的功能。虽然最初您可能需要花更多功夫来学习,但从长远来看,如果您使用发行版的原生工具和做事方式,您的生活将变得更轻松,您的配置也将更好地集成。
如果您需要使用比发行版所提供的软件更新的版本,或者启用必须编译的功能,您可能能够从社区存储库中找到更新或功能齐全的软件包版本。 Remi 的仓库是一个众所周知的例子,它提供了比 RHEL/CentOS 附带的版本更新得多的 PHP 版本。使用社区存储库可以获得操作系统存储库的许多优势,但风险在于作者会发布恶意软件,然后您可以以完全权限将这些恶意软件安装到您的系统中。您必须根据具体情况自行判断风险/回报。
如果这两种方法都不适合您,则需要从源代码进行编译。从源代码编译软件时,建议的方法是创建自己的二进制包。构建自己的包可以让你:
- 使用您的发行版的包管理系统进行分发、安装、依赖管理、报告、升级、降级和删除。
- 将构建工具和开发库限制到单个构建主机(而不是将它们安装在所有测试和生产服务器上)。
- 遵循常见的发布路径,首先在测试环境中部署包,然后在生产环境中部署同一个包。
由于这使得您是软件包维护者,您需要订阅相关的安全邮件列表,这样您就不会错过任何严重的错误和安全更新。
如果你最终安装了本地构建的软件而没有打包它,GNU 存储可以帮助保持其井然有序,并使其更容易干净地卸载。
答案2
我喜欢安德鲁的回答。
我想特别指出一点,以补充 Andrew 关于“更好的集成”的评论。如果您从源代码(未来项目的依赖项)安装应用程序,然后尝试从二进制文件(例如 deb 或 rpm 包)安装包,则该包可能无法识别已安装的依赖项。如果您从 RPM 或 DEB 包安装了初始依赖项应用程序,则未来的包会知道它已安装。使用相同的包方法(例如 yum、pip、rpm 等)是最佳实践。从源代码安装是另一种方法。因此,Andrew 所说的易用性是一个值得认真考虑的问题。
我想补充一点,“创建自己的二进制包”的优点是可以记录安装过程。从源文件安装没有记录的好处。