naoki86star

インターネットの片隅でなにかしら書いてみる

ubuntu16にgolangをapt以外の方法でinstall(ubuntu16の上でgobgpdの最新版を動かす目的)

前に書いたこれについて今時点でこの手順そのままだとgobgpdのbuildで失敗するようになっていて、それはgobgpdの改版が進んで、golangもバージョンをあげないといけないようでした。
ubuntu16だとapt-getでgolang入ると書いていたのが、そのgoのversionでは対応できなくなっていたので、aptを使わないでgolangを入れた自分の方法を書いておきます。

(apt-get でgolang(1.6)を入れていたのはapt-get remove golangで古いのは削除しました。削除しなくてもよいけど重複が起きないように注意しました。以下手順では/usr/localにいれることにしてます。)

https://golang.org/dl/からgo1.10.1.linux-amd64.tar.gzをダウンロード・とりあえず自分の作業ディレクトリに展開

# cd /tmp
# tar zxf .../go1.10.1.linux-amd64.tar.gz
# mv go /usr/local/lib/go-1.10
# cd /usr/local/lib
# ln -s go-1.10 go
# cd /usr/local/bin
# ln -s /usr/local/lib/go-1.10/bin/go .
# ln -s /usr/local/lib/go-1.10/bin/gofmt .
# ln -s /usr/local/lib/go-1.10/bin/godoc .

$ export GOROOT=/usr/local/lib/go-1.10
$ export GOPATH=/usr/local
$ go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/nao/.cache/go-build"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/usr/local"
GORACE=""
GOROOT="/usr/local/lib/go-1.10"
GOTMPDIR=""
GOTOOLDIR="/usr/local/lib/go-1.10/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build035420675=/tmp/go-build -gno-record-gcc-switches"
$


この他に、https://golang.org/dl/からsrc.tar.gzを持ってきて、make.bashでbuildするというのが簡単みたいです。*1多分ポイントのひとつは、golangのバージョンをディレクトリで切り替えやすくできるように選んでおくことだと思いました。*2




蛇足)
さくらインターネットレンタルサーバだとgo1.xx.freebsd-amd64.tar.gzを展開してもgoコマンドが実行できません。原因は多分バイナリがdynamic linkになっているせいだと考えているのですが、なのでsrc.tar.gzからの方法を使うことで動かすことができるみたいです。*3*4

*1:https://golang.org/doc/install/source

*2:書くに及ばずみんな当たり前のようにしているんだと思うのですが。

*3:肝は、CGO_ENABLED=0にしないとだめ、ってとこですね、これでstatic linkのbinary出来てくれます

*4:go env,go versionが正常に起動できるまでしか試してなく、本格的にcompileとか実行とか全然していません。