从包安装软件,还是从源代码构建?

And*_*man 6 package-management installation

这是一个关于何时使用打包软件以及何时自行构建和安装的规范问题

我什么时候应该从我的操作系统发行版提供的软件包中安装软件,而不是自己从源代码构建和安装它?什么时候从源代码构建更好?

And*_*man 11

你应该使用你的发行版的包,除非你有充分的理由不这样做。使用发行版的软件包可以为您带来重要的好处:

  • 安装和卸载软件包并使其保持最新状态的工作量较少。
  • 打包系统将自动安装软件的依赖项,并使其保持最新状态。
  • 发行版会自动为您提供安全更新,因此您不必跟踪它们或担心错过它们。
  • 打包系统将以您发行版的首选方式配置内容。例如,在基于 apt 的系统上,Apache 在 /etc/apache2/*-enabled 中安装了符号链接,以及工具(a2enconf、a2enmod、...)使用它们来启用或禁用 Apache 的功能。虽然最初这可能需要你学习更多的工作,但从长远来看,如果你使用发行版的原生工具和做事方式,你的生活会更轻松,配置也会更好地集成。

如果您需要使用比您的发行版提供的更新版本的某些软件,或者启用必须编译的功能,您可以从社区存储库中找到该软件包的更多最新版本或功能强大的版本。 Remi 的 repos就是一个众所周知的例子,它提供了比 RHEL/CentOS 附带的 PHP 版本更多的最新版本。使用社区存储库可以获得操作系统存储库的许多优点,但冒着作者发布恶意软件的风险,然后您以完全权限将其安装到您的系统上。您必须根据具体情况自行做出风险/回报判断。

如果这些替代方案都不适合您,您将需要从源代码编译。从源代码编译软件时,推荐的路线是创建自己的二进制包。构建您自己的软件包允许您:

  • 使用您的发行版的包管理系统进行分发、安装、依赖管理、报告、升级、降级和删除。
  • 将您的构建工具和开发库限制在单个构建主机上(而不是将它们安装在所有测试和生产服务器上)。
  • 遵循先在测试环境中部署包的通用发布路径,然后再在生产环境中部署相同的包。

由于这使您成为包维护者,您需要订阅相关的安全邮件列表,这样您就不会错过任何关键错误和安全更新。

如果您最终在没有打包的情况下安装了本地构建的软件,GNU stow可以帮助保持井井有条,并使卸载更容易。