TL;DR
- Go言語のプログラムのコンパイラ+実況環境(goコマンド)をソースコードからインストールする方法を紹介します
Go言語のビルド手順
Installing Go from sourceの説明をもとにインストールします.
直近のバージョンのgoは,goでビルドします.そのため,(以前のバージョン)go1.4をいったんビルドしてから,最近のバージョンのgoをビルドする手順を取ります
(もとの説明は「Bootstrap toolchain from source」にあります).
手順は以下のとおりです.使用したいgoを1.13.5(2019年12月27日時点)とします.
- go1.4をダウンロード,ビルドする
- go1.13.5をダウンロード,go1.4のディレクトリを指定してビルドする
go1.4のビルド
- まず最初に,goを使用しないでビルドできるgo1.4をダウンロードし,ビルドします
wget https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz
mkdir go1.4-bootstrap && tar xzvf go1.4-bootstrap-20171003.tar.gz -C go1.4-bootstrap --strip-components 1
cd ./go1.4-bootstrap/src
CGO_ENABLED=0 bash ./make.bash
cd -
- go1.4-bootstrap-20171003.tar.gzをダウンロードします
- 展開後のディレクトリ名がgoで,以降のgo1.13.5とバッティングしてしまうので,go1.4-bootstrapという名前のディレクトリに展開します
- 
make ./make.bashで,最小限のビルドを行います
- 
go1.4-bootstrap/binにgo,gofmtが生成されます
go1.13.5のビルド
wget https://dl.google.com/go/go1.13.5.src.tar.gz
mkdir go1.13.5 && tar xzvf go1.13.5.src.tar.gz -C go1.13.5 --strip-components 1
cd ./go1.13.5/src
GOROOT_BOOTSTRAP=${PWD}/go1.4-bootstrap bash ./all.bash
cd -
- go1.13.5.src.tar.gzをダウンロードします
- 特段ディレクトリ名を変更する必要はないのですが,他のディレクトリと混在しないようにバージョン名を含めた名前で展開します
- 
go1.13.5/srcディレクトリに移動して,ビルドします.このとき環境変数GOROOT_BOOTSTRAPに,前章でビルドしたgo1.4のディレクトリを指定します
- 
go1.13.5/binにgo,gofmtが生成されます
ビルドしたgo1.13.5ディレクトリを実行パスに移動
ビルドしたgo1.13.5ディレクトリをわかりやすい場所に移動します.
mv ./go1.13.5 /usr/local/
ln -s /usr/local/go1.13.5 /usr/local/go
テスト
/usr/local/go/bin/go が使用できることを確認します.
export PATH=/usr/local/go/bin:${PATH}
which go
# /usr/local/go/bin/go
go version
# go version go1.13.5 linux/amd64
