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.

  • 步骤.
  1. 使用https://www.ipaddress.com/查找域名所对应的 IP 地址.

  1. 使用 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 在国内也有多条镜像途径.

  • 步骤.
  1. 首先下载 homebrew 国内镜像.
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

  1. 选择任意一个镜像进行下载,最好是用’梯子’🐶.有时候用’梯子’也下载的非常慢,好在重新进行下载时,会在原来 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

这样就可解决本地与远程并没有建立关联的问题.