追記: 2021/2/11
2/5にリリースされたhomebrew 3.0のインストールスクリプトでは、動作しているアーキテクチャを判別して、
- apple silicon macなら
/opt/homebrew
へ - intel macなら
/usr/local
へ
インストールを行なうようになったため、「/opt/homebrew
にarm64なhomebrewをインストール」の項目にある手順は不要になった模様。
なお、rosetta2上での環境の共存が必要な場合に他の項目は有効なため、この記事は残しておく。
参考: https://brew.sh/2021/02/05/homebrew-3.0.0/
はじめに
なんとなく固まってきたのでメモ。
ベストプラクティスとかわからん。
環境
- macOS BigSur (11.1)
- MacBook Air (M1 2020)
/usr/bin/local
にx86なhomebrewをインストール
未検証だけど、terminal.appをrosetta2で動かさなくてもいける(はず?)
→動作を確認
arch -x86_64 /bin/bash -c \
"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
/opt/homebrew
にarm64なhomebrewをインストール
https://docs.brew.sh/Installation
https://qiita.com/usamik26/items/601f5612bd3f8a21cc41
これらを参考に
cd /opt
sudo mkdir homebrew
sudo chown ${USER}:staff homebrew
curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
.zshenv
などに書き込む諸々
# x86かarm64か
function runs_on_ARM64() { [[ "$(uname -m)" = 'arm64' ]]; }
function runs_on_X86_64() { [[ "$(uname -m)" = 'x86_64' ]]; }
# homebrewのインストール先パスのチェック
BREW_PATH_OPT='/opt/homebrew/bin'
BREW_PATH_LOCAL='/usr/local/bin'
function brew_exists_at_opt() { [[ -d ${BREW_PATH_OPT} ]]; }
function brew_exists_at_local() { [[ -d ${BREW_PATH_LOCAL} ]]; }
# パス周り
setopt no_global_rcs #disable path helper
typeset -U path PATH
path=($path /usr/sbin /sbin)
if runs_on_ARM64; then
# /opt/homebrewを上位にpathに追加、ディレクトリの確認は(N-/)
path=($BREW_PATH_OPT(N-/) $BREW_PATH_LOCAL(N-/) $path)
# /opt/homebrew/bin以下、/usr/local/bin以下にある場合
if brew_exists_at_opt && brew_exists_at_local; then
# /usr/local/bin 以下を明示して実行
function lbr() { ${BREW_PATH_LOCAL}/$@; }
# arch コマンドを使って切り替え
function x86() { arch -x86_64 $@; }
function arm() { arch -arm64 $@; }
fi
elif runs_on_X86_64; then
# x86_64上で動作している場合、/opt/homebrewのチェックは行わない。
# arm64上で動作するzshの上でrosetta2のシェルが動作した場合、/usr/local/binが上位に。
path=($BREW_PATH_LOCAL(N-/) $path)
fi