▎介绍
Homebrew 作为 macOS 上强大的包管理器,为系统软件提供了非常方便的安装方式,独特式的解决了包的依赖问题,并不再需要烦人的 sudo,一键式编译,无参数困扰,值得拥有。
- Official Site: https://brew.sh/
- Source Code: https://github.com/Homebrew/brew
▎安装
Homebrew 依赖于 Xcode Command Line 和 Ruby。可以在终端中输入下面命令查看本机的 Ruby 安装情况。
1 | $ ruby -v |
确认 Ruby 可被正常使用后,继续输入下面命令,进行 brew 的安装:
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
> 安装背后
Homebrew 将本机的 /usr/local
目录初始化为 Git 的工作树,并将目录所有者变更为 $USER
,也就是你当前所操作的用户,所以以后的操作都不再需要 sudo,这是安全的,全新的 macOS 默认是没有该目录的,也就是说该目录并非是系统所有。
在 /usr/local
下创建以下目录:
1 | - bin 用于存放所安装程充的启动链接(相当于快捷方式) |
上述为 Homebrew 所用用到的几个目录,其它也有使用,但于 brew 关联不大,请参考 Unix 系统相关资料。
最后,将 brew 的程序启动项放到 /usr/local/bin
下,所以,必须保证该目录属于 Bash 的环境变量,关于如何配置环境变量,请查阅相关资料。
▎开始使用
用 brew 安装第一个程序,这里使用 node 作为示例
1 | $ brew install node |
有些程序会同时提供两个下载,一个为稳定版,另一个为尝鲜版(通过head参数获取),如果已安装过稳定版的程序后,想同时安装尝鲜版可以通过 force 参数来完成。
1 | $ brew install --HEAD node |
接下来可以看到 brew 启动下载,通过 Formula 目录中的 node.rb 文件中的路径去下载源码,然后就是 configure,同时指定 prefix 到 Cellar 目录,接下来 make & install。最后,将 node 的运行文件通过软链接到 /usr/loca/bin 下,方便命令行启用。因为 /usr/local 的目录所有者为当前用户,所以这里不再需要 sudo 进行提权,很方便。
然后,可以很方便的通过以下命令来卸载所安装程序
1 | $ brew uninstall node |
1 | # 显示当前所有已安装程序的名称 |
Homebrew 提供 update 参数来对系统进行更新,其实就是对 Formula 目录进行 Git pull,将服务器最新的程序安装配置文件同步到本地,同时,会标明新加入和更新,同时会对本机已经安装并有更新的程序用*号来标名。
1 | $ brew update |
通过 outdated 命令查看哪些 Formula 有更新
1 | $ brew outdated |
如果看到已安装程序有更新版本,像 Node.js 刚发布 13.5.0,这里运行完 brew update,会看到node*的标志出现,运行以下命令来安装最新版的 Node.js 13.5.0。
1 | $ brew upgrade [formula] |
这时会出现和安装一样的过程,再次在终端中输入 node -v 可看到已是最新版本。但如果同时出现多个程序的升级,一个个通过程序名升级未免过于麻烦,这时,试下下面的这条命令,所有有更新的程序都会被自动下载,编译安装。
安装完最新版本后,旧的版本会自动删除,但仍有旧版本存在的可能性,可通过 cleanup 命令来删除,和 upgrade 一样,提供单程序和所有程序旧版的移除。
1 | $ brew cleanup [formula] |
如何知道 Homebrew 官方是否有某个程序的安装呢,通过 search 命令来查看
1 | $ brew search [formula] |
查看已安装程序信息,brew 提供了 info 和 list 参数:
1 | $ brew info [formula] |
▎介绍 Bottles
Mac 的平台特性比较标准和简单,比如说只有不多的 macOS 版本,CPU 架构也会比较简单只有 X64 64Bit。
在这种条件下,如果每个人都要下载源码,然后再 build,会浪费大量的时间。如果能按平台、架构来提前构建好,直接使用编译后的二进制,就会省下很多时间。
这就是 Homebrew Bottles。
brew 在安装应用时,会先去查一下对应机器和环境的 Bottle 是否存在,如果存在就下载。如果不存在或下载失败,则进行二进制源码下载、构建安装。
▎介绍 Cask
这是 cli 的部分:https://github.com/Homebrew/homebrew-cask
core,也就是最常装的 app,都在这里:https://github.com/Homebrew/homebrew-core
https://github.com/Homebrew/homebrew-cask-fonts
Homebrew-Cask extends Homebrew and brings its elegance, simplicity, and speed to macOS applications and large binaries alike.
一些传统软件的安装都是手工的点击下一步,如何实现自动化呢,Brew cask 就是做这件事情的。
像一些图形软件,商业软件,都可以通过 Cask 来进行安装,像 Google Chrome, VSCode,iTerm2 等。
homebrew-cask 现在默认集成在主程序中。
主要命令
1 | $ brew cask tap |
常用的 Casks
cask-fonts
一些开源的字库,都在这里被包含了。
▎Formula 分析
所有的 formula 都在这个仓库里:https://github.com/Homebrew/homebrew-core
在终端中输入 brew edit [formula],启用默认编辑器打开该 formula。
1 | class Wget < Formula |
可以看出几个属性:
- url 是指当前稳定版的下载路径
- head 是尝鲜版的路径,可以使用 github 项目路径
- homepage 指向到 formule 的官方网站
- sha256 则对应 formula 的下载文件校验值
- depends_on 属于用于解决依赖关系,brew如发现当前程序依赖其它程序,便会检查依赖程序是否已经安装,如未安装,则会先安装依赖程序的稳定版。
- options 用来指定默认编译参数
- install 则是安装的过程,指定编译参数,make & install
- caveats 用作安装完成之后的输出提示。
> 制作自己的 Formula
Homebrew 提供 create 命令来快速创建一个新的 Formula,通过指定下载文件源码路径,或 github 程序位置(含可用版版本号,Git Tag)即可,创建完成后,会自动打开所新建formula的配置文件,填入homepage等参数,然后在终端中通过audit命令来进行检验。
1 | $ brew create http://example.com/foo-0.1.tar.gz |
当然,如果你想将该程序保存到github上,可以直接fork Homebrew的项目,然后通过git进行commit,push到自己的fork中,也可以将该文件合并到官方的库中,参见github。
1 | $ git commit Library/Formula/foo.rb |
▎国内用户
因为访问 github 及 bottles 比较慢,所以这样使用替换访问源的方式,来加速。
分别是 homebrew 本身,以及 homebrew bottles 两个部分的替换。
> 替换及重置 Homebrew 默认源
Homebrew 自身是使用 Github 来更新的,所以替换的方法是将 git 地址指向到新的境内的地址上即可。
- 清华
1 | git -C "$(brew --repo)" remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git |
- 还原为默认
1 | git -C "$(brew --repo)" remote set-url origin https://github.com/Homebrew/brew.git |
> Homebrew Bottles 源
1 | echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles' >> ~/.bash_profile |
▎问答:
Q: 如何将第三方提供的 Formula 在本地使用?
A: Homebrew 暂不提供第三方源的支持,但官方已表示未来会加入该功能,所以现在能做的就是将第三方 formula 下载后,放到 /usr/local/Library/Formulas/ 然后用文件名作 formula 正常安装。
这里也提供一个非官方的源,安程程序会更多一些:https://github.com/adamv/homebrew-alt
Q: 关于 Ruby 的安装
A: 对于 Ruby 自身,更推荐使用 rbenv 来进行多版本的安装管理。
Q: 如何安装旧版本的 Formula?
A: 参见 http://stackoverflow.com/questions/3987683/homebrew-install-specific-version-of-formula
Q: 尝试着加了几个 Formula,怎么删除?
A: 到 /usr/local/Library/Formula 目录下,找到所加的formula对应文件,删除即可。如果你了解git,也可到/usr/local下运行 git clean -d -f,来清除未被track的脏数据。