🍎

Homebrew + asdf with Apple M1

2022/01/16に公開

M1 Macでhomebrewとasdfを使った環境構築方法をメモ。

Homebrewの設定

インストール方法 に従ってインストールする。
今回は /opt/homebrew にインストールされていると想定する。

切り替え設定

別途x86_64版を導入している場合は ~/.bash_profile もしくは ~/.zprofile に切り替えの設定を書いておく。

if [ "$(uname -m)" = "x86_64" ]; then
    eval $(/homebrew/bin/brew shellenv)
else
    eval $(/opt/homebrew/bin/brew shellenv)
fi

export HOMEBREW_CACHE="$(brew --prefix)/cache"

if [ -f ~/.bashrc ] ; then
    . ~/.bashrc
fi

coreuitlsなどのPATHを通している場合は $(brew --prefix [command]) もしくは $HOMEBREW_PREFIX に置き換える。

export PATH="$HOMEBREW_PREFIX/opt/coreutils/libexec/gnubin:$PATH"
# 以下と同じ
#export PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

asdfの設定

インストール方法 に従ってインストールする。

対応が必要ないもの

versionは確認済みのもの。

対応が必要なもの

  • python: 3.9.7~, 3.10.0
    • ビルドエラー
  • ruby: 2.6.5
    • 環境変数が必要: RUBY_CONFIGURE_OPTS='--build aarch64-apple-darwin20.6' RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC
  • postgres: 11.14, 12.1
    • 環境変数が必要: POSTGRES_CONFIGURE_OPTIONS='--build aarch64-apple-darwin20.6' LDFLAGS="-L$(brew --prefix openssl)/lib" CPPFLAGS="-I$(brew --prefix openssl)/include"

おまけ

ターミナル

アプリのプロパティの Rosettaを使用して開く を有効にするとx86_64互換で実行される。
(Finderから アプリケーション/ユーティリティ/ターミナル.app を右クリックして 情報を見る を選択すると設定が開く)

# Rosettaを費用して開く off
$ uname -m
arm64
# Rosettaを費用して開く on
$ uname -m
x86_64

archコマンドで一時的に使い分けることも可能:

# arm64
$ arch -x86_64 bash
$ uname -m
x86_64
# x86_64
$ arch -arm64e bash
$ uname -m
arm64

Terraform

対応していないものは自前でビルドして ~/.terraform.d/plugins 以下に配置する。
ただしhashが変わってしまうので .terraform.lock.hcl の取り扱いに注意が必要。

hashicorp/terraform-provider-template での例:

$ git checkout v2.2.0
$ go mod vendor
$ go build .
$ install -D terraform-provider-template ~/.terraform.d/plugins/registry.terraform.io/hashicorp/template/2.2.0/darwin_arm64/terraform-provider-template

Discussion