在M1 芯片 Mac 上使用 Homebrew
发布网友
发布时间:2024-09-27 08:27
我来回答
共1个回答
热心网友
时间:2024-11-14 06:32
Homebrew,作为Mac上管理软件包的实用工具,目前尚未完全适应搭载Apple silicon的新Mac机型。尽管如此,Homebrew在新Mac上仍可用,并已发布了支持ARM架构的实验性版本。以下是我设置过程中探索出的可行、相对实用的方法。
在安装ARM版Homebrew时,需要将其安装在/opt/homebrew路径下,而非以往的/usr/local/Homebrew。由于官方的安装脚本还未更新,可以通过以下命令手动安装:
(注:如果安装和使用过程中报错,可能是因为当前用户对于/opt/homebrew路径没有权限。对此,可以通过sudo chown -R $(whoami) /opt/homebrew接管该目录。)
虽然手动安装了ARM版Homebrew,但在终端中运行brew命令并不能直接启动该版本。这是因为默认情况下,ARM版Homebrew用来安装程序的路径/opt/homebrew/bin并未在环境变量PATH中,因此终端无法检索到该路径下的brew程序。
为此,编辑配置文件~/.zshrc,加入以下内容:
(注:本文推定读者使用macOS Big Sur的默认终端zsh,如使用bash或fish,则修改~/.bashrc或~/.config/fish/config.fish,后同。)
重新启动终端后,直接执行brew即可启动ARM版Homebrew。
为什么ARM版Mac要使用/opt路径?
根据《文件系统层次结构标准》(Filesystem Hierarchy Standard,主要为Linux系统制定,但对具有共同UNIX基因的macOS也有参考价值):
历史上,/usr/local主要用于放置在本地编译并另行安装的程序,避免与/usr下的系统自带版本冲突;而/opt则用于安装非系统自带的、第三方预先编译并发行的独立软件包。
显然,在如今的macOS使用场景下,用户很少需要自行编译软件包,/usr/local和/opt的区分在一定程度上已成为名义上的了。Homebrew启用/opt作为ARM版的安装路径,可能更多是出于确保与X86版相互区隔的考虑。
接下来,需要安装X86版Homebrew作为备用。由于很多软件包目前还未适配ARM架构(可以在Homebrew的Apple silicon issue页面查询),无法通过ARM版Homebrew安装。为此,需要先启动一个X86环境的终端。
实际上,注意到在任何命令前增加arch-x86_64,就可以以X86模式运行该命令。因此,运行以下命令即可启动一个X86模式终端,使得之后运行的命令都在X86模式下运行:
此时,运行Homebrew的官方安装脚本即可完成X86版Homebrew的安装。
系统中目前有了两个brew程序,即X86版的/usr/local/bin/brew和ARM版的/opt/homebrew/bin/brew。那么,当在终端中执行brew命令时,系统会以哪个为准呢?
当存在重名程序时,终端会按照重名程序在环境变量PATH中的先后顺序选择要执行的版本。由于之前配置~/.zshrc时,将ARM版Homebrew的路径放在了PATH的最前面,因此执行brew时,位于/opt/homebrew/bin/brew的ARM版将被优先运行。如果要运行X86版,则需要手动输入完整路径arch-x86_64/usr/local/bin/brew。
如果觉得输入这么长的命令过于麻烦,可以在~/.zshrc中为两个版本分别设置简称(alias):
这样,执行abrew install可以调用ARM版Homebrew安装软件包,执行ibrew install可以调用X86版,从而不容易混淆。
至于应该使用哪个版本的Homebrew安装软件包,需要区别考虑:
如果你在拿到M1版Mac以后,选择了从旧Mac迁移数据或恢复Time Machine备份,那么系统中可能已经有了遗留的X86版Homebrew和用它安装的软件包。此外,你可能也希望将以往惯用的软件包无遗漏地迁移到新Mac。这些情况下,可以使用Homebrew Bundle功能辅助迁移工作。
要导出使用X86版Homebrew安装的软件包列表,运行以下命令就能在当前目录下得到一个名为Brewfile的备份文件。该文件可以用普通文本编辑器打开,列举了所有已安装软件包、添加的第三方软件源(tap)、Homebrew Cask管理的GUI程序和mas-cli管理的Mac App Store程序:
记下Brewfile的路径。然后,使用ARM版Homebrew导入其内容并安装:
就完成了迁移。
需要注意的是,如果你是在同一台机器的两版Homebrew间迁移,那么并不需要迁移通过Homebrew Cask和App Store安装的GUI程序(Homebrew也不会允许覆盖安装)。这时,可以手动编辑上述Brewfile,将以cask和mas开头的记录删除,然后再通过brew bundle导入。
如果想让ARM版Homebrew接管已经安装的Homebrew Cask软件,只要将位于/usr/local/Caskroom下的各文件夹移动到/opt/homebrew/Caskroom即可: