Homebrew国内镜像自动安装全攻略:从原理到实操解决安装失败与更新慢
2026/9/17 1:45:11 网站建设 项目流程

1. 安装为什么总是失败:先搞清楚卡在哪个环节

这两年但凡有人让我远程看Homebrew问题,十个里至少有八个卡在同一幕:终端刷了一长串报错,红字写着curl: (7) Failed to connect to raw.githubusercontent.com port 443。剩下两个,一个卡在git clone https://github.com/Homebrew/brew半天没动静,另一个盯着下载进度条看了五分钟纹丝不动。

今天这篇就围绕“Homebrew国内镜像自动安装”这条主线,从原理到实际命令,把 Intel Mac 和 Apple Silicon Mac 上常见的安装失败、安装慢、装完没法 update 的坑一次讲透。不管你是刚接触 macOS 开发环境的新人,还是被 Homebrew 折磨过的老用户,这套用镜像源完成自动安装的方案都值得直接抄作业。

1.1 一条安装命令牵出的三个网络节点

先看官方安装命令:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"。很多人只看到“一条命令”,但这条命令背后其实要经过三个独立的网络环节:

  • 下载install.sh脚本本身,它在raw.githubusercontent.com上;
  • 脚本执行后,从github.com/Homebrew/brew拉取 Homebrew 主体仓库;
  • 后续安装软件时,还要从ghcr.ioformulae.brew.sh拉取预编译包和公式元数据。

这三个节点只要有一个连接不稳定,整条链路就断了。raw.githubusercontent.com在国内的连接状况尤其不稳定,这就是大量安装失败报错的直接来源。很多人以为是自己命令敲错了,其实是网络路径绕了一大圈,卡在了入口处。

还有个容易被忽略的点:DNS 解析。有时候 GitHub 域名本身能 ping 通,但到你本地的解析结果被污染或异常,curl 会卡在 TLS 握手阶段,表现就是长时间转圈或者SSL_ERROR_SYSCALL。遇到这种情况,先换公共 DNS 再测一下,很多时候问题就解决了。

1.2 新版 Homebrew 的架构变化,老教程为什么失效

Homebrew 4.0 之后有一个非常关键的变化:默认不再拉取整个homebrew-core的 git 仓库,而是通过 API 接口获取公式元数据。这意味着老教程里那些“替换 homebrew-core.git 地址”的操作,在新版本里已经不能完全解决 update 慢的问题了。

新版最需要关心的是HOMEBREW_API_DOMAIN这个环境变量。它决定brew updatebrew search时去哪个地址拉取公式信息。如果你配置了国内镜像的 API 地址,update 速度会有质的提升。这也是为什么很多人配置了HOMEBREW_BREW_GIT_REMOTE之后,update 还是慢——因为新版根本没走 git 仓库更新公式,而是走 API。

同时要注意 Intel Mac 和 Apple Silicon 的差异。Intel 默认安装路径是/usr/local/Homebrew,Apple Silicon 是/opt/homebrew。不同的路径设计会影响权限、PATH 配置和后续脚本执行方式。特别是 Intel Mac 上,/usr/local目录权限如果被改乱过,安装过程会莫名卡住,这在后面实操部分我会详细说。

2. 自动安装的核心思路:用“换源+脚本镜像”一次性解决

很多人的第一反应是反复重试官方命令,或者手动下载安装包再拷贝过去。这些办法不是不行,但都很被动。官方安装脚本逻辑本身是干净的,问题只在下载源。所以最优解是:让脚本从国内镜像站下载,脚本内部涉及 GitHub 的地址也一并替换掉。这就是镜像安装脚本的原理。

2.1 官方脚本到底做了什么,镜像脚本怎么改的

官方install.sh做的事情概括起来就三步:检查系统环境(macOS 版本、命令行工具、架构)、克隆 Homebrew 主体仓库、初始化目录和权限。镜像脚本改动的地方很克制,主要就是把脚本开头用于下载硬编码的 GitHub 地址,替换成国内镜像站对应的地址。

以中科大镜像站提供的install.sh为例,它把https://github.com/Homebrew/brew替换为https://mirrors.ustc.edu.cn/brew.git,把homebrew-core也指向了科大的homebrew-core.git。这样脚本一旦跑起来,整个安装过程就完全不依赖 GitHub,不需要再手动修改任何东西。

