x86_64版のHomeBrew環境を一掃してarm64のみへ完全移行してみた
プライベート環境にて、arm64ベースの処理中にRosettaを使ってHomeBrewにてx86_64ベースで導入したライブラリが原因でエラーが時折あることに気が付きました。処理の際のパスは中々カバーし難い時もあります。
Intel Macが販売終了となり、ARMベースのMacがメインストリームとなり、HomeBrewもARMベースでおおよそカバーできているといえる状況です。そろそろ完全に移行したほうがトラブルも抑えられるかもしれません。
課題があるとすれば、ライブラリの移行漏れです。一つ一つ入れ直すのも手間なので、まるっと対応してみました。
手続き
x86_64版のみにあってarm64版にないライブラリについては改めてarm64版に移行させていきます。
また、x86_64とarm64のログとキャッシュが手続き上同じディレクトリに入っていました。x86_64版は削除しつつ、arm64版は残しておきたいため、以下順の手続きとしました。今回の作業以前のarm64のログとキャッシュについては目をつぶることにしました。
- x86_64版のライブラリリスト化
- x86_64版のHomeBrewをアンインストール
- arm64版のHomeBrewにライブラリをインストール
手順に入る前に、アンインストールを無事完了させるために余計なプロセスを落とす目的でMacを再起動します。
x86_64側インストール済みライブラリをリスト化する
x86_64側インストール済みライブラリをリスト化するため、x86_64のHomeBrewにzshをインストールします。
ターミナルが起動している場合は終了します。Finder上でターミナルの「情報を見る」を選択し、「Rosettaを使用して開く」にチェックを付けて起動します。
zshがすでに入っている場合は次のステップへ。
export PATH=/usr/local/bin:${PATH} which zsh #zshの有無を確認する # 存在しなければ以下を実行 /usr/local/bin/brew install zsh
念の為にuname -m
でアーキテクチャを確認します。arm64
になる場合はターミナルを終了させて起動しなおします。
Brewfileに出力するため、Homebrew/bundle
を導入します。
/usr/local/bin/zsh uname -m > x86_64 /usr/local/bin/brew tap Homebrew/bundle /usr/local/bin/brew bundle dump --global
x86_64側のHomeBrewをアンインストールする
x86_64版のHomeBrewパスが通っていることを確認します。
which brew > /usr/local/bin/brew
HomeBrewアンインストールスクリプトを実行します。羅列される削除候補パスがx86_64のものであることを確認して実行します。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/uninstall.sh)" Warning: This script will remove: /Users/user/Library/Caches/Homebrew/ /Users/user/Library/Logs/Homebrew/ /usr/local/Caskroom/ /usr/local/Cellar/ /usr/local/bin/brew -> /usr/local/bin/brew Are you sure you want to uninstall Homebrew? This will remove your installed packages! [y/N]
削除されなかったディレクトリは個別に削除しておきます。
arm64側にインストールする
ターミナルを終了させて、Finder上でターミナルの「情報を見る」を選択し、「Rosettaを使用して開く」からチェックを外して起動します。
念の為にuname -m
でアーキテクチャを確認します。x86_64
になる場合はターミナルを終了させて起動しなおします。
uname -m > arm64
arm64側のHomebrewにHomebrew/bundle
を追加し、dumpした内容をそのまま取り込みます。
/opt/homebrew/bin/brew tap Homebrew/bundle /opt/homebrew/bin/brew bundle --global
Cask Installで追加したライブラリについては、上書きされないためインストールがほぼ失敗します。x84_64版とarm64版のいずれでも問題なく動作するケースもありますが、HomeBrew上では取り扱いできないため削除したあと再度インストール実行します。念の為設定ファイルなどをバックアップしておきましょう。
ポイントは… is built for Intel macOS and so requires Rosetta 2 to be installed.
とログにある場合です。ARM版がなければ、代替ライブラリを見つける必要があるでしょう。
Tapping homebrew/cask-drivers has failed!
のログが出る場合は既にdeprecatedで不要なCask用ライブラリが含まれています。~/.Brewfile
から削除して再実行しましょう。
正常にインストールし終わると、ライブラリ数込でグリーンなログが出力されます。
Homebrew Bundle complete! 56 Brewfile dependencies now installed.
あとがき
Cask Installしているバイナリが多い場合、arm64でインストールする際に多数のエラーとなる可能性があります。辛抱強く対処しましょう。
業務用PCの場合、業務に支障がでる可能性もあります。必要なライブラリがARM版に存在するか、動作バージョンが問題ないか、個別に確認してから実行しましょう。