为什么存储库中有预编译的包?

为什么存储库中有预编译的包?

我喜欢 Linux & Co. 如何让用户从不同的存储库安装许多软件包。 AFAIK,它们还附带源码包,所以你可以自己编译它们。

但是,当您可以自己编译它们时,为什么还要费心“保留/提供”预编译的包呢?保留/提供它们的意图是什么?

是否可以配置Linux,只下载源包并让操作系统完成其余的工作? (就像预编译包安装一样?)

谢谢您的回答。

答案1

这是一种权衡:提供预构建包的发行版花费时间构建它们一次(在它们支持的所有配置中),然后它们的用户可以安装它们,而无需花费时间构建它们。用户按原样接受发行版的二进制文件。如果考虑一些较大发行版的软件包安装数量,则不需要到处重新编译所节省的时间是相当可观的。

有一些发行版提供源代码和构建它所需的基础设施,并依赖用户在本地构建所有内容;参见例如根图。这允许用户准确控制他们的包的构建方式。

如果您沿着这条路走下去,即使通过简化包构建可以节省时间,您也应该准备好花费大量时间来构建包。我不维护 Debian 中最复杂的软件包,但我的一个软件包在 64 位 x86 构建器上构建需要两个多小时, 和在较慢的架构上超过十二个小时

答案2

  1. 你的意思是全部人们有足够的 CPU/RAM/存储/时间/知识来编译包。不,事实并非如此,事实恰恰相反,大多数人绝对不想等待几个小时来编译某些东西。 Raspberry Pi 上的 Firefox 编译可能需要几周时间。这个可以吗?没有。

  2. 第二个原因是 Linux 发行版在受控的无恶意软件的正常运行环境中构建软件包,但无法保证最终用户能够正常运行。

  3. 该发行版的所有用户最终都运行完全相同的代码,这有助于报告错误和调试,这对于决定自己编译软件的用户来说可能并不正确。

  4. 许多现代 Linux 发行版都支持安全启动,这需要使用无法在最终用户之间分发的密钥对软件包进行签名,因为这意味着您的信任链完全被破坏。

欢迎您在 Arch Linux 中使用 Gentoo、LFS 或 AUR 存储库构建一切。实际上,大多数发行版都可以编译软件包,但以上三个发行版是在创建时考虑到编译的。

答案3

但是,当您可以自己编译它们时,为什么还要费心“保留/提供”预编译的包呢?保留/提供它们的意图是什么?

简单的经济学。即使在大型集群上,编译整个发行版的包也需要数周时间,并且会消耗大量能源并产生大量热量。

仅执行一次此操作比为每个用户一遍又一遍地执行此操作更有意义。

它还极大地增加了基本安装的大小和复杂性(从而增加了攻击面!!!),因为您必须包含每个软件包作为基本安装的一部分使用的每种编程语言的每个编译器。

很多很多年前,我真的很喜欢Linux 从头开始我编写了一个脚本,可以自动完成基本 LFS 系统的整个安装过程。它运行了大约两天,只需记住基本的 LFS 系统是非常基本系统。它包括内核、libc、shell、引导加载程序和一些基本工具……仅此而已。没有图形环境,没有网络浏览器,没有电子邮件程序,没有办公套件,没有多媒体播放器,没有Java环境,没有Python / Ruby / PHP / Node.js /无论您喜欢的编程语言是什么,没有游戏,没有照片编辑器,没有科学工具,而不是真正使计算机“有用”的所有东西。

其中一些非常大,需要很长时间才能编译。单个包裹可以轻松拿走编译,具体取决于您运行的计算机。 (想象一下您的路由器或智能手表。)

答案4

我在一个封闭的环境中工作。我们的一些系统被认为至关重要并被锁定。系统上不允许使用编译器和调试器。
这些软件包是从供应商处按原样安装的。
从源代码编译/安装将:

  1. 允许某人以其他人可能不知道的方式更改源代码,从而更改包的功能。
  2. 增加构建基线、推广和安装基线所需的时间。在 RTOS 环境中,需要最大限度地减少中断。
  3. 这些包始终以相同(标准)的方式编译。我们不需要担心编译器、配置文件等的变化。

    简而言之,它保证了一种简单、低资源的方式来确保每台计算机都有确切地相同的软件包按照供应商希望的安装方式安装。

相关内容