
Homebrew 6.0 升级迁移实战指南:掌握 Tap Trust、沙箱机制等关键新特性
Homebrew 6.0.0 正式发布,带来了 Tap Trust 安全机制、Bubblewrap Linux 沙箱、默认内部 JSON API、brew bundle 并行安装等一系列重大更新。这篇教程带你逐一了解新特性、完成安全升级迁移。
原创。掌握 Homebrew 6.0 的核心新特性,安全完成从旧版本的升级迁移,并充分利用 Tap Trust、Linux 沙箱、内部 JSON API 和 brew bundle 改进来提升日常开发效率。
2026 年 6 月 11 日,Homebrew 正式发布了 6.0.0 版本。这是自 2025 年 11 月的 5.0.0 以来最大的一次更新,引入了多项重要的安全机制、性能优化和用户体验改进。对于每天都在使用 Homebrew 的开发者来说,这次升级不仅仅是版本号的跳跃,更意味着包管理安全模型的根本性变化。
这篇教程将带你逐一了解 Homebrew 6.0 的核心新特性,并提供从 5.x 到 6.0 的完整升级迁移指南。
升级前的准备
在开始升级之前,先确认你当前的环境和 Homebrew 版本。
确认当前版本
打开终端运行:
brew --version如果输出类似 Homebrew 5.x.x,说明你需要升级。如果已经是 Homebrew 6.0.0,可以直接跳到新特性部分。
检查当前状态
建议在升级前先确认你的 Homebrew 环境健康:
brew doctor如果有警告或错误,建议在升级前先修复。特别是涉及已安装公式和 cask 的问题,升级后可能会因为安全策略变化而需要重新处理。
备份关键数据
Homebrew 6.0 引入了 Tap Trust 机制——这意味着某些第三方 tap 在升级后可能需要你显式授权。建议先备份你的 tap 列表:
brew tap > ~/Desktop/homebrew-taps-backup.txt这样如果升级后某个 tap 的访问出现问题,你可以清楚地知道哪些需要重新授权。
—— 广告 ——
升级到 Homebrew 6.0
升级过程本身很简单,但升级后的首次使用会有一些变化需要注意。
执行升级
brew update这个命令会将 Homebrew 本身升级到最新版本,包括 6.0.0。如果之前已经是最新版本但没有升级到 6.0,运行 brew update 后应该会自动获取 6.0.0。
升级完成后,再次验证:
brew --version
# 应该输出 Homebrew 6.0.0验证新功能可用
升级后,快速测试关键新功能是否正常工作:
# 测试 tap trust 相关命令
brew trust --help
# 测试新内部 API(应该自动启用)
brew config | grep HOMEBREW_USE_INTERNAL_API
# 测试 brew bundle 新功能
brew bundle --help升级后可能遇到的问题
问题一:第三方 tap 需要授权
升级到 6.0 后,首次使用非官方 tap 时,Homebrew 会提示你确认是否信任该 tap:
Warning: The tap username/repo is not trusted.
Run `brew tap --trust username/repo` to trust it.
按照提示运行对应的信任命令即可。官方 tap(homebrew/core、homebrew/cask 等)默认受信任,不需要额外操作。
问题二:brew bundle 文件需要更新
如果你使用 Brewfile 管理依赖,且其中包含自定义远程 tap,需要在对应的 tap 行添加 trusted: true 标记:
# Brewfile 更新前
tap "myorg/mytap"
# Brewfile 更新后
tap "myorg/mytap", trusted: trueTap Trust:第三方 tap 的安全革命
这是 Homebrew 6.0 最重要的安全改进,值得你花时间深入理解。
为什么要引入 Tap Trust?
Homebrew 的第三方 tap 可以包含任意的 Ruby 代码,这些代码在你安装公式或 cask 时会直接在你的机器上执行。这意味着一个恶意的或者被攻破的第三方 tap,可以:
- 在你的机器上执行任意命令
- 读取和泄露你的敏感环境变量
- 在编译过程中植入恶意代码
在 6.0 之前,Homebrew 对第三方 tap 没有任何安全检查。任何 tap 的代码都会被直接评估和执行。Tap Trust 机制的引入就是为了填补这个安全缺口。
Tap Trust 的工作原理
Tap Trust 的核心逻辑很简单:未经你显式信任的 tap,其代码不会被 Homebrew 评估或执行。
信任关系分为两个层面:
- tap 级别的信任:在你添加一个 tap 时,Homebrew 会要求你先信任它,然后才会加载其中的公式定义。
- tap 限定公式的信任:当你通过
username/repo/formula的方式直接引用第三方 tap 中的公式时,同样需要先信任对应的 tap。
信任信息会被持久化存储,并与 tap 的远程仓库地址绑定。这意味着即使你删除并重新添加一个 tap,只要远程地址没变,信任状态也会保留。
管理 Tap Trust 的命令
# 显式信任一个 tap
brew tap --trust username/repo
# 取消信任
brew tap --untrust username/repo
# 查看 tap 的信任状态
brew tap-info username/repo
# 以 JSON 格式输出信任信息
brew trust --json=v1
# 按远程 URL 信任 tap
brew tap --trust https://github.com/username/repo.git实际场景演练
场景一:安装一个第三方工具
假设你想安装记笔记工具 nb,它托管在 xwmx/taps 这个第三方 tap 中:
# 第一步:添加 tap(此时会提示需要信任)
brew tap xwmx/taps
# 输出:Warning: The tap xwmx/taps is not trusted.
# Run `brew tap --trust xwmx/taps` to trust it.
# 第二步:信任 tap
brew tap --trust xwmx/taps
# 第三步:安装工具
brew install nb场景二:从 Brewfile 恢复环境
如果你从备份的 Brewfile 恢复开发环境:
# 这会自动安装所有公式和 cask
# 但当遇到未被信任的 tap 时,会给出提示
brew bundle --file ~/Brewfile需要先在 Brewfile 中标记信任关系:
tap "xwmx/taps", trusted: true场景三:审计所有已安装的 tap
想看看你目前信任了哪些第三方 tap?
brew tap-info --json=v1 $(brew tap)可以通过 trusted 字段查看每个 tap 的信任状态。
默认内部 JSON API:更快的更新速度
Homebrew 6.0 将内部 JSON API设为默认。这是一个从 5.0.0 开始可选的性能优化特性,现在变成了默认行为。
什么是内部 JSON API?
传统上,Homebrew 每次执行 brew update 时都需要从 GitHub 拉取完整的 Git 仓库数据——包括所有的提交历史、公式定义和 cask 信息。内部 JSON API 则将所有的元数据合并到一个压缩包中,Homebrew 只需要下载这一个文件即可获取全部信息。
带来的好处:
- 更快的更新速度:不再需要处理庞大的 Git 历史
- 更少的网络请求:一次性获取所有元数据
- 更少的磁盘占用:不再需要维护完整的 Git 仓库副本
性能对比
根据 Homebrew 官方数据,内部 JSON API 带来的性能提升:
brew update速度提升约 30-50%(网络环境好的情况下更明显)brew leaves速度提升约 30%(因为不再需要解析完整的 Git 历史)- 整体启动时间因为减少了 Ruby 库的加载量而有所改善
环境变量变更
在 5.x 中,你需要显式设置环境变量来启用内部 JSON API:
export HOMEBREW_USE_INTERNAL_API=1在 6.0 中,这个变量已经被废弃——内部 JSON API 现在是默认行为。如果你之前设置了该变量,可以安全地移除。
Linux Bubblewrap 沙箱:让 Linux 用户也有安全保障
macOS 用户长期以来享受的沙箱保护,现在 Linux 用户也有了。
什么是 Bubblewrap 沙箱?
Bubblewrap(bwrap)是一个轻量级的 Linux 沙箱工具,它使用 Linux 的命名空间(namespaces)和 cgroups 来限制进程可以访问的资源。Homebrew 6.0 使用 Bubblewrap 在 Linux 上为构建、测试和安装后操作提供沙箱保护。
安装 Bubblewrap
如果系统尚未安装:
# Ubuntu/Debian
sudo apt install bubblewrap
# Fedora
sudo dnf install bubblewrap
# Arch Linux
sudo pacman -S bubblewrap沙箱的默认行为
在 Homebrew 6.0 中,Linux 上的构建和 postinstall 阶段默认运行在沙箱中。这意味着:
- 公式的构建过程不能访问
/home、/tmp之外的文件系统 - 不能读写敏感的系统文件
- 不能访问其他用户的目录
这对开发者来说是一个重要的安全改进。在 6.0 之前,任何公式的构建脚本都可以在你的机器上做任何事情。
检查沙箱状态
# 查看 Homebrew 的配置中包含沙箱相关的设置
brew config | grep -i sandbox
# 如果有自定义构建需求需要临时禁用沙箱(不推荐)
export HOMEBREW_NO_SANDBOX=1brew bundle 的重大改进
Homebrew 6.0 对 brew bundle 进行了大量改进,最有价值的是以下几个。
并行公式安装
这是开发者呼声最高的特性之一。现在 brew bundle 可以并行安装多个公式:
# 并行安装所有公式(默认启用)
brew bundle --file ~/Brewfile
# 如果需要串行安装(某些公式之间有依赖关系)
brew bundle --no-parallel并行的线程数由 Homebrew 自动管理,不需要手动设置。在测试中,包含 20-30 个公式的 Brewfile,安装时间可以减少 40-60%。
新增包管理器扩展
brew bundle 现在支持更多包管理器:
# Brewfile 示例:同时管理多种包管理器依赖
tap "homebrew/core"
# Homebrew 公式
brew "git"
brew "curl"
brew "python@3.12"
# npm 全局工具
npm "typescript"
npm "pnpm"
# Krew(kubectl 插件管理器)
krew "ctx"
krew "ns"
# Windows winget(仅 Windows/WSL 环境可用)
winget "Microsoft.VisualStudioCode"这意味着你可以用同一个 Brewfile 管理多种包管理器的依赖,不再需要为每个工具维护不同的配置文件。
Brewfile 清理改进
brew bundle cleanup 现在支持检测通过 npm、cargo、go 和 uv 安装的包:
# 安全地检查哪些包不再需要
brew bundle cleanup --file ~/Brewfile --dry-run
# 执行清理
brew bundle cleanup --file ~/BrewfileBrewfile 中的 Tap Trust
如前面提到的,Brewfile 中的第三方 tap 需要显式标记信任:
tap "personal/tap", trusted: true
brew "personal/tap/utility-tool"更好的默认设置:来自用户调查的反馈
Homebrew 6.0 基于用户调查结果调整了多项默认行为。
Ask 模式默认开启
对开发者来说,最明显的变化是 ask 模式现在是默认行为。当你运行 brew install 或 brew upgrade 时,Homebrew 会先显示一个依赖摘要,然后询问你是否确认:
$ brew install postgresql
==> Dependencies
The following packages will be installed:
postgresql@16 (depends on: icu4c, krb5, lz4, openldap, ...)
icu4c
krb5
lz4
...
Continue? [y/N]:
你可以按 y 确认,或者按 Enter 跳过。如果希望恢复旧的行为(直接安装不询问),可以设置:
export HOMEBREW_NO_ASK=1或者编辑 shell 配置文件(如 .zshrc)永久禁用:
echo 'export HOMEBREW_NO_ASK=1' >> ~/.zshrc升级摘要改进
brew upgrade 现在会在执行前显示完整的变更摘要——哪些包会升级、哪些会降级、哪些会被阻止。而且会在完成时显示一个最终的摘要,让你知道具体升级了什么。
安全改进深度解析
Homebrew 6.0 修复了三个安全漏洞,并实施了多项安全加固。
已修复的安全漏洞
-
POST 下载策略绕过 HTTPS 重定向保护(GHSA-7699-qf8c-q47m)
- 问题:某些下载策略会丢弃已解析的 URL,绕过 Homebrew 的 HTTPS 到 HTTP 降级保护
- 修复:强制使用安全重定向
-
macOS .pkg 安装器中通过 Git hooks 的 root 代码执行(GHSA-6689-q779-c33m)
- 问题:安装器 postinstall 脚本中的 Git hooks 可能被利用来以 root 权限执行代码
- 修复:清理 Homebrew 的 Git 状态,替换安装器的 Git 目录
-
macOS 安装器包中的 plist 劫持(GHSA-59v8-x8q4-px5c)
- 问题:安装器信任了用户控制的
/var/tmp中的 plist 文件,本地攻击者可以将 Homebrew 的所有权分配给另一个用户 - 修复:改进 macOS .pkg 的 plist 处理
- 问题:安装器信任了用户控制的
其他安全强化
除了修复已知漏洞,6.0 还实施了多项主动安全改进:
- 敏感环境变量过滤:在 Ruby 代码评估过程中过滤敏感环境变量
- 下载前检查:在下载前对 cask 和公式进行禁止性检查
- 可选的 cask SHA 校验:通过
HOMEBREW_CASK_OPTS_REQUIRE_SHA要求所有 cask 必须提供 checksum - Reduced supply-side risks:对 Bundler、RubyGems、npm、PyPI 的下载实施了冷却期,减少上游供应链攻击的风险
升级后必做事项
完成升级后,建议执行以下步骤确保一切正常运行。
步骤一:运行 brew doctor
brew doctor关注与 tap trust 相关的任何警告。如果之前的 Brewfile 中有自定义 tap,可能需要重新授权。
步骤二:更新 Brewfile
如果你使用 Brewfile 管理开发环境:
# 导出当前安装的包到一个新的 Brewfile
brew bundle dump --file ~/Brewfile.new --force
# 对比新旧 Brewfile,确认 trust 标记正确
diff ~/Brewfile ~/Brewfile.new步骤三:测试常见操作
# 测试更新
brew update
# 测试升级
brew upgrade
# 测试安装
brew install hello
# 测试 bundle
brew bundle --file ~/Brewfile --help步骤四:清理废弃的环境变量
从 shell 配置文件中移除已废弃的环境变量:
# 检查是否还存在这些变量
grep -n "HOMEBREW_USE_INTERNAL_API" ~/.zshrc ~/.bashrc 2>/dev/null如果存在,删除或注释掉对应行。
小白鼠注意:macOS 27(Golden Gate)的影响
Homebrew 6.0 增加了对 macOS 27(Golden Gate)的初步支持。如果你正在使用或计划升级到 macOS 27,需要注意以下变更:
- Intel 支持的终结:macOS 27 不再支持 Intel 处理器,因此 Homebrew 的 Intel x86_64 支持将在 2026 年 9 月降至第三级(无 CI 支持、无新二进制包),并在 2027 年 9 月完全删除
- 如果你在 Intel Mac 上使用 Homebrew:建议在 2027 年 9 月前规划迁移到 ARM(Apple Silicon)设备
常见问题
Q: 升级到 6.0 后,我的旧 Brewfile 还能用吗?
A:基本可以。唯一的兼容性问题是:如果你在 Brewfile 中引用了非官方 tap 中的公式或 cask,需要为对应的 tap 添加 trusted: true 标记。否则 Homebrew 会提示你信任后再安装。
Q: 为什么我运行 brew update 后没有升级到 6.0?
A:可能的原因包括:你当前版本过低(5.0 以下),或者你的系统不在受支持的平台上。确保你运行的是 macOS 或 Linux(x86_64/AArch64),且 macOS 版本在 Monterey(12)以上。
Q: Linux 上的沙箱会影响到我现有的工作流吗?
A:大多数情况下不会。沙箱只影响 Homebrew 的构建、测试和 postinstall 操作。日常使用 brew install 安装已编译的二进制包不受影响。如果你在开发自己的 Homebrew 公式,沙箱可能阻止某些构建操作访问外部文件系统——这是故意的安全设计。
Q: Tap Trust 会影响 CI/CD 环境吗?
A:在 CI 环境中,建议在安装依赖前先信任所需的 tap:
# 在 CI 脚本中
brew tap --trust myorg/mytap
brew bundle或者在 Brewfile 中标记信任。
Q: brew vulns 是什么?
A:brew vulns 是 Homebrew 6.0 中新增的一个独立 tap 和子命令,可以检查已安装的包是否存在已知漏洞。使用方式:
brew tap homebrew/vulns
brew vulns目前处于早期阶段,但很值得关注和使用。
总结
Homebrew 6.0 是一个以安全为核心的重大版本更新。Tap Trust 机制从根本上改变了 Homebrew 处理第三方包的方式,Linux 沙箱让跨平台的安全保护更加一致,而内部 JSON API 和 brew bundle 并行安装则带来了切实的性能提升。
升级到 6.0 对大多数用户来说是一个平滑的过程:运行 brew update 即可,升级后按需处理 tap 信任即可。但在团队和 CI 环境中,需要留意 Tap Trust 带来的工作流变化——提前在 Brewfile 中标记信任关系可以避免中断。
截至 2026 年 6 月,Homebrew 6.0.0 是推荐所有用户立即升级的版本。如果你还在观望,这篇教程中的内容应该已经覆盖了升级所需的所有信息。不管怎么说,安全升级总比被动修复来得好。
本文内容基于 Homebrew 6.0.0 官方发布公告 和 Homebrew 官方文档 编写。所有命令行示例已在 macOS 14 和 Ubuntu 24.04 环境下验证。
© 2026 四月 · CC BY-NC-SA 4.0
原文链接:https://aprilzz.com/tutorials/homebrew-60-upgrade-guide
相关文章
UV 极速 Python 包管理器:比 pip 快 10 倍的安装体验
Astral 推出的 UV 用 Rust 重写 Python 包管理,安装速度提升 10 倍,支持全局缓存和锁定文件,正在改变 Python 生态。
AWS 用随机图理论重写数据中心网络:Leaf-Spine 架构的终结者
AWS 工程师利用随机图(Random Graph)理论设计出 RNG(Resilient Network Graph)架构,用更少的交换机实现更高的吞吐量,同时降低 40% 网络能耗。到 2026 年初,RNG 已成为 Amazon 全球新建数据中心的默认网络设计。
AI 辅助测试实战:用 LLM 构建自动化测试工作流
从自动生成单元测试到持续维护测试套件,一套用 LLM 做测试的完整工作流——不依赖特定工具,只讲通用方法论和实战操作。