🦦

Rosetta を解除したのに arm64 にならなかったしょうもない原因

2023/06/05に公開

序幕

端末のアーキテクチャは uname コマンドで判別できる。

% uname -m
x86_64

そのはずなのだが、何をやっても arm64 にならない。一度 Rosetta 2 を入れるともう元に戻らないのだろうか?

希望

ググると次の記事をみつけた。

https://psipsina.jp/note/mac/not_become_arm64.html

原因は親プロセスが 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