search
LoginSignup
1

More than 1 year has passed since last update.

posted at

updated at

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

追記: 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

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
What you can do with signing up
1