Ubuntu源码编译安装go语言——墙内版
前言
本准备安装Google的电量分析工具Battary Historian来分析应用,按照官方教程采用Docker来安装,却因为墙的问题,最终导致安装Battary Historian失败;另辟蹊径,虽然通过Docker安装DockHub上面的Battary Historian算是成功了,可是会一直卡在分析界面,总感觉DockHub上面的有问题,发布者不是google,stars太少。
公司的网虽说能上google,但还是墙了一些服务,没办法只能采用源码安装的方式了。Battary Historian源码安装需要依赖go语言,一试没想到,go语言的官网也被墙了,国内的镜像也没找到可用的......通过第三方工具apt-get安装的版本太低,Battary Historian要求go 1.8以上的版本,gvm也被墙,无法安装。好在go语言在GitHub还有源码。
前期准备
- 安装gcc、glibc-devel、git,这些ubuntu基本自带
- 卸载通过apt安装的旧版本
$ apt-get purge golang-go
- 创建以下目录(路径随意,我个人比较喜欢放在~/local目录下),源码安装建议放在一个固定目录,后续卸载方便,直接删除对应目录即可
$ mkdir ~/local/go1.4
#目标版本
$ mkdir ~/local/go1.9
Go从1.5版本开始实现“自举”(Bootstrap),也就是用Go来实现Go;之前的版本都是用C来实现,用C编译即可。所以,如果要使用1.5及之后的版本,我们必须先编译go1.4。
- 下载go1.4源码
#进入go1.4目录
$ cd ~/local/go1.4
#clone go1.4分支代码
$ git clone https://github.com/golang/go.git -b release-branch.go1.4
若想使用go1.4.x等版本,则通过git checkout <tag name>至指定TAG即可
$ git tag
go1
go1.0.1
go1.0.2
go1.0.3
go1.1
go1.1.1
go1.1.2
go1.1rc2
go1.1rc3
........
编译
- 编译go1.4
#进入go1.4/go/src目录
$ cd go/src
#all.bash会执行编译及测试,想更快则可以使用make.bash
$ ./all.bash
如果执行结果如下图所示,则表示编译成功
ALL TESTS PASSED
---
Installed Go for linux/amd64 in /home/neal/local/go1.4/go
Installed commands in /home/neal/local/go1.4/go/bin
*** You need to add /home/neal/local/go1.4/go/bin to your PATH.
可进入go1.4/go/bin目录进行验证
$ ./go version
go version go1.4-bootstrap-20170531 linux/amd64
- 配置go的自举环境变量
#此处是本文配置的路径,根据实际情况变更,总之该路径是go1.4编译之后的go目录
$ export GOROOT_BOOTSTRAP=$HOME/local/go1.4/go
注意:此处,在shell中使用export配置了一个临时环境变量(仅用于后续编译go1.9),关闭这个shell它将失效,所以编译go1.9需要在同一个shell中进行,否则设置无效。若需要长久有效,请参考步骤4的方式进行环境变量配置。
配置好自举目录后,编译go1.5及更高版本才能通过,前面提到过1.5及更高版本需要用go语言来编译。
- 编译go1.9
#首先copy一份go1.4的源码到go1.9
$ cp ~/local/go1.4/go ~/local/go1.9/go -rf
#进入 ~/local/go1.9/go
$ cd ~/local/go1.9/go
#切换至目标分支
$ git checkout release-branch.go1.9
#编译,编译成功标志同go1.4
$ cd go/src
$ ./all.bash
若省略步骤2,此时编译将会失败,如下:
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find ~/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
- 配置环境变量
Name | Description |
---|---|
GOROOT | go语言的安装目录,类比JAVA_HOME |
GOPATH | 放置Go的第三方安装包的位置,如通过go install or go get安装的第三方库,也可 是go开发者的工作目录 |
GOROOT_BOOTSTRAP | 配置go自举目录,用于编译1.5及更高版本 |
PATH | 同windows的环境变量path |
#嫌vim麻烦的可以使用gedit替代vim
$ vim ~/.bashrc
在该文件末尾追加以下内容,路径根据实际情况进行变更
#目标go版本为1.9
export GOROOT=$HOME/local/go1.9/go
#可配置多个目录,对于非go开发者,可以不配置该项,我们只是用go来编译
export GOPATH=$HOME/goworkspace
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
使配置立即生效
$ source ~/.bashrc
校验
由于使用的是bashrc来配置环境变量,所以新开一个shell,输入以下内容,校验配置成功与否。关于Linux各种环境变量配置方法的区别可参考文末链接。
$ go version
go version go1.9.2 linux/amd64