AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 709407
Accepted
Ben
Ben
Asked: 2022-07-12 03:47:12 +0800 CST2022-07-12 03:47:12 +0800 CST 2022-07-12 03:47:12 +0800 CST

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

  • 772

我喜欢(方式)Linux & Co. 如何让用户从不同的存储库安装许多包。AFAIK,它们也带有源包,所以你可以自己编译它们。

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

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

谢谢您的回答。

linux repository
  • 5 5 个回答
  • 4226 Views

5 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2022-07-12T04:19:53+08:002022-07-12T04:19:53+08:00

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

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

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

    • 57
  2. Artem S. Tashkinov
    2022-07-12T05:24:06+08:002022-07-12T05:24:06+08:00
    1. 你暗示所有人都有足够的 CPU/RAM/存储/时间/知识来编译包。不,不是这样,相反是正确的,绝对大多数人不想等待例如几个小时来编译一些东西。Raspberry Pi 上的 Firefox 编译可能需要数周时间。这个可以吗?没有。

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

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

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

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

    • 26
  3. Jörg W Mittag
    2022-07-12T12:57:05+08:002022-07-12T12:57:05+08:00

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

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

    只做一次而不是一遍又一遍地为每个用户一遍又一遍地做这件事很有意义。

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

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

    其中一些非常大,需要很长时间才能编译。根据您运行的计算机,单个包可能很容易花费数周时间来编译。(想象一下,例如您的路由器或您的智能手表。)

    • 20
  4. MC68020
    2022-07-12T06:35:48+08:002022-07-12T06:35:48+08:00

    自从我从 FreeBSD 搬走后成为 gentoo 用户 Pfff!十年前,我完全同意斯蒂芬和阿尔乔姆的回答,我确实赞成。

    我从来没有相信为 gcc 设置迷人的个人选项(例如考虑 -funroll-loops -fomg-optimize)会导致显着的性能提升,尽管这是绝大多数人声称的主要原因之一编译瘾君子。

    在我的 core II duo 系统上……当然……编译 Chromium 需要超过一整天的时间……:简直……荒谬!如果您想跟随上游更新的步伐,那就更愚蠢了!

    荒谬的 ?归根结底……不一定……取决于您真正关心的内容,因为有些事情您不能仅通过预构建的软件包来实现!

    • 例如,使用 Firefox 避免脉冲音频。
    • 更喜欢依赖系统共享库而不是本地实现(harfbuzz、icu、apng、libevent,更不用说编解码器(av1、vpx、webp…(更不用说专有编解码器…)))
    • 最终……只要你有足够的理由偏离上游的选择。(你的硬件变得过时只是一个例子)

    如果你没有得到这些遗嘱,那么……好吧……简单地认为这显然不是一种维护系统的环保方式……一些 gentoo 的主要开发人员因此而退出了。

    • 11
  5. Scottie H
    2022-07-13T07:30:15+08:002022-07-13T07:30:15+08:00

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

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

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

相关问题

  • 有没有办法让 ls 只显示某些目录的隐藏文件?

  • 使用键盘快捷键启动/停止 systemd 服务 [关闭]

  • 需要一些系统调用

  • astyle 不会更改源文件格式

  • 通过标签将根文件系统传递给linux内核

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve