Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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
LwVe9
現世でのたうつ
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away