这种思路比“先装官方版,再改源”要稳得多。因为如果官方版装到一半失败,系统里可能已经留下半截 Homebrew 目录,后续修复比一开始用镜像脚本直接装更麻烦。安装类工具最怕的就是“进行到一半”的状态。

2.2 三大镜像源怎么选:中科大、清华、阿里

国内常用的 macOS 软件镜像源主要有中科大、清华和阿里云三家。我实际用下来的感受是:中科大和清华的 Homebrew 覆盖最完整,既有 git 仓库镜像,也有 bottles 预编译包镜像和 API 镜像;阿里云主要提供 bottles 镜像,适合只解决安装慢的场景,但 git 仓库和 API 方面覆盖不如前两家全。

镜像源brew 本体仓库homebrew-coreAPI 元数据bottles 预编译包
中科大支持支持支持支持
清华支持支持支持支持
阿里云不支持不支持不支持支持

建议你直接选一家作为主力,不要交叉混用。混用多个源容易出“元数据来自 A,安装包来自 B”的错位问题,排查起来很麻烦。我个人主力用中科大,因为它的目录结构和文档更新比较及时,脚本镜像也齐全。

2.3NONINTERACTIVE参数:真正无人值守的关键

官方安装脚本支持一个环境变量NONINTERACTIVE=1。设置后脚本不会停下来让你按回车确认、也不会问你是否安装命令行工具,全程自动执行。这个参数对自动化部署、远程脚本执行、或者不想盯着终端等人的人来说,非常关键。

配合镜像脚本使用时,命令就变成一行:

NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://mirrors.ustc.edu.cn/misc/brew/install.sh)"

执行后你可以喝杯水回来看结果。脚本会打印安装日志,看到Installation successful或类似字样就说明成了。这里要注意,即使加了NONINTERACTIVE,如果后期需要写入/usr/local(Intel Mac 场景)且目录权限不足,脚本还是有可能中途失败,所以安装前检查目录权限是必要的。

3. 手把手实操:一条命令完成镜像自动安装

3.1 安装前检查:架构、目录权限、命令行工具

在跑安装命令之前,花两分钟确认三件事,能省掉后面大量的排查时间。

第一,确认芯片架构。在终端执行uname -m,输出arm64就是 Apple Silicon,输出x86_64就是 Intel 或在 Rosetta 环境下。确认架构的目的是判断后续 Homebrew 会装到哪个目录,以及 PATH 该怎么配。

第二,确认命令行工具。执行xcode-select -p,如果输出/Library/Developer/CommandLineTools/Applications/Xcode.app/...,说明就绪。如果提示error: unable to locate xcode-select,先执行xcode-select --install把 Command Line Tools 装上再继续。

第三,检查目录状态。对于 Intel Mac,/usr/local如果存在且权限不对,建议先执行:

sudo chown -R $(whoami) /usr/local

注意这条命令在全新机器上可以直接跑,但如果机器上已经装了其他软件,执行前先看一眼/usr/local里有没有你不认识的东西。Apple Silicon 场景下/opt/homebrew通常不存在,不需要提前处理。

3.2 中科大镜像脚本安装:Intel 与 Apple Silicon 通用

确认完环境,直接把这一行复制进终端:

NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://mirrors.ustc.edu.cn/misc/brew/install.sh)"

脚本会自动检测架构、选择正确的安装路径、完成 Homebrew 主体仓库的克隆。如果之前没装 Command Line Tools,脚本会尝试自动安装,这个过程需要联网从苹果开发者中心下载资源,耗时看你网络情况。

安装完成后,验证一下:

brew --version which brew

如果提示command not found,说明 Homebrew 虽然装进了目录,但还没进入当前 shell 的 PATH。解决办法是手动加载环境:

# Apple Silicon eval "$(/opt/homebrew/bin/brew shellenv)" # Intel eval "$(/usr/local/bin/brew shellenv)"

执行完which brew应该能看到对应路径。为了让新开的终端窗口也生效,需要把对应语句追加到 shell 配置文件里。

3.3 清华备选方案与安装后自检

如果你那边访问中科大有延迟,或者想用清华镜像,操作也简单。清华提供的是安装脚本仓库,先克隆再执行:

git clone --depth=1 https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/install.git cd install NONINTERACTIVE=1 /bin/bash install.sh

这里用--depth=1只是拉取安装脚本仓库的最新版本,不需要完整历史记录,能省不少时间。清华的脚本同样会把后续的 brew 仓库、core 仓库地址改到清华镜像上。

安装完成后的自检,我推荐多看一个信息:

brew config

这个命令会打印出 Homebrew 的完整配置,包括 macOS 版本、CLT 路径、以及各个HOMEBREW_*环境变量。你一眼就能看出来当前走的是哪个源。如果某些域名为空,说明还没配置,下一步就要处理环境变量的问题。

4. 安装只是开始:把 brew 的日常流量也切到国内镜像

脚本安装解决了“装得上”的问题,但如果你装完就万事大吉,后面brew updatebrew install还是会因为默认源是 GitHub 而频繁超时。安装只是第一步,日常使用也得让 Homebrew 继续走国内镜像。

4.1 配置环境变量,让 update 和 install 都走镜像

打开你的 shell 配置文件。macOS 默认 shell 是 zsh,所以通常是~/.zshrc,老用户如果切过 bash,就写~/.bash_profile。在文件末尾加入以下内容(以中科大为示例):

export HOMEBREW_API_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles/api" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.ustc.edu.cn/homebrew-bottles" export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.ustc.edu.cn/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.ustc.edu.cn/homebrew-core.git"

保存后执行source ~/.zshrc让配置生效。用清华的同学把地址换成:

export HOMEBREW_API_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api" export HOMEBREW_BOTTLE_DOMAIN="https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles" export HOMEBREW_BREW_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git" export HOMEBREW_CORE_GIT_REMOTE="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"

这四个变量的分工很明确:HOMEBREW_API_DOMAIN管公式元数据,HOMEBREW_BOTTLE_DOMAIN管预编译二进制包,HOMEBREW_BREW_GIT_REMOTE管 Homebrew 本体更新,HOMEBREW_CORE_GIT_REMOTE管 core 仓库(主要用于旧版本或强制 git 模式的场景)。把它们都配上,相当于把 Homebrew 的每一条网络请求都指向了国内。

4.2 理解HOMEBREW_API_DOMAIN:新版 Homebrew 的关键变量

很多旧教程只教配HOMEBREW_BREW_GIT_REMOTEHOMEBREW_CORE_GIT_REMOTE,但在 Homebrew 4.x 下,这两个变量主要负责 brew 本体的升级和那些不使用 API 模式的操作。真正影响日常体验的是HOMEBREW_API_DOMAIN

默认情况下,Homebrew 的 API 请求会发往formulae.brew.sh。这个域名在国内访问速度时好时坏,尤其在brew update要拉取大量公式变更信息时,慢起来能让你怀疑机器死机了。把HOMEBREW_API_DOMAIN指到镜像站之后,公式信息、版本变更、依赖关系都能快速同步。

如果你发现某个包brew info能看,但brew install却报formula not found,大概率就是 API 元数据和本地缓存不同步。执行一次brew update再试通常能解决,前提是你已经配置好 API 镜像源。

4.3 实际效果验证与 Cask 镜像补充

配置完环境变量,跑一个实际安装看效果。我建议拿wgetzlib做测试,因为它们都有预编译包,且依赖链相对简单。

brew update brew install zlib

正常情况下的输出应该是:下载链接直接指向mirrors.ustc.edu.cn或你配置的镜像地址,下载速度稳定,不会卡在Downloading ...长时间不动。如果下载地址还是ghcr.iohomebrew.bintray.com,说明环境变量没生效,回到 4.1 检查配置。

还有一个场景是安装图形化软件,比如 Chrome、VS Code,这时候走的是 Homebrew Cask。Cask 的下载源通常指向软件官方地址,镜像源影响有限。但 Cask 仓库本身的更新走的是 git,所以HOMEBREW_CORE_GIT_REMOTE和 API 域名配置好之后,brew update会顺畅很多,brew install --cask的体验也跟着变好。

5. 高频报错排查与避坑实录

即便用了镜像源,不同机器上的历史问题千奇百怪。我自己踩过、也帮人排查过不少,下面把遇到频率最高的几类整理出来,方便你对症处理。

5.1 常见报错速查表

报错信息直接原因处理方式
curl: (7) Failed to connect to raw.githubusercontent.com port 443官方脚本下载链路不通改用中科大或清华镜像脚本安装
fatal: unable to access 'https://github.com/Homebrew/brew/'brew 仓库 clone 不过去先设置HOMEBREW_BREW_GIT_REMOTE,再执行安装脚本
Error: homebrew-core is a shallow clonecore 仓库是浅克隆,无法正常更新进入对应的 homebrew-core 目录执行git fetch --unshallow
Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)终端以 x86_64 模式运行在 Apple Silicon 上退出当前终端,重新打开纯 arm64 终端,或执行arch -arm64 /bin/zsh
Another active Homebrew update process is already in progress上一次 update 中断留下了锁删除$(brew --prefix)/var/homebrew/locks下的锁文件后重试
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALLTLS 握手失败,网络链路不稳定检查 DNS 设置,或切换镜像源重新执行

排查时有一个顺序很重要:先确认配置,再看网络,最后才看命令。很多人的问题出在环境变量没写进~/.zshrc,或者写进去了但没执行source,导致配置看起来“有”实则没生效。

5.2 卸载残留怎么清干净

Homebrew 官方提供了卸载脚本,但国内访问 GitHub 不稳时,脚本未必能顺利下载。而且官方卸载脚本主要删除核心安装目录,缓存、日志、Cask 安装的应用本体这些残留不会都清掉。如果你打算彻底重装,下面这些路径手动过一遍更干净:

路径内容
/usr/local/Homebrew/opt/homebrewHomebrew 主目录
/usr/local/Cellar/opt/homebrew/Cellar通过 Homebrew 安装的软件本体
/usr/local/Caskroom/opt/homebrew/Caskroom通过 Cask 安装的图形化应用
~/Library/Caches/Homebrew下载缓存,日积月累可能占好几个 GB
~/Library/Logs/Homebrew安装和更新日志
~/.zshrc中追加的HOMEBREW_*环境变量若不再使用 Homebrew,需手动删除

如果你只是觉得 Homebrew 状态不正常想重装,不一定非要卸载干净再装。多数情况下,清了缓存、删掉 locks、修正环境变量后重试,问题就解决了。只有当你确定要彻底告别 Homebrew 或者怀疑目录结构损坏时,才需要走完整的卸载清理流程。

5.3 几条容易忽略的实操小技巧

先说 PATH 的问题。brew命令找不到,绝大多数情况不是安装失败,而是 PATH 没配好。Apple Silicon 机器要确认/opt/homebrew/bin在 PATH 中,Intel 机器要确认/usr/local/bin在 PATH 中。用echo $PATH检查时,看到对应路径存在且排在前面就对了。

再说权限问题。Intel Mac 上/usr/local目录是历史遗留的“公共目录”,很多软件都会往里写东西。Homebrew 安装时如果遇到Permission denied,不要直接sudo chmod -R 777 /usr/local图省事,这会破坏整个目录的权限模型,后面会有更诡异的问题。建议只针对需要写入的子目录做属主调整,比如/usr/local/Homebrew/usr/local/Cellar/usr/local/bin等。

最后提一下缓存。Homebrew 的下载缓存会越来越大,尤其当你频繁安装和卸载大型软件时。定期清一下缓存对保持系统清爽很有帮助:

brew cleanup

这条命令会删除旧版本的残留包和无用缓存。如果你想让缓存清得更彻底,可以手动删~/Library/Caches/Homebrew下的内容,但注意这样做会让后续重装某个软件时重新下载。我在实际使用中比较建议保留缓存,只定期brew cleanup,在速度与空间之间取一个平衡。

还有一个容易被忽略的点:Homebrew 在安装需要编译的软件时,如果本地缺少编译依赖,日志里会刷出一堆configure: error: ...之类的报错,让人误以为是网络问题。这种情况先确认brew doctor输出是否干净,再看具体缺的是哪个依赖,针对性brew install对应的依赖即可。

说到底,Homebrew 本身是一个非常成熟的工具,90% 的安装问题都出在下载链路上。把源码换成国内镜像,把环境变量写对,把 PATH 配好,剩下的就只是时间问题。我在实际使用中体会最深的一点是:镜像源别贪多,选一个信得过的,长期保持配置稳定,远比频繁切换源更省心。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询