安装旧版本的 influxdb
因为工作需要,所以接触了 influxdb,而工作中用的 influxdb 的版本则是 0.10.2 的版本,官方只提供了最新稳定版的下载。看了官网的角角落落,也没有找到明显的下载地方,那就只有自己编译了。以下内容基本都是 influxdb 源码中 CONTRIBUTING.md 中的内容。
安装 Go
InfluxDB 0.10.2 需要 Go 1.4.3。目前 Go 的稳定版已经跑到 1.6.2 了。和很多语言一样(例如 node 的 nvm, ruby 的 rvm),Go 也出现了版本管理工具 gvm 。可以用下面命令安装 gvm
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
如果使用 zsh 的话就把 bash 替换成 zsh。 然后安装 Go。
gvm install go1.4.2 -B #mac 可能需要先安装 go1.4.2 的 binary 版本 gvm install go1.4.3 gvm use go1.4.3 --default #可以不设置为 default, 下次使用时需要执行这条命令
安装版本控制系统
Go 能够通过版本控制系统引入远端的包,目前 influxdb 只依赖于 git
和 mercurial
安装 Git
brew install git
安装 Mercurial
brew install mercurial
下载源代码
设置项目结构并从仓库中获取代码:
mkdir $HOME/gocodez export GOPATH=$HOME/gocodez mkdir -p $GOPATH/src/github.com/influxdb cd $GOPATH/src/github.com/influxdb git clone https://github.com/influxdata/influxdb.git git checkout v0.10.2
保持 $GOPATH/src/github.com/influxdb
这样的目录结构是必要,因为这样才能保证 Go import 能够正常工作。
编译和测试
确保 Go 已经正确安装,然后执行以下命令。可能需要翻墙。
cd $GOPATH/src/github.com/influxdb/influxdb go get -t ./...
第二条命令会扫描当前目录下的所有 go 源代码,从中找到 import 并从远端下载到本地。 在这个过程中可能会碰到编译出错的问题,比如:
# github.com/influxdb/influxdb/tsdb/engine/tsm1 tsdb/engine/tsm1/int.go:271: cannot use d.values (type []uint64) as type *[240]uint64 in argument to simple8b.Decode
类型不一致问题,可能是现在用来编译 influxdb 的第三方库的版本和当时的不一样,因为 go get 命令只会从代码仓库中检出最新的 master,所以我们要检出历史版本。
cd $GOPATH/src/github.com/jwilder/encoding/simple8b git checkout 07d88d4f35eec497617bee0c7bfe651a796dae13 cd $GOPATH/src/github.com/influxdb/influxdb go get -t ./...
编译并安装到本地。
go clean ./... go install ./...
二进制可执行文件将被安装在 $GOPATH/bin
。InfluxDB 的 Server 端的可执行文件的名字为 influxd
, 而 influx
则是 influxdb 的文本界面客户端。
可以通过添加编译 flag 来设置编译出来的二进制文件的版本号和 commit 号:
-ldflags="-X main.version=$VERSION -X main.branch=$BRANCH -X main.commit=$COMMIT -X main.buildTime=$TIME"
启动 InfluxDB
正常情况下,直接运行 influxd 就可以启动 influxdb 了。通过命令生成配置文件,修改后,在启动参数中加入 -config filepath
参数,就可以以指定配置文件启动 influxdb。
$GOPATH/bin/influxd config > influxd.conf vim influxd.conf # 修改配置文件 $GOPATH/bin/influxd -config influxd.conf