Homebrew 在 M1 上的迁移工作

背景

最近换了手头的 Mac 电脑。从原来的 intel 平台,改成了 M1。通过 Apple 官方的迁移助手同步完数据后,发现在新电脑上 Homebrew 有比较严重的兼容问题,而官方也提供了相应的 M1 版本。因此需要手动迁移一下。

差异

两者最主要的差异就是 Homebrew 的安装位置不同,从 /usr/local/bin/brew改成了/opt/homebrew/bin/brew

由于 /user/local/bin目录已经被系统添加到环境变量中,而/opt没有。因此迁移到 M1 后,有手动添加环境变量的操作。

迁移

1. 从 Intel 版本的 Homebrew 中获取已安装程序列表

借助 brew bundle 命令,我们可以导出已安装程序列表。

1
brew bundle dump

文件内容大致如下:

1
2
3
4
5
6
7
8
9
10
11
...
tap "homebrew/cask-versions"
tap "homebrew/core"
brew "abseil"
brew "libtiff"
...
cask "picgo"
cask "postman"
cask "qq"
cask "qqmusic"
...

2. 安装 M1 版本的 Homebrew

参考官方文档,使用下面的命令安装 Homebrew

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

这里,如果曾经用 gnu 的工具包替换系统内置的 bsd 工具包的时候,可能会出现下面这种错误。

1
stat: cannot read file system information for '%g': No such file or directory

解决办法也比较简单,借助 whereis命令找到 stat 工具的位置后,重命名一下就行

3. 在 M1 的 Homebrew 中安装旧的程序列表

这里还是要借助brew bundle来批量安装

1
brew bundle install --file Brewfile

这里也有个坑,由于cask下的程序,已经被迁移助手转移到了当前电脑上,因此Homebrew无法正常安装这些程序,出现如下错误

1
Warning: It seems there is already an App at

解决办法就是借助brew install命令重新强制安装一下

1
brew install a b c d --cask --force

4. 卸载 Intel 版本的 Homebrew

首先,从官方下载卸载脚本

1
curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh > uninstall.sh

给卸载脚本指定 Intel 版本 Homebrew的路径进行卸载。

1
/bin/bash uninstall.sh --path=/usr/local

结语

完结撒花

参考