1. 环境设置 1.1 需要主要工具
git
go (本例使用的是:go1.13.5.linux-amd64.tar.gz版本) 需设置 GOPATH GOROOT
node(本例使用的是:node-v12.16.1-linux-x64.tar.gz版本) 需设置 NODE_HOME1 2 3 4 5 6 7 # 设置环境变量示例,可加入到~/.bashrc等配置中 export GOROOT=/root/golang/go export PATH=$PATH:$GOROOT/bin export GOPATH=/root/gopath export NODE_HOME=/root/node-v10.17.0-linux-x64 export PATH=$PATH:$NODE_HOME/bin export GOPROXY=https://goproxy.cn,direct
1.2 编译环境安装 1 2 3 4 5 6 7 8 9 10 11 12 # 安装yarn npm install -g yarn # 安装dev工具 yum groupinstall "Development Tools" # 安装编译打包工具 yum install ruby-devel gcc make rpm-build rubygems # 替换ruby国内源 gem sources -a https://gems.ruby-china.com/ # ruby安装fpm gem install --no-ri --no-rdoc fpm # 查看fpm版本 fpm --version
1.3 代码获取 1 2 # 必须把工程下载到 GOPATH 路径下,否则go无法编译 git clone git@github.com:grafana/grafana.git ${GOPATH}/
2. 编译介绍 2.1 前端 1 2 3 4 5 6 7 8 9 10 11 # 安装依赖 yarn install --pure-lockfile # 或用make命令 # 具体make相关命令都可以查看工程根目录下的Makefile了解细节 make node_modules # 编译及运行前端,监控代码改动 yarn start # 单独编译前端 make build-js
2.2 编译后端 1 2 3 4 5 6 7 8 9 10 11 make run # 编译和运行系统,监控代码更改 # 纯后端编译 go run build.go setup go run build.go build # 后端运行 go run # 只编译后端 make build-go
2.3 打包 1 2 3 4 go run build.go pkg-rpm go run build.go build package # 基于Makefile,纯打包: make package
2.4 Docker image 制作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 # 到工程目录 # 将初始化数据放在./deploy目录下,结构如下: deploy ├── bin │ └── linux-amd64 │ ├── grafana-cli │ ├── grafana-cli.md5 │ ├── grafana-server │ └── grafana-server.md5 ├── init_data │ ├── grafana.db │ ├── grafana.ini │ ├── ldap.toml │ └── plugins.tar.gz └── software ├── dockerized-phantomjs.tar.gz └── phantomjs-2.1.1-linux-x86_64.tar.bz2 # 制作镜像: # 方法1: Makefile里新增封装函数 make build-docker-granafa # 方法2(不再使用) docker build -t my-granafa.1.0:662.2.0.6 . # 运行测试 docker run -d --name=my-granafa.1.0-test -p 3002:3000 my-granafa.1.0:662.2.0.6 # 假定本地数据文件夹地址 /root/work/grafana/3-data # 需提前准备好数据(版本包发布时提供) # 为文件夹赋权 chmod -R 777 /root/work/grafana/data # 带映射启动,端口自定 docker run -d --name=my-granafa.1.0 -p 3002:3000 -v /root/work/grafana/3-data/grafana.ini:/etc/grafana/grafana.ini -v /root/work/grafana/3-data/grafana.db:/var/lib/grafana/grafana.db -v /root/work/grafana/3-data/logs:/var/log/grafana my-granafa.1.0:662.2.0.6 # 保存镜像到本地 docker save my-granafa.1.0:662.2.0.6 | gzip >my-granafa.1.0-662.2.0.6-docker-x86_64.tar.gz
3. 问题记录 3.1 在前端编译的时候(yarn install –pure-lockfile)会出现如果下错误 1 > _error /root/gotest/src/github.com/grafana/node_modules/phantomjs-prebuilt: Command failed._ > _Exit code: 1_ > _Command: node install.js_ > _Arguments:_ > _Directory: /root/gotest/src/github.com/grafana/node_modules/phantomjs-prebuilt_ > _Output:_ > _PhantomJS not found on PATH_ > _Unexpected platform or architecture: linux/arm64_
原因:在 arm 中不支持 PhantomJS,所以需要在 package.json 中删除 路径: github.com/grafana/package.json 参见:https://github.com/grafana/grafana/issues/14115
3.2 在打包编译的时候出现如下错误 1 2 > _Running "phantomjs" task_ > _Warning: Unable to read "./node_modules/phantomjs-prebuilt/lib/location.js" file (Error code: ENOENT). Use --force to continue._ > _Aborted due to warnings._ > _exit status 3_ > _exit status 1_
删除对应文件下对应的 task github.com/grafana/scripts/grunt/build_task.js
3.3 make run 的时候会出现空间不足的错误提示 1 > [ERRO] Fail to watch directory[no space left on device]
1 2 3 4 # 修改配置文件 vim /usr/lib/sysctl.d/50-default.conf # 添加以下设置 fs.inotify.max_user_watches = 131072
以上为 X86 环境下客制化编译 Grafana 的介绍