为啥 Macports 需要 FOREVER 来构建简单的包?

Posted

技术标签:

【中文标题】为啥 Macports 需要 FOREVER 来构建简单的包?【英文标题】:Why does Macports take FOREVER to build simple packages?为什么 Macports 需要 FOREVER 来构建简单的包? 【发布时间】:2010-11-24 01:22:25 【问题描述】:

从 macports 之外的源代码构建是轻而易举的事。使用 macports 构建需要很长时间,而且似乎每隔一段时间就会冻结操作系统。这是典型的行为吗?虽然它似乎是 os x 的一个不错的打包工具,但如果我每次安装时都必须经历这种痛苦,我想我会不用它。

【问题讨论】:

我认为下面没有回答这个问题。将 macports 的性能与任何其他包管理器(如 apt-get)进行对比,它必须慢 100 倍。 如果您没有实际测试,则不应使用任意数量的“100 次”。 @user363349:将 macports 与 apt-get 进行比较是不公平的; Linux 生态系统存储库通常处理预编译的二进制文件。 Macports 每次都从源代码编译。速度的差异可以通过方法来解释。 我同意@Augmental Macports 很慢,因为它是从源代码编译的,基本上它就是这样工作的。本来就是这么慢的。如果您不关心源代码,请使用 brew! 【参考方案1】:

如果您在 Intel Core 2 Duo 上运行,您可以通过更改此处的 Macports 配置选项将构建速度提高一倍:

/opt/local/etc/macports/macports.conf

# Number of simultaneous make jobs (commands) to use when building ports
buildmakejobs       2

当我在重建 gcc 后发现这一点时,我在踢自己 ;)

此选项将允许您使用两个 cpu 来构建包。

【讨论】:

谁能证实这一点?对我来说,这个字段的评论说“这个 # 值可能设置为 0,因此同时生成作业的数量将设置为 # 自动检测的 CPU 内核数,或 GB 数 # 物理内存加一,以较小者为准。”...所以除非 CPU 检测被破坏或者你有 自己测试一下。正如我所做的那样。打开Activity Monitor,点击CPU,查看make时改变选项时每个核心的活动差异。 评论说 可能设置为 0 但默认情况下它被注释掉了 --- default 值是什么,它是 0,是吗1,等等? 根据guide.macports.org/chunked/internals.configuration-files.html,默认值为0,这会导致运行时自动检测使用所有可用的处理器内核。 默认值为 0。这意味着根据@Trenton 评论 autodetect。在编译期间,我的 CPU 的所有(4)个内核都在使用。检查 MacPorts 2.3.3 的全新安装。【参考方案2】:

“冻结操作系统”?你可以说得更详细点吗?您试图在什么机器上的什么版本的 OS X 上构建什么包?

根据我的经验,MacPorts 构建通常可以在几乎所有受支持的配置上正常工作,在我的例子中,从运行 10.4 的 256MB Pismo G3(2000 年)到最近运行 10.5 的双核 Intel iMac。但是,您必须要有耐心:这可能需要很长时间,尤其是在有很多依赖包的情况下,这是使用 MacPorts 或 Fink 等包管理器的缺点之一。好处是,与您自己从源代码单独安装软件包相比,您通常拥有一个更受控制且经过测试的环境。而且,如果您还没有,请确保更新到最新的 MacPorts:1.8.0 刚刚发布,并进行了一些重要的改进,包括更好地支持通用构建。

【讨论】:

+1... 配合 Ned,如果您正在构建的内容有很多包依赖项(并且这些包有依赖项,等等),您将等待很长时间是时候编译你的东西了。 通过冻结操作系统我的意思是它变得无响应几秒钟。我在带有 4gb 内存的 core duo 2 macbook pro 上运行 os x 10.6。即使处理最密集的 cpu/mem 进程也绰绰有余。我将 macports 与我在 linux 系统上使用了很长一段时间的 yum 进行比较,而且 macports 似乎不太灵活...... 您的计算机会周期性地变得无响应,因为许多构建和安装的 IO 模式非常突发,并且它成为磁盘 IO 的瓶颈。它与CPU或内存无关。 yum 并没有那么糟糕,因为 yum 正在安装预编译的二进制包,而不是构建它们。 嗯,是的:如果您将已安装的预构建二进制包与从源代码构建包进行比较 - 肯定会很慢!如果 MacPorts 确实提供了预构建的软件包,那就太好了,但是这样做的基础设施和测试更加复杂,而且不符合移植的精神。 Fink 尝试做到这一点 - 本着 Debian apt-get 的精神 - 但他们真的没有资源去做,所以他们有一个混合系统,包含仅源代码包和二进制包,其中大多数的二进制包不经常更新。 而且,听起来并不圆滑,但是,就像许多多人开源项目一样,我敢打赌 MacPorts 或 Fink 项目都可以使用,并且会欢迎更多帮助。【参考方案3】:

MacPorts 过去只能从源代码构建,与获取二进制文件的包系统相比,这可能会导致几个数量级的差异。 考虑一个需要几个小时才能构建的大包的例子,并将其与下载它作为大小为几十 MB 的存档的时间进行比较。

MacPorts 使用 Apple 的工具进行构建,它只会为您在 MacPorts 之外获得的相同构建时间增加微不足道的开销,包越大,差异越小。如果您在 MP 之外构建程序时遇到了巨大的差异,您应该在issue tracker 上提交一张票,并附上详细信息。

也就是说我看到这个问题已经很老了,因为 2.0 支持二进制存档 -cf。 Changelog- 有一个支持 macosforge 的存储库,其中包含生成签名档案的构建机器人,默认是获取这些二进制档案而不是从源代码构建(您可以强制使用 -s 标志)。 当前的用户体验更类似于 apt-get 等二进制管理器,能够非常轻松地更改配置和构建选项。

【讨论】:

【参考方案4】:

我不介意等待 Mac Ports 从源代码构建最新软件包。但是为什么不利用所有这些处理能力,并为用户提供让构建自动上传回 MacPorts 的选项,或者更好地仍然被散列并为可以选择“turbo”选项的其他 MacPorts 用户提供点对点。

【讨论】:

可能是因为现在人们(包括我自己)过于偏执,无法相信来自陌生人的二进制文件。有趣的是,我们大多数人从不费心去查看我们每天构建的源代码...... 我在想知道为什么它构建而不是安装二进制文件时发现了这个问题,因为这个“答案”很奇怪......至于信任,好吧,如果我们信任 macports 源代码树,那么我看不到有理由不相信,比如说,一个由 macports 执行的构建。这确实需要 macports 的人有资源(硬件、时间等)来构建东西(用于各种平台),但是......也许有一些中间方式?我知道我更喜欢二进制安装,前提是存在一定程度的信任。它肯定不比不看的来源更安全(本质上,无论如何)。 不是基于 p2p,但自 2.0 以来就是这种情况,由于许可证和资源可用性,并非所有软件包都可用(构建机器人需要在存档可用之前处理文件)。档案已签名,参见。 packages.macports.org

以上是关于为啥 Macports 需要 FOREVER 来构建简单的包?的主要内容,如果未能解决你的问题,请参考以下文章

雪豹下Macports mysql5设置

使用 forever 启动 vue 需要注意的问题

Node.js 后台启动 forever(永恒) 简单用法

React Native darkMode 上下文值需要 *forever* 重新渲染

如何解决 Homebrew 和 MacPorts 或 Fink 之间的冲突?

用macports装了一份openssl