M2に新規にhomebrew環境を用意する
M2Macでパッケージをインストールしようとしたところ次のようなエラーが出ました。
Error: Cannot install in Homebrew on ARM processor in Intel default prefix (/usr/local)!
Please create a new installation in /opt/homebrew using one of the
"Alternative Installs" from:
https://docs.brew.sh/Installation
You can migrate your previously installed formula list with:
brew bundle dump
基本的にはターミナルで表示されたエラーの内容を確認すれば解決するはずですが、以前設定した環境が残ってしまっていたのかうまくいかなかったため記事に残します。他の日本語で書かれた記事も同様ですが、あくまで記事に起こした時点で解決した方法です。
新しくhomebrewを用意する目的
macOS Homebrew running natively on M1/Apple Silicon/ARM has partial functionality. We recommend installing into /opt/homebrew and forbid installing into /usr/local (to avoid clashing with the macOS Intel install and allow their usage side-by-side). We currently recommend running Homebrew using Intel emulation with Rosetta 2.
M2ではARM版のHomebrewがパーシャル(部分的)に実行されます。その際、macOS Intelで/usr/local
下にインストールされたhomebrewと衝突するのを避ける必要があり、/opt/homebrew
にインストールすることが推奨されています。新しく環境を用意する目的としてはこのようなところです。
用意する方法
基本的には、公式に書かれている通りに進めていきます。
mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
/opt
下にhomebrewを作り、curl
コマンドで上記githubを叩き、取得したデータをパイプラインで渡します。そしてtar
コマンドで展開してhomebrewに入れるという形です。
実はtar
コマンドをはじめて見ました。man tar
でマニュアル調べたものの、xz --strip 1
あたりはなにが行われているのかわから図。
--C
: アーカイブ元のファイルのディレクトリを指定する。この場合は、mkdir
で作成したhomebrewが指定されています。
or
git clone https://github.com/Homebrew/brew homebrew
もしくはgitから直接クローンしてきます。carlコマンドの方で行ってから後の操作がどうもうまくいかなかったので、こちらでやり直しました。
then
eval "$(homebrew/bin/brew shellenv)"
brew update --force --quiet
chmod -R go-w "$(brew --prefix)/share/zsh"
最後にこちらのeval
コマンドで記載された文字列の実行結果、ここではディレクトリを辿っていった先のshellenvの実行結果を現在のシェルで実行します。
次いで、brew update
をかけます。
最後に、chmod
で権限の変更を行います。オプションの-R
は再帰的、つまりディレクトリ構造の深いところまで含めて権限を変更していきます。変更する先のディレクトリは/zshが指定されているのでそのディレクトリに飲み限定されます。
これで一通りの設定が終了です。
最後に
which brew
で、/opt/homebrewとなっていれば問題ありません。
ターミナルを再起動しても問題ないか
これを確認しておく必要があります。
私の場合は立ち上げ直してwhitch homebrew
で調べたところ、PATH名が**/usr/local** 以下で表示されており、optディレクトリでなくなってしまっていました。
ターミナルは起動時に**.zshrc** を読み込むので、次のようにファイル内にPATH名を渡すように記述してみましたが、それもうまくいきませんでした。(直接open .zshrc
で開いて記述も可能です)
最終的にコマンドを打てばターミナル起動中は切り替わるということが確認できている
eval "$(homebrew/bin/brew shellenv)"
をファイルに記述しておくことでターミナル起動時に反映させられるようにしました。
以上です。
Discussion