如何在M1 Macbook上使用Rosetta 2运行Homebrew安装程序

131

我正在使用 M1 MacBook。 尝试安装 Homebrew 时出现以下错误:

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

Homebrew is not (yet) supported on ARM processors!
Rerun the Homebrew installer under Rosetta 2.
If you really know what you are doing and are prepared for a very broken experience you can use another installation option for installing on ARM:
  https://docs.brew.sh/Installation

那么我该如何“在 Rosetta 2 下重新运行 Homebrew 安装程序。”?

9个回答

164
在Homebrew的github上得到了一位开发者的回答https://github.com/Homebrew/brew/issues/9173
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

使用这个来安装软件包:
arch -x86_64 brew install <package>

如果您尚未在ARM Mac上安装Rosetta 2以模拟Intel CPU,您将会收到错误提示:arch: posix_spawnp: /bin/bash: Bad CPU type in executable
请使用以下提示安装Rosetta 2:
softwareupdate --install-rosetta

3
谢谢这个。我的开发环境恢复得不错,相当于原来的环境。我一直在使用vagrant和virtualbox运行程序,但virtualbox无法工作。所以我使用homebrew重新创建了它。我买了Mac mini M1,运行得非常好。运行时很凉爽,风扇还没有转过。但我的2016年MBP i7就不一样了,虽然能用但会变热且声音大。 - w1n78
如果这个方法不起作用怎么办?当我在前面加上 arch -x86_64 时,单行安装命令会失败并显示相同的错误信息(“在 M1 上不支持”)。有什么提示吗?我似乎是唯一遇到这个问题的人。另外,我尝试使用 Rosetta 运行终端(结果相同),而且我确实已经安装了 Rosetta。任何帮助都将不胜感激! - flypenguin
好的,凭直觉我将我的终端登录 shell 从 Big Sur 默认的 zsh 改为 bash,然后它就可以工作了。只用了我三天的时间,也许对其他人有所帮助 :) - flypenguin
2
@flypenguin 你先运行了 softwareupdate --install-rosetta 吗?如果是的话,你尝试过在此之后重启终端或者机器吗?可能macOS在你这样做之前无法识别它现在可以运行x86_64代码。 - Nathan2055
我在我的新的Mac mini M1上苦苦挣扎了一天左右,试图让PHP与SQL Server配合使用。这个方法解决了问题。要安装PHP的SQL Server扩展,请按照此处找到的说明进行操作:https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/install-microsoft-odbc-driver-sql-server-macos?view=sql-server-ver15&viewFallbackFrom=sql-server-ver17,但请确保使用前缀brew by arch-x86_64。 - Benjamin
3
我遇到了一个错误:错误:无法在 ARM 默认前缀(/opt/homebrew)下安装 Rosetta 2! 要在 ARM 下重新运行,请使用: arch -arm64 brew install ... 要在 x86_64 下安装,请将 Homebrew 安装到 /usr/local。这个方法解决了我的问题: arch -x86_64 /usr/local/Homebrew/bin/brew install node@10 - Jarzka

73
我安装了两个版本的brew,一个是使用Rosetta2运行的Intel版本,安装在/usr/local/bin目录下,另一个是原生运行的Arm版本,安装在/opt/homebrew/bin目录下。现在一切都正常工作,我不需要使用Rosetta启动iTerm。
我有这些别名来访问这两个版本。
ibrew='arch -x86_64 /usr/local/bin/brew'
mbrew='arch -arm64e /opt/homebrew/bin/brew'

我首先在我的路径中有原生版本。
path=( /opt/homebrew/bin /opt/homebrew/opt /usr/local/bin /usr/bin /bin /usr/sbin /sbin /Library/Apple/usr/bin )

现在我可以尝试使用mbrew searchmbrew install。如果它们能正常工作,我就可以使用本地程序了。例如:
mbrew install ag

如果brew失败了,我会尝试从源代码构建,输出详细信息,例如。
mbrew install -sv rust

请注意,这可能需要一段时间,而且可能仍然失败。
如果仍然失败(而且对我来说,mbrew install -sv go 导致分段错误),我有两个选择。使用 ibrew searchibrew install 来获取 Intel 构建版本,或者检查详细输出并寻找问题依赖项。在某些情况下,对依赖项进行 install -s 就足以使本机 brew 正常工作。
我必须强调,本机 brew 总是打印这个警告。
Warning: You are running macOS on a arm64 CPU architecture.
We do not provide support for this (yet).
Reinstall Homebrew under Rosetta 2 until we support it. 

所以请自行决定是否继续。

为了完整起见,并假设您已经安装了iTerm2、Rosetta2和Xcode命令行工具,我按照以下步骤在Rosetta下安装了brew(感谢之前在这个页面上发布过的所有人):

  1. 将已安装的iTerm2.app应用程序复制到iRosetta2.app
  2. 按下command+I键以获取iRosetta.app的“获取信息”,然后点击“使用Rosetta2打开”
  3. 运行iRosetta2,并使用来自https://brew.sh的命令

就像这样

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)
alias ibrew='arch -x86_64 /usr/local/bin/brew' # put this in ~/.zshrc

我这样做是为了安装原生的brew,参考了其他Stack Overflow贡献者和Homebrew替代安装站点的方法,使用iTerm2而不需要打开Rosetta2
mkdir ~/homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
sudo mv ~/sudo mv homebrew /opt
mbrew='arch -arm64e /opt/homebrew/bin/brew' # for .zshrc
export PATH="/opt/homebrew/bin:/opt/homebrew/opt:$PATH" # also for .zshrc

编辑

时间过去了,我根据Fernando García Redondo的观察,将架构更改为arm64e。现在关于不支持Arm架构的警告已经消失了,Rust和Go可以顺利安装,而且无需从源代码编译。我猜Homebrew的好人们在圣诞节期间努力工作。谢谢!

编辑于2月21日

Homebrew团队宣布他们支持Apple Silicon。所以我想知道是否可以删除我的别名,只使用brew来为Apple Silicon安装。简短的答案是否定的!

如果你在/usr/local下运行brew而没有使用arch -x86_64,它会抱怨/usr/local被保留为Intel的默认前缀,需要使用/opt/homebrew。所以我将保留我的两个别名,首先尝试mbrew,只有在本机brew失败时才使用ibrew。


1
嗨@nigel。我在这里是macOS的新手。在“arch”之后何时使用“arm64”,何时使用“arm64e”?“man arch”将“arm64e”返回为M1,将默认的arm64返回为“arm64”。 - Fernando García Redondo
@FernandoGarcíaRedondo,你的观察很好。我已经修改了我的别名,并使用mbrew重新安装。现在它运行得更好了,可能是因为Homebrew的人做出了改进。 - Nigel Davies
用 ARM Native 和 Rosetta 的结合是一个很好的方法,但我选择使用 Homebrew 的原因是它更方便;因此,我在等待它可以自己解决架构问题,以便能够切换 Intel/ARM 二进制文件。 - kakadais
+1,你刚刚阻止了我卸载原生Homebrew安装程序,以获取仅通过Rosetta访问的程序。此外,还有一些东西没有安装Rosetta就无法运行,例如gdb。 - Clumsy cat

55

另一种方法是进入Finder中的应用程序,选择Terminal并按下 +I,然后勾选“使用Rosetta打开”选项。

如果格式不正确,请见谅,这是我第一次发布解决方案。


18
注意,这将默认将 Terminal.app 始终模拟英特尔 CPU。如果您正在转换并希望所有旧脚本都能正常工作,这可能很有用,但可能不是您想要的。 - Jacob Ford
1
我正在尝试在新的Mac上使用Rosetta运行pod install,但它无法正常工作。出现了相同的错误。我想知道这是为什么。 - Jacobo Koenig
14
这个问题已经被广泛讨论,对此的一个改进是复制Terminal.app并选择“使用Rosetta打开”该副本。在Homebrew中使用Intel仿真版本。完美。 - Jonathan Dagle
1
这不是我要采用的解决方案,但我认为这是一个有帮助的建议。谢谢。 :) - Justin Force
1
我弄清楚了。在复制并标记为“使用Rosetta打开”之前,您必须先安装Rosetta 2。否则它将无法正常工作。 - Houman
显示剩余2条评论

24
最简单的运行Homebrew的方法是使用Rosetta 2。
1. 为Rosetta复制您喜欢的终端
找到您喜欢的终端,右键点击进行复制,并重新命名以便更容易识别。在这个例子中,我使用的是Big Sur 11.2.1上的默认终端应用程序。

duplicate-terminal-right-click-option

duplicate terminal rosetta m1 homebrew

右键点击Terminal Rosetta,然后选择获取信息以检查使用 Rosetta 打开选项。

enter image description here

2. 安装Homebrew

打开Rosetta终端并运行以下命令:

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

运行此命令将要求您输入密码,然后它将提供安装的所有信息以及将创建的新目录。

3. 使用Homebrew

一旦安装了Homebrew,您就可以开始使用它来将所需的软件包安装到M1 Mac上。

运行以下命令以获取brew帮助:

brew help

安装一个软件包,您可以运行以下命令:
brew install packagename

这就是关于在Apple M1 Mac上安装和开始使用Homebrew的全部内容。
编辑:谢谢大家!点赞帮助其他开发者!Homebrew 3.0.0现在正式支持苹果芯片(https://brew.sh/2021/02/05/homebrew-3.0.0/

15
在安装了Rosetta之后,我添加了一个别名,这样我就可以像平常一样使用brew install <package>命令了。 alias brew='arch -x86_64 brew' 我同意其他人的观点,你需要在原始命令前面添加arch -x86_64,所以我想把这个别名包含进来,以帮助未来任何查看这个帖子的人。

为什么不将其别名为brew,以适用于Intel Brew。然后您可以稍后添加mbrew =“arch -arm64 / opt / homebrew / bin / brew”以获取本机构建? - Nigel Davies
1
嗨,尼格尔,我不确定你的意思。你能澄清一下吗?我认为我将它别名为brew,但是你是否建议将其别名为ibrew以区分英特尔和ARM? - Echen
嗨,Echen,以下是我的详细答案,请查看。 - Nigel Davies
我添加了一个别名以跳转到Rosetta shell:alias ros="arch -x86_64 zsh" - 然后所有后续命令都在x86下运行。 - Sean Clark Hess

9

7

0
这条消息表明应该重新运行安装程序,专门针对ARM架构。如果已经安装了brew,可以运行以下命令:
 arch -arm64 brew install yourApp

-2

您可以更改终端的设置,以使用Rosetta启动它。 转到您的应用程序/实用程序文件夹,在终端应用程序上右键单击并选中复选框“使用Rosetta打开”

但说实话,我已经安装了没有Rosetta的Homebrew。昨天刚刚删除了x86版本,并安装了一个新的没有Rosetta的版本。


复制到Khairul的答案。 - Erkki Nokso-Koivisto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接