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. 配置环境变量
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

传送门

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容