LoginSignup
3
1

More than 3 years have passed since last update.

apple silicon macにhomebrewでシェル環境を作る覚え書き

Last updated at Posted at 2021-01-04

追記: 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
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1