基本的に郷に入れば郷に従いたいので arm64 のバイナリを扱うようにする。homebrew はここに従って arm64 版のみインストールした。
インストールしたバイナリが arm64 かどうかを確認するために下記のコマンドを使う。
$ lipo -archs $(which command)
Go
arm64 の Go をインストールするために仕方なく x86_64 の Go のバイナリをここからインストールする。
pkg なのでいい感じに設置してくれる。その後 go get golang.org/dl/gotip
をする。これで gotip コマンドが使えるようになる。
このコマンドを使って arm64 の Go を手に入れる。
GODEBUG=asyncpreemptoff=1 GOARCH=arm64 gotip download
を行うことで master の Go をビルドしてくれる。実行中に ctrl + t を押すと cpu 使用率などを表示してくれる。終わったら sudo vi /etc/paths.d/go
で次のように編集する。
$HOME/sdk/gotip/bin/darwin_arm64
/etc/paths.d/<command>
のファイルを作ると良い感じに $PATH
へシェル関係なく追加してくれるらしい。
これで arm64 の Go が使えるようになるので sudo rm -rf /usr/local/go
で x86_64 の Go を削除する。公式で正式に配布されたら自分で再度インストールすれば良いと思う。それまではこれを使う。
この Go を使ってこれらを go get した。
- direnv
- Neo-Cowsay
- fzf
- ghq
NodeJS
brew install -s nodebrew
で nodebrew をインストールした。vim $(which nodebrew)
で system_info
というサブルーチンを次のように編集した。
sub system_info { my $arch; my ($sysname, $machine) = (POSIX::uname)[0, 4]; if ($machine =~ m/x86_64|arm64/) { $arch = 'arm64'; } elsif ($machine =~ m/i\d86/) {
保存して nodebrew compile v15.3.0
をすれば node を arm64 でコンパイルしてくれる。v15.3.0 から arm64 で動かせるように変更が入ったっぽい。v8 の cherry-pick のコミットログがそれに当たる。
ビルドが完了したら nodebrew use v15.3.0
をすると arm64 の node が動く。
Rust
rust はここのコメントに書いてる通りに nightly build として 1.49 をインストールすればビルドターゲットとして aarch64-apple-darwin を指定することが可能になる。
インストールしたもの
- ripgrep
- exa
追記 12/4
OCaml
この PR がマージされれば brew install ocaml
でインストール可能になるとのこと。しかし待てないので PR の branch をインストールする。
まずは brew edit ocaml
で次のように編集する。
- head "https://github.com/ocaml/ocaml.git", branch: "trunk" +# head "https://github.com/ocaml/ocaml.git", branch: "trunk" + head "https://github.com/EduardoRFS/ocaml.git", branch: "4.10+backport"
brew install --HEAD ocaml
でインストールして解決した。インストール後は再び brew edit で formula をちゃんと元に戻す。
GPG
gpg は GitHub 上での commit で署名をつけるために活用している。詳しくはこちら
インストールに依存しているもので libgcrypt
があるがこれでコケてしまう。正常にライブラリは機能するが brew のテストでコケてしまうとのこと。下記のコメントの通り ignore を選択してインストールをして gpg をインストールすることに成功した。パッチはここで修正されている。マージされて brew からインストールできるようになったら再インストールする。
進捗あれば更新します。