Transcript
00:00:00就在几个月前,在这个频道里,我们制作了一期视频,基本上把 Homebrew
00:00:05形容成了石器时代的产物,说 Nix 简直能吊打它。所以,我觉得非常有必要
00:00:12重新回到这个话题,告诉大家:我们之前说的那个“石器时代工具”,刚刚发布了
00:00:17几年来的第一个重大版本——Homebrew 6.0。重点在于,这次头条新闻并非新增了一堆
00:00:23新功能,而是一次全面的安全性重构。Homebrew 真的蜕变长大了。
00:00:30现在,让我来解释一下到底改变了什么,因为这比单纯升了个版本号更有意思。
00:00:38在 Homebrew 过去几乎整个生命周期里,当你添加第三方 Tap(也就是别人的
00:00:45软件包仓库)时,Homebrew 会直接运行他们的 Ruby 代码。就是直接执行那些代码。任何 Tap、
00:00:51任意代码,几乎不过问任何问题。现在,想象一下我们如今所处的环境。
00:00:56包管理器是目前供应链攻击的首要目标。NPM 等各类工具
00:01:01接连不断地遭受打击。“直接运行仓库给的任何代码”是个糟糕的默认设置。而 Homebrew
00:01:086.0 的新功能正是为了杜绝这一点。它叫做 Tap Trust(Tap 信任机制)。如果你喜欢这样的编程技巧和心得,
00:01:15记得关注订阅。我们一直有视频更新。不过让我先从大家每天
00:01:19都能切身体会到的部分讲起。Brew version。看,6.0。现在看好了,当我安装
00:01:25一个需要拉取若干依赖项的软件时会发生什么。Brew 不再默默直接安装,而是会列出
00:01:31即将在你的设备上安装的所有内容的摘要,并等待你确认“yes”。这就是全新的 Ask 模式,
00:01:38现在对开发者默认开启。微小的改变,但这意味着在 Brew 对机器进行任何操作前,你都能看到计划。
00:01:44现在重头戏来了,Tap Trust。看看当我添加第三方 Tap 时会怎样。
00:01:50Homebrew 会立刻叫停。提示说这个 Tap 尚未受信任,并且绝不会运行其中的哪怕一行代码,
00:01:56除非我手动明确许可。只有在我通过 Brew Trust 主动确认信任后,它才会真正
00:02:03开始执行。Homebrew 官方的 Tap 则开箱即用、默认受信任。所以日常正常的 Brew 安装体验
00:02:09完全没有变化。但对于那些从 GitHub 陌生人的 readme 文档里找来的、有点可疑的 Tap,
00:02:16现在就像加了一道锁。你必须手动授权批准它。说实话,
00:02:20就目前的大环境来看,这绝对是个相当明智的决定。而且这还不是唯一的实质性升级。
00:02:25内部元数据系统现在成为了默认配置,这意味着你的所有软件包信息都能在一次
00:02:30干净利落的下载中搞定,而不需要发起十几小个网络请求。因此 Brew update 变快了很多。还有一个
00:02:37全新的命令 Brew execute,本质上就是 Homebrew 版的 NPX。可以运行一次工具,而无需将其
00:02:45永久安装到你的系统中。还有 Brew vulns,它能够扫描你已安装的软件包,对照
00:02:51已知安全问题和警告。另外 6.0 还悄悄修复了三个安全漏洞,包括一个可能在 Mac 安装包中以 root 身份运行代码的漏洞。
00:02:58这是一个非常有担当和风骨的版本。好了,但这里面也有个隐患/限制。对你们其中的一些人来说,影响可能会很大。所以我直接明说了吧。
00:03:09Tap Trust 是个破坏性变更(Breaking Change)。如果你的 CI 流水线依赖于第三方 Tap,
00:03:14Brew doctor 只要检测到未信任的 Tap 会直接抛出错误。而海量的标准 GitHub
00:03:20Actions 第一步就是运行 Brew doctor。所以很多人更新后,他们的构建流程就开始报错失败。
00:03:28解决办法是在配置中将这些 Tap 标记为受信任,但这需要你自己手动去配置。
00:03:35没人会帮你做。Ask 模式也是同理。如果你有一些脚本默认假设
00:03:41Brew 安装无需任何提示,那么这个全新的确认提示可能会导致脚本永久卡死。再说说整体观感,
00:03:46如果你只是个日常安装应用的用户,表面上几乎看不出什么区别。
00:03:51这是一个侧重安全和架构更新的版本,可不只是换了个外壳刷了层新漆。这里顺便澄清一个误区。
00:03:58现在很多东西都在用 Rust 重写。但 Homebrew 并没有用 Rust 重写,
00:04:04至少目前没有。那只是一次实验。核心重点依然像以前一样,重新回到了 Ruby 代码库本身。
00:04:10那么,大家应该升级到 Homebrew 6.0 吗?对绝大多数人来说,答案是:直接升。
00:04:16你会获得三个安全补丁,而且说实话,Brew update 也会直接把你推向 6.0,
00:04:22无论你有没有提前规划。现在需要稍微放慢脚步的,是那些
00:04:27运行着涉及第三方 Tap 的 CI 流水线,或者依赖静默安装自动化的开发者。先把这些处理好,
00:04:33你就完全没问题了。如果你还在用 Intel 芯片的 Mac,注意了:6.0 明确指出了
00:04:40在接下来的几年里淘汰 Intel 支持的时间表。而 Apple Silicon(Apple 芯片)用户,也就是用新电脑的朋友,
00:04:46我们完全不用担心。它甚至还增加了对全新 M5 芯片的支持。最后我是这样看待这次更新的:
00:04:53多年来,退一步讲,Homebrew 一直是个便利工具,只是在 Mac 上获取软件最快的方式。
00:04:59而在 6.0 版本中,它似乎变成了一个安全关卡,进入机器的代码
00:05:05终于必须证明自己是受信任的。这是迈出的关键一大步。包管理器
00:05:10终于赶上了我们所有人多年来一直在面对的安全威胁模型。这才是最重要的事,
00:05:15而不是框框里的数字是 6.0 还是 6.1,而是随之而来的安全理念。如果你喜欢这样的
00:05:21编程技巧与心得,请务必订阅 BetterStack 频道。我们下期视频再见。