从Influxdb源码制作rpm安装包

1、安装gvm
执行

bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)

重启Terminal会话让gvm生效

2、安装gvm依赖bison

sudo yum install bison

3、gvm 安装golang
influxdb依赖go1.4.3,在编译源码之前需要准备go1.4.3源码环境
a、从源码安装
国内访问不了https://go.googlesource.com/go
可将 GO_SOURCE_URL修改为github上的源码镜像

vim ~/.gvm/scripts/install

修改

 GO_SOURCE_URL=https://github.com/golang/go

b、通过二进制安装包安装

gvm install go1.4.3 -B #使用二进制安装包安装

gvm会从http://golang.org 或 https://go.googlecode.com 下载安装包,这两个url同样在国内无法访问。

如果已经下载过go1.4.3的安装包,可以将安装包copy到 ~/.gvm/archive下面,然后重新执行安装命令

c、如果不想使用gvm来设置环境变量,而是使用已有的环境。可以将package.sh中的check_gvm注释掉

#check_gvm

修改过文件后在编译influxdb之前要确保本地修改的文件已经提交,如修改package.sh将check_gvm注释。否则会报错误

The source tree is not clean -- aborting.

当然也可以通过修改package.sh来忽略这个错误。

4、准备环境变量
创建一个目录编译influxdb

mkdir -p /root/dev/go/influxdb

使用gvm pkgset #创建环境变量

gvm pkgset create influxdb #创建环境变量文件
gvm pkgenv influxdb           #修改环境变量,修改GOPATH路径为/root/dev/go/influxdb
gvm pkgset use influxdb

5、下载源码

cd /root/dev/go/influxdb
go get github.com/influxdata/influxdb

6、开始打包

./package.sh -p 0.12 -t rpm #指定版本和安装包类型

7、安装fpm

./package.sh: line 491: -s: command not found
Failed to create RPM package -- aborting.

#FPM是Ruby模块

sudo yum -y install ruby rubygems ruby-devel

#添加淘宝Ruby仓库

sudo gem sources —add https://ruby.taobao.org/ —remove https://rubygems.org/

#安装fpm

sudo gem install fpm
ERROR:  Error installing fpm:
        ruby-xz requires Ruby version >= 1.9.3.
sudo gem install fpm -v 1.4.0 #指定版本

8、Need executable ‘rpmbuild’ to convert dir to rpm {:level=>:error}

sudo yum install -y rpm-build

9、找不到golang.org/x 库

imports golang.org/x/crypto/bcrypt: unrecognized import path "golang.org/x/crypto/bcrypt"

在/root/dev/go/influxdb/src目录下新建一个golang.org目录

cd /root/dev/go/influxdb/src
mkdir -p golang.org/x
cd golang.org/x/
go get github.com/golang/crypto

将源代码copy到golang.org目录

cp /root/dev/go/influxdb/src/github.com/golang/crypto /root/dev/go/influxdb/src/golang.org/x/ -r

10、can’t load package
如果是从influxdb的fork,编译还会遇到can’t load package 问题,需要修改原代码

vi /root/dev/go/influxdb/src/github.com/it-man-cn/influxdb/influxdb.go
package influxdb // import "github.com/influxdata/influxdb"

修改为

package influxdb

按照错误信息依次修改各目录下的相关文件

11、use of internal package not allowed
由于fork的代码中引用了github.com/influxdata/influxdb中的internal包
需要修改出错go文件中的import路径为fork项目github.com/it-man-cn/influxdb路径

12、安装influxdb

sudo yum localinstall influxdb-0.12.-1.x86_64.rpm

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>