🦦
Rosetta を解除したのに arm64 にならなかったしょうもない原因
序幕
端末のアーキテクチャは uname コマンドで判別できる。
% uname -m
x86_64
そのはずなのだが、何をやっても arm64 にならない。一度 Rosetta 2 を入れるともう元に戻らないのだろうか?
希望
ググると次の記事をみつけた。
原因は親プロセスが x86_64 だと引き継がれてしまうとのこと。
絶望
見てみると、
-+= 00001 root /sbin/launchd
|-+= 02111 ***** /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
となっていて順に調べると、
% lipo -archs /sbin/launchd
x86_64 arm64e
% lipo -archs /System/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal
x86_64 arm64e
どちらも arm64 のバイナリが含まれている。念のため zsh と tmux も見てみる。
% lipo -archs /opt/homebrew/bin/zsh
arm64
% lipo -archs /opt/homebrew/bin/tmux
arm64
問題ない。さらにアクティビティモニタで確認するが種類はどれも Apple になっている。にもかかわらず端末は、
% uname -m
x86_64
と、変わらない。これを何度確認しただろうか。何やってもダメ。奮発して買い替えたばかりの Mac はもう狂ってしまった。
解明
そこから一ヶ月ほどたったある日、ふと試したコマンドで原因がわかった。
% which uname
/usr/local/opt/coreutils/libexec/gnubin/uname
?
% lipo -archs $(which uname)
x86_64
!?
% fd -g uname /
/usr/local/Cellar/coreutils/9.1/libexec/gnubin/uname
/usr/bin/uname
% /usr/bin/uname -m
arm64
もともと端末は arm64 だったのにそのアーキテクチャを調べるための uname コマンド自体が x86_64 専用だったという。
Discussion