从源代码构建和使用安装包有什么区别?

从源代码构建和使用安装包有什么区别?

我想知道:安装某些东西时,有一种简单的方法可以双击安装可执行文件,另一方面,有一种从源代码构建它的方法。

后者,下载源码包,确实很麻烦。

但这两种方法的根本区别是什么?

答案1

所有软件都是程式,也称为源码包。所以所有的源码包都需要建成首先,在您的系统上运行。

二进制包是已经构建的一个来源由专人在软件中提供通用功能和参数,以便大量用户安装和使用。

二进制包是易于安装
可能没有所有选项来自上游包。

因此,要从源代码安装,您需要自己构建源代码。这意味着您需要自己处理依赖关系。此外,您还需要了解该包的所有功能,以便您可以相应地构建它。

从源安装的优点:

  • 您可以安装最新版本并始终保持更新,无论是安全补丁还是新功能。
  • 允许您在安装时缩减功能以满足您的需求。
  • 同样,您可以添加一些二进制文件中可能未提供的功能。
  • 将其安装在您想要的位置。
  • 对于某些软件,您可以提供硬件特定信息以进行合适的安装。

简而言之安装来源给你重度定制选项同时需要花费很多精力,同时安装二进制更容易,但你可以无法定制如你所愿。

更新:在下面的评论中添加与安全相关的参数。是的,确实,从二进制安装时,您不具有源代码的完整性。但这取决于您从哪里获取二进制文件。有很多值得信赖的来源,您可以从中获取任何新项目的二进制文件,唯一的缺点是时间。更新的二进制文件甚至新项目可能需要一些时间才能出现在我们可信的存储库中。

最重要的是,关于软件安全,我想强调这个搞笑的事情贝尔实验室页面由...提供在下面的评论中。

答案2

源文件包含开发人员用他/她选择的任何语言(C、C++、Python 等)编写的原始代码,并且是通用的。它不特定于任何发行版,并且在许多情况下不特定于任何操作系统。

包(例如 RPM 或 DEB)是为您的特定发行版预先准备的二进制可执行文件(或解释脚本等)。准备编译源(添加任何必要的补丁等)、实际编译、创建发行版特定配置文件、创建安装前和安装后脚本等的任务都由软件包维护者为您完成。

换句话说,所有麻烦的工作都已在一个包中为您完成,而如果您选择从源代码安装,则需要您自己完成。

在几乎所有情况下使用包都更容易,因为:

  • 它们更容易安装
  • 它们是专门为与您的发行版配合使用而设计的
  • 有时,软件包维护者会修补它们以修复发行版特定的错误
  • 包管理器将卸载它们
  • 包管理器将为您管理所有依赖项
  • 包管理器将负责更新
  • 您不需要在系统上安装开发工具(编译器、make 等)

然而,有时打包的版本是旧版本,甚至更糟糕的是,没有打包版本;在这种情况下,你唯一的选择就是自己编译。如果这样做,您需要考虑以下事项:

  • 您需要在系统上安装所有开发人员工具
  • 您将负责检查更新并重新编译
  • 您需要确保安装了所有依赖项,包括dev软件包 - 可能有很多。
  • 如果它在您的发行版上未按预期工作,您可能需要调试问题

如果您愿意付出额外的努力,那么从源代码编译可能会给您带来以下好处:

  • 访问最新可用版本
  • 优化编译过程以提高性能/稳定性的选项
  • 享受!

请注意,虽然某些发行版的预构建软件包提供了可以安装和运行的二进制可执行文件(例如 RPM 和 DEB),但其他发行版提供的软件包只是自动执行编译过程。

Gentooebuilds就是一个例子 - 包基本上是包管理器的指令,描述如何编译和安装可执行文件。这具有传统包管理器的许多优点(自动更新、卸载等),同时仍然允许用户根据自己的喜好优化编译过程。

Arch Linux 有一个打包系统,其中主流包是二进制的,而许多额外的包是使用文件在系统上编译的PKGBUILD

答案3

除了其他答案之外,我还想补充一点:

如果你决定自己编译一个程序,你需要考虑编译不是你只做一次的事情。您可能需要订阅您决定编译的应用程序的开发邮件列表,并及时了解新版本,尤其是安全更新。

每次更新应用程序时,您都必须重新编译新版本,因此请记住,您每周都必须腾出一些时间。

如果您负担不起,最好让软件包维护人员为您完成这项工作。

答案4

一种两全其美的方法(最新的软件,简单的安装/卸载,包含大多数发行版调整和改编,可以针对本地要求进行优化),同时成本(必须自己保持最新状态,注意错误)和最后一刻的补丁,跟随开发,你要靠自己来解决错误修复和版本之间的不兼容性)无法缓解(很多),是构建你自己的包,从你的发行版的源包开始。即,从您的发行版中解压源代码包,用上游版本替换源代码,检查发行版的任何补丁或配置调整是否仍然适用,构建二进制包(确保您更改了打包内容的版本!)并安装那个。是的,这不仅仅是建造和安装的工作。

相关内容