超详细的InfluxDB源码编译教程(基于v1.7.4)

以下基于InfluxDBv1.7.4源码编译

第一步:安装git。 教程太多,自行Google

第二步:安装Go语言package。

              1.下载地址:https://golang.org/dl/ (此地址需要翻墙)

              2.备选地址:https://golang.google.cn/dl/  (不用翻墙也能访问)

              3.本次教程下载的是Linux amd64位  go1.11.5版本。

              4.配置环境go变量:本次需要配置的环境变量有两个GOROOTGOPATH。(这两个环境变量的名字应该是go语言环境变量的专有名词,建议就按这样命名)

           (1) GOROOT是go的安装目录,一般都是放在 /usr/local/目录下。我们在下载go安装包的目录下使用命令  “tar -zxvf go1.11.5.linux-amd64.tar.gz -C /usr/local/” 将go语言安装包解压缩至/usr/local目录下。我的解压缩之后如下图。解压缩之后,会在“/usr/local”多一个go文件夹。进入go文件夹以后,可以查看有以下这些目录。

 
 

其中src,binpkg是Go语言项目中比较重要的三个文件夹。其中src存放go项目的源码,bin存放源码编译之后的可执行文件,pkg存放源码编译之后的一些包。

      (2)GOPATH是Go工程项目路径。我设置的路径是/home/jyx/gocodez(默认是/home/jyx/go)。如果执行go get指令获取项目的话。会自动创建gocodez/文件夹(如果不设置的话,则默认是go/文件夹)。以及会在该目录下创建src/bin/文件夹。

      (3)在当前用户的根目录下修改环境变量配置文件.bashrc。在最后文件末尾添加代码如下图所示

      (4)运行 go version查看当前go版本。如下图所示则安装成功。


      

第三步:安装dep。可以将dep通俗的理解为go语言的依赖管理工具,类似于python中的pipjava中的Maven以及node.js中的npm工具。 

我们通过go get github.com/golang/dep/cmd/dep命令来安装dep。安装成功之后,应该会在$GOPATH/bin下面有一个dep的可执行文件。同时在$GOPATH/src下面会有一个github.com/golang/dep/cmd/dep的文件夹。因为go get命令在下载包之后,会自动将它编译好的可执行程序放在bin/目录下,如不需要自动编译,可以加参数进行控制。如下图所示

 
 

      

确保在执行go get命令之前已经安装好git。因为go get的实质还是利用git去拉取源代码文件。实际上等同于git clone + go install两个命令。

注:go get会自动下载当前源代码或者软件包的最新版本。下载指定版本的正确操作还没找到。

第四步:在github官网下载InfluxDBv1.7.4,然后解压缩,重命名为influxdb,移动或者复制至$GOPATH/src/github.com/influxdata/目录下。

第五步:进入到$GOPATH/src/github.com/influxdata/目录下,执行go grt ./...,报错如下

主要缺以下几个包:

github.com/influxdata/flux/functions/inputs

github.com/influxdata/flux/functions/outputs

github.com/influxdata/flux/functions/transformations

github.com/influxdata/flux/options

github.com/influxdata/flux/functions

错误原因,因为最新的flux源码里没有functions这个文件夹,所以不行。我们得下一个有这个文件夹的版本,然后替换现在的flux文件夹。

故解决上述5个包的方法为:

执行以下命令:

git clone -b 0.11.0 https://github.com/influxdata/flux.git

下载一个有functions文件的旧版本再替换最新版本的flux,也即删除GOPATH/src/github.com/influxdata/目录下的flux文件夹,再将新的flux文件夹拷贝过去。

golang.org/x/sys/unix

golang.org/x/crypto/bcrypt

golang.org/x/crypto/ssh/terminal

golang.org/x/time/rate

golang.org/x/sync/errgroup

golang.org/x/net/context

golang.org/x/text/encoding/unicode

golang.org/x/text/transform

上述几个包,错误原因相同,都是被墙了。因为www.golang.org无法访问。我们可以去github下载对应的package。

分别执行以下命令:

go get  github.com/golang/sys

go get  github.com/golang/crypto

go get  github.com/golang/time

go get  github.com/golang/sync

go get  github.com/golang/net

go get  github.com/golang/text

执行go get命令,将在$GOPATH/src/下面自动创建 github.com/golang/*这样的文件夹

下载对应的包,然后将$GOPATH/src/github.com/golang下面的syscryptotimesyncnettext这些文件夹拷贝或者移动至$GOPATH/src/golang.org/x(golang.org/x这个文件夹路径需要手动创建)

下图是下载并复制之后的结果

google.golang.org/grpc

google.golang.org/grpc/metadata

上面两个包,错误原因也是被墙。www.google.golang.org无法访问。我们也可以去github下载对应的package。

执行以下命令:

go get  github.com/grpc/grpc-go

下载grpc-go包,然后将$GOPATH/src/github.com/grpc/目录下的grpc-go文件夹其移动至$GOPATH/src/google.golang.org/(google.golang.org文件夹也需要手工创建)文件夹下,并重命名为grpc

第六步:再次进入到$GOPATH/src/github.com/influxdata/目录下,执行go grt ./...

此次go get 过程大约持续了5-6分钟吧。发现还是有包被墙了。。。

主要缺少以下包:

google.golang.org/genproto/googleapis/rpc/status

golang.org/x/oauth2

golang.org/x/oauth2/github

golang.org/x/oauth2/heroku

google.golang.org/api/oauth2/v2

 

分别执行以下命令,获取对应的包,其中google.golang.org/api/oauth2/v2中的api的地址迁移到 googleapis组织的google-api-go-client项目中去了。

 

go get github.com/google/go-genproto

$GOPATH/src/github.com/google/目录下的go-genproto文件夹复制或者移动到$GOPATH/src/google.golang.org/文件夹下,并重命名为 genproto

 

go get github.com/golang/oauth2

$GOPATH/src/github.com/golang目录下的oauth2文件夹复制或者移动到$GOPATH/src/golang.org/x/文件夹下。

 

go  get github.com/googleapis/google-api-go-client

$GOPATH/src/github.com/googleapis/目录下的google-api-go-client文件夹复制或者移动至$GOPATH/src/google.golang.org/文件夹下,并重命名为api

第七步:再次进入到$GOPATH/src/github.com/influxdata/目录下,执行go grt ./...

缺少以下包:

golang.org/x/exp/rand

执行以下命令:

go get github.com/golang/exp

$GOPATH/src/github.com/golang目录下的exp文件夹复制或者移动到$GOPATH/src/golang.org/x/文件夹下。

第八步:再次进入到$GOPATH/src/github.com/influxdata/目录下,执行go grt ./...

这次。。。终于成功了吧。

执行完上述命令之后,我们可以在$GOPATH/bin目录下发现如下信息

下图是服务端启动日志。

下图是客户端启动界面。

 

 

至此,InfluxDB源码的编译工作告一段落。

 

总结:此次编译Go语言项目InfluxDB源码的难点在于

           1.需要了解Go语言项目的项目结构。前面所说的/src/bin/pkg等,以及两个环境变量。
           2.使用dep包管理工具时,遇到被墙的一些包。前面已经给出解决办法,就是手工从github,com下载,再移动或复制到相应文件夹下。

           3.go get命令下载的是最新的代码。要避免这种情况,就需要手工下载指定版本的源代码。然后移动到对应文件夹下。

           4.需要理解控制台报错信息,并去github搜索对应的包,(有的包下载下来还需要更改文件夹名字才能确保其他包能导入),然后放到对应的文件夹下。

仍然存在的问题:虽然编译后的influxdb可以用,但是在最后一次 go get ./…的时候,还是报出了一些异常,主要是有些函数undefined,这个可能是因为一些包的版本不一致,这个可能导致InfluxDB无法正常使用,有待后续调查。

猜你喜欢

转载自blog.csdn.net/sinat_32336967/article/details/88074200