美文网首页Android开发经验谈
Ubuntu源码编译安装go语言——墙内版

Ubuntu源码编译安装go语言——墙内版

作者: GrayMonkey | 来源:发表于2017-11-02 20:20 被阅读514次

    前言

    本准备安装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环境变量的方法和区别

    相关文章

      网友评论

        本文标题:Ubuntu源码编译安装go语言——墙内版

        本文链接:https://www.haomeiwen.com/subject/mwagpxtx.html