Homebrew 3.0.0 での Apple Silicon 版と Intel 版の使い分け。
Homebrew で 3.0.0 で Apple M1 に正式対応したようですが、あくまで brew 本体が M1 に対応しただけで、brew install でインストールされたパッケージ ( bottle) は部分的に M1 対応バイナリがあったりなかったりします。
M1 対応していない bottle は、結局 Intel 用の homebrew を別インストールして共存させる必要があるようです。
Step 1. brew のインストール
- Rosetta をインストール
- 他のアプリをインストール時に 1回は聞かれると思いますが、まだだったら下記を。
$ softwareupdate --install-rosetta --agree-to-license
- M1 対応版をインストール (普通に公式ページに載っている方法)
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Password:
==> This script will install:
/opt/homebrew/bin/brew
/opt/homebrew/share/doc/homebrew
/opt/homebrew/share/man/man1/brew.1
/opt/homebrew/share/zsh/site-functions/_brew
/opt/homebrew/etc/bash_completion.d/brew
/opt/homebrew
.....
- Intel 版をインストール (頭に arch -x86_64 をつける)
$ arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Password: ==> This script will install:
/usr/local/bin/brew
/usr/local/share/doc/homebrew
/usr/local/share/man/man1/brew.1
/usr/local/share/zsh/site-functions/_brew /usr/local/etc/bash_completion.d/brew /usr/local/Homebrew
.....
- 2種類の brew はご覧のように、brew 本体も install された bottle も別のディレクトリ群に格納されるため、混じることはありません。
Step 2. PATH を通す
- やりたいこと
- brew で install された bottle は、M1 版がある時は優先、なければ Intel 版を見に行くようにしたい
- 直接下記のようにベタっと path を M1 x 2種, Intel x 2種下記並べてもよいのですが
export PATH=/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/local/sbin:$PATH
- インストール時に書かれている一文 eval $(… shellenv) を 2回並べることで、見やすくはなります。PATH に追加された結果は先ほどと同様になります。
eval $(/usr/local/bin/brew shellenv)
eval $(/opt/homebrew/bin/brew shellenv)
- 優先するはずの M1 が後に書かれているのはなんで? と思うかもしれませんが、これで合っています。なぜならこの shellenv は、常に既存の PATH の先頭に乗っかって追加しようとするからです。
Step3. brew を使う時
- 何もつけずに brew install すると M1 版が起動する (PATH で優先しているから)
$ brew install ...
- 頭に arch と絶対パスをつけると Intel 版が起動する
$ arch -x86_64 /usr/local/bin/brew install ...
- Note: 面倒だからといって /usr/local/bin を省略するとおこられます
(M1 版の brew が Intel アーキテクチャで起動されてしまったから)
$ arch -x86_64 brew install rbenv
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
To rerun under ARM use:
arch -arm64 brew install ...
To install under x86_64, install Homebrew into /usr/local.
- Note2: Terminal の使い分けは必要ありませんでした。
- Rosetta 指定したものを起動してからでないとだめ、という記事を見かけますが、多分 Homebrew 3.0.0 以前の beta の時はそうせざるを得なかったのではと思います。
Step 4. 本当にちゃんと別管理になってるの?
$ arch -x86_64 /usr/local/bin/brew list
autoconf pkg-config readline
$ brew list
anyenv libffi
autoconf libidn2
bdw-gc libtasn1
boost libtool
c-ares libunistring
emacs nettle
gettext nghttp2
git node
gmp openssl@1.1
gnutls p11-kit
grep pcre
guile pcre2
icu4c pkg-config
jansson readline
jemalloc reattach-to-user-namespace
libev source-highlight
libevent unbound
大丈夫そうです。
ものすごい熱量で M1 対応が進んでいるようですし、brew 側も遅かれ早かれ 1種類だけで、両方を統合管理できるようになると思いますが、ひとまずこの方法でいきたいと思います。
おしまい。
コメントを残す
コメントを投稿するにはログインしてください。