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

这是关于何时使用打包软件以及何时自行构build和安装的典型问题 。

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

除非你有充分的理由不要使用你的发行包。 使用发行版的软件包给了你重要的好处:

  • 安装和卸载软件包的工作量较less,并保持最新。
  • 包装系统将自动安装软件的依赖关系,并保持最新状态。
  • 安全更新是由发行自动为您提供的,所以您不必跟踪他们或担心错过。
  • 包装系统将按照您的发行版的首选方式进行configuration。 例如,在基于apt的系统上,Apache安装了启用了/ etc / apache2 / *的符号链接,以及用于启用或禁用Apachefunction的工具(a2enconf,a2enmod …)。 虽然最初可能需要更多的工作来学习,但从长远来看,如果您使用发行版的本地工具和方式,您的生活将会变得更加简单,您的configuration将会更好地整合。

如果您需要使用发行版提供的某个软件的更新版本,或启用必须编译的function,则可以从社区存储库中find更多最新版本或function更强的软件包。 Remi的回购版是一个众所周知的例子,除了那些随RHEL / CentOS提供的版本之外,还提供更多最新版本的PHP。 使用社区存储库可以获得操作系统回购许可的许多优势,但冒着作者释放恶意软件的风险,您随后可以以完全权限将其安装到您的系统上。 您必须根据具体情况自行作出风险/回报的判断。

如果这两个选项都不适合你,你将需要从源代码编译。 从源代码编译软件时,推荐的路线是创build自己的二进制包 。 build立你自己的软件包可以让你:

  • 与您的发行版的软件包pipe理系统一起使用,以进行分发,安装,依赖pipe理,报告,升级,降级和删除。
  • 将构build工具和开发库限制为单个构build主机(而不是将其安装在所有testing和生产服务器上)。
  • 遵循首先在testing环境中部署软件包的常见发行path,然后在生产环境中部署相同的软件包。

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

如果您最终安装本地构build的软件而不打包它, GNU Stow可以帮助保持良好的组织,并使其更易于清理卸载。

我喜欢安德鲁的回应。

我想指出一个具体的补充,以安德鲁的评论“更好的整合”。 如果从源(未来项目的依赖项)安装应用程序,然后尝试从二进制文件(例如deb或rpm包)安装软件包,则该软件包可能无法识别是否安装了依赖项。 如果您从RPM或DEB软件包安装了初始依赖项应用程序,未来的软件包将知道它已经安装。 使用相同的包装方法(例如yum,pip,rpm等)是最佳实践。 从源代码安装是另一种方法。 所以安德鲁所说的安逸是一个严肃的考虑。

我想补充一点,“创build自己的二进制包”具有logging安装过程的好处。 从源文件安装没有logging的好处。