by shigemk2

当面は技術的なことしか書かない

Apple Silicon HomebrewのGo進捗っぽいやつ

Goに対する知識はほとんどない。ghqとかにプルリク投げてたくらい。

今のBigSur M1じゃGoをHomebrewインストールできないけど、なんとかしようとしている。 HomebrewのGoはソースコードをmake.bashでビルドすることでインストールしているけど、./make.bash --no-clean 実行中に以下エラーになる。

./make.bash: line 184: 94599 Segmentation fault: 11 GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist

Goよく知らないけど、最近のGoはGo1.4以上を事前に入れないとビルドができない。 Goをビルドする前にbootstrapのGoを事前にインストールしていてそれが1.7なんだ。とても古い。

具体的にはこの辺り(直近1.15.6もプルリク投げたけどgodep周りで他のGo依存フォーミュラが盛大にインストールできなくなってるからコアコミッターさんなどのご協力もありなんとかbumpできた) homebrew-core/go.rb at 798511ad089608e1a92f0e82e93bf016e073c90b · Homebrew/homebrew-core · GitHub

Segmentation faultの根本原因は不明なんだけど、Segmentation faultが出るのは古いboostrap Goを使っているのが原因で、これをバージョンアップすることによって解決する。 http://storage.googleapis.com/golang

Go 1.16がM1対応していて、brew install go --HEAD したら一応最新版がビルドできるけど、前述のbootstrapのgoのバージョンが古すぎてSegmentation faultなのを解決しようとしたプルリクがこれ。

github.com

通常ベータ版はstableに入れないけど、Goは他パッケージとの兼ね合いで影響範囲がデカすぎるから事前に入れてしまおうというのが今の流れ。 github.com