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还有源码。

前期准备

  1. 安装gcc、glibc-devel、git,这些ubuntu基本自带
  2. 卸载通过apt安装的旧版本
$ apt-get purge golang-go
  1. 创建以下目录(路径随意,我个人比较喜欢放在~/local目录下),源码安装建议放在一个固定目录,后续卸载方便,直接删除对应目录即可
$ mkdir ~/local/go1.4
#目标版本
$ mkdir ~/local/go1.9  

Go从1.5版本开始实现“自举”(Bootstrap),也就是用Go来实现Go;之前的版本都是用C来实现,用C编译即可。所以,如果要使用1.5及之后的版本,我们必须先编译go1.4。

  1. 下载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
  ........

github地址

编译

  1. 编译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
  1. 配置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语言来编译。

  1. 编译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.
  1. 配置环境变量
NameDescription
GOROOTgo语言的安装目录,类比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

传送门

设置Linux环境变量的方法和区别

    原文作者:GrayMonkey
    原文地址: https://www.jianshu.com/p/5fae045f1b2f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