think of homebrew
download homebrew
问题
最近在下载 homebrew 时,发现其总是出现连接被拒绝的情况.
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
原因
后续是发现其脚本需要到 raw.githubusercontent.com 上拉取代码,原因是 github 的一些域名的DNS解析被污染,导致 DNS 解析过程无法通过域名取得正确的 IP 地址.
方案
使用修改本机 hosts 文件,建立域名与 IP 的映射关系,当访问 hosts 文件列表中的域名时,依次尝试在其映射的 IP 进行请求,绕过 DNS.
- 步骤.
- 使用https://www.ipaddress.com/查找域名所对应的 IP 地址.
- 使用 switchHosts 修改 mac 的 hosts 文件.
PS: 使用 switchHosts 无法对原有的 hosts 文件进行修改,只能添加新的 hosts 文件对原有的 hosts 文件进行合并覆盖,添加好后,将其配置的 switch 开关打开,允许其合并覆盖.
次生问题
再次下载,被拒绝的情况不存在了,但是出现了新的异常情况.
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443
次生原因
其根本原因,在于国内网络环境对于境外服务器的种种限制,只用解决这一问题才能真正意义上解决下载 homebrew 网络错误的问题.
次生方案
所以我查找到了一条可以彻底解决的路,使用国内镜像,就跟 npm 的淘宝镜像相同,homebrew 在国内也有多条镜像途径.
- 步骤.
- 首先下载 homebrew 国内镜像.
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- 选择任意一个镜像进行下载,最好是用’梯子’🐶.有时候用’梯子’也下载的非常慢,好在重新进行下载时,会在原来 downloaded 的基础之上进行下载.下载好之后,重启终端命令行工具,或者执行一下 source .bash_profile,使得配置文件在修改了环境变等配置的情况下进行重置.
brew install
这样就可以愉快快捷的下载任意在 homebrew 上的资源了! PS: 每下载完一次资源,还是最好执行一下 source ~/.bash_profile,使得配置文件在修改了环境变量等配置的情况下进行重置.
异常
fatal: not in a git directory
Error: Command failed with exit 128: git
当出现这种异常时,就说明本地与远程并没有建立关联,并没有添加 origin 句柄简称映射远程的镜像或者 github 链接,所以我们需要重新设置一下.
- Bash 终端配置
# 替换 brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# 应用生效
brew update
# 替换homebrew-bottles:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.bash_profile
source ~/.bash_profile
- Zsh 终端配置
# 替换 brew.git:
cd "$(brew --repo)"
git remote set-url origin https://mirrors.aliyun.com/homebrew/brew.git
# 替换homebrew-core.git:
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.aliyun.com/homebrew/homebrew-core.git
# 应用生效
brew update
# 替换homebrew-bottles:
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.aliyun.com/homebrew/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc
这样就可解决本地与远程并没有建立关联的问题.