Apple Silicon Mac无法卸载残留Intel版Homebrew问题求助
根因说明
通过Time Machine从Intel芯片Mac迁移到Apple Silicon芯片Mac后,旧版Intel架构Homebrew会残留在Intel默认安装路径/usr/local下。官方卸载脚本默认按当前设备CPU架构匹配Homebrew安装路径,在Apple Silicon设备上只会识别ARM版默认路径/opt/homebrew,无法自动定位/usr/local下的残留;加上/usr/local下大量文件迁移后归属root权限,无提权运行脚本会触发大量权限报错,最终导致清理不彻底,安装ARM版时触发前缀不兼容报错。
操作步骤
备份旧版已安装软件列表
终端执行brew bundle dump,当前目录会生成Brewfile文件,记录旧版Homebrew安装过的所有软件包,后续装完ARM版Homebrew可直接通过该文件批量恢复,不用逐个记录之前安装的软件。准备官方卸载脚本
通过Homebrew官方公开渠道获取标准uninstall.sh卸载脚本保存到本地,终端进入脚本所在目录,执行以下命令给脚本添加执行权限:chmod +x uninstall_brew.sh通过环境变量指定卸载路径是脚本原生支持的能力,不需要修改脚本源码、不需要强行伪装架构运行,无系统风险
提权指定路径运行卸载脚本
执行以下命令,强制指定卸载/usr/local路径下的Intel版Homebrew,加sudo提权解决之前的权限不足问题:sudo UNINSTALL_BREW_PREFIX=/usr/local arch -x86_64 ./uninstall_brew.sh运行过程中遇到卸载确认提示输入
y回车,等待脚本自动执行完成即可。清理脚本未删除的明确残留
脚本执行完成后,执行以下命令删除明确属于Homebrew的残留文件,不会误触系统文件和自行安装的其他软件:sudo rm -rf \ /usr/local/Cellar \ /usr/local/Caskroom \ /usr/local/Homebrew \ /usr/local/bin/brew \ /usr/local/share/zsh/site-functions/_brew \ /usr/local/etc/bash_completion.d/brew \ /usr/local/var/homebrew \ ~/Library/Caches/Homebrew \ ~/Library/Logs/Homebrew注意:不要随意删除
/usr/local下无法确认来源的文件,比如remotedesktop、.com.apple.installer.keep是macOS系统自带文件,删除会引发功能异常;如果/usr/local/git这类目录是你手动安装的其他软件,不要删除。清理无效软链接
执行以下命令清理/usr/local/bin下指向已删除Homebrew目录的无效软链接:cd /usr/local/bin && ls -l | grep "../Cellar/" | awk '{print $9}' | xargs sudo rm/usr/local/lib、/usr/local/share等目录下如果存在指向已删除Cellar目录的软链接,可按相同逻辑清理,拿不准来源的软链接不要随意删除。验证清理结果
终端执行which brew,如果返回brew not found说明旧版Intel Homebrew已经彻底清理干净。如果仍返回路径,直接执行sudo rm -rf 对应返回的brew路径即可。安装ARM版Homebrew
清理完成后直接运行官方Homebrew安装脚本即可,安装完成后按照终端提示将Homebrew路径加入当前使用的shell配置文件(使用zsh就修改~/.zshrc,使用bash就修改~/.bash_profile),添加完成后执行source 对应修改的配置文件路径让配置生效,再执行brew -v确认安装路径为/opt/homebrew即安装成功。后续在之前备份的Brewfile所在目录执行brew bundle install就能批量恢复之前安装的软件包。
内容的提问来源于stack exchange,提问作者Autechre

