Homebrew

 

Homebrew 中的一些概念及配置国内镜像源方法。

安装 Homebrew

Homebrew国内如何自动安装(国内地址)

执行以下命令,脚本会提示选择国内几个比较常用的镜像,选择中科大镜像然后一路安装即可。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

# Set Homebrew-bottles mirror
export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles

查看 Homebrew 远程仓库 URL

# lists all currently tapped repositories.
brew tap

# Homebrew 源代码仓库
git -C "$(brew --repo)" remote -v

# Homebrew 核心软件仓库
git -C "$(brew --repo homebrew/core)" remote -v

# Homebrew cask 软件仓库,提供 macOS 应用和大型二进制文件
git -C "$(brew --repo homebrew/cask)" remote -v

# Homebrew cask 其他版本 (alternative versions) 软件仓库,提供使用人数多的、需要的版本不在 cask 仓库中的应用。
git -C "$(brew --repo homebrew/cask-versions)" remote -v

Homebrew 使用代理

有时候镜像源中没有我们要安装的包,这时会从官方连接进行下载,速度依然较慢,此时可以使用代理进行下载,直接在终端设置代理即可。

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7891

手工设置 Homebrew 国内镜像源

如果需要手工设置国内镜像源,可以选择国内常用的有以下三大镜像源,

中科大镜像包含 cask 源,因此这里使用中科大做为镜像源。

配置帮助

# 替换 Homebrew (Homebrew 源代码仓库)
git -C "$(brew --repo)" remote set-url origin https://mirrors.ustc.edu.cn/brew.git

# 替换 Homebrew Core (Homebrew 核心软件仓库)
git -C "$(brew --repo homebrew/core)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git


# 替换 Homebrew Cask (Homebrew Cask 软件仓库,提供 macOS 应用和大型二进制文件)
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://mirrors.ustc.edu.cn/homebrew-cask.git

# 替换 Homebrew cask 其他版本 (alternative versions) 软件仓库,提供使用人数多的、需要的版本不在 cask 仓库中的应用。
brew tap --custom-remote --force-auto-update homebrew/cask-versions https://mirrors.ustc.edu.cn/homebrew-cask-versions.git

# Homebrew 预编译二进制软件包
echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
source ~/.zshrc

恢复官方源

git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew.git
git -C "$(brew --repo homebrew/core)" remote set-url origin https://github.com/Homebrew/homebrew-core.git
git -C "$(brew --repo homebrew/cask)" remote set-url origin https://github.com/Homebrew/homebrew-cask.git
brew tap --custom-remote --force-auto-update homebrew/cask-versions https://github.com/Homebrew/homebrew-cask-versions

Homebrew 中的 keg-only formula

Hard to understand what keg-only means

所有的 formula 都安装在 Cellar 中 (Cellar 路径: brew --Cellar)
例如

/usr/local/Cellar/elasticsearch/5.2.2
/usr/local/Cellar/elasticsearch@1.7/1.7.6_1

所有 formula 都是 opt-linked (opt 路径)
例如

/usr/local/opt/elasticsearch -> ../Cellar/elasticsearch/5.2.2
/usr/local/opt/elasticsearch@1.7 -> ../Cellar/elasticsearch@1.7/1.7.6_1

只有 non-keg-only 的 formula 才会软链接到 Homebrew prefix (brew --prefix)

/usr/local/bin/elasticsearch -> ../Cellar/elasticsearch/5.2.2/bin/elasticsearch

默认情况下,/usr/local/bin 会在你的 PATH 里,而下面的路径不在 PATH

(a) /usr/local/opt/elasticsearch/bin
(b) /usr/local/opt/elasticsearch@1.7/bin

对于路径 (a),因为 /usr/local/bin 已经在 PATH 中,所以不会有问题,运行 elasticsearch 会执行 /usr/local/bin/elasticsearch,其指向 /usr/local/Cellar/elasticsearch/5.2.2/bin/elasticsearch

对于路径 (b),因为 /usr/local/Cellar/elasticsearch@1.7/1.7.6_1/bin/elasticsearch 没有软链接到 /usr/local/bin,你只能通过全路径来执行,或者将 /usr/local/opt/elasticsearch@1.7/bin 前置到 PATH 中。

之所以在 PATH 中前置 /usr/local/opt/elasticsearch@1.7/bin 而不是 /usr/local/Cellar/elasticsearch@1.7/1.7.6_1/bin 是因为如果你遇到修订版本到2 (比如 1.7.6_2) 或升级了小版本 (1.7.7),opt 路径依然有效,而 Cellar 路径则必须更新到新的版本。

opt 路径对于 non-keg-only 的 formula 依然有效,但是 non-keg-only formula 一般都会软链接到 /usr/local/bin,且该路径已经在 PATH 中了,所以没必要使用 opt 路径。如果你 brew unlink 了一个 non-keg-only formula,那它就变成一个 keg-only formula,这时通过前置它的 opt 路径到 PATH,即使你 unlink 了它,你依然可以继续使用这个 formula。这在你安装两个有冲突的 non-keg-only 的 formula 时非常有用,你可以 unlink 其中一个来解决冲突。