编译环境搭建
请注意:
- 如您只是想体验CURVE的部署流程和基本功能,则不需要编译CURVE,请参考单机部署
- 本文档仅用来帮助你搭建CURVE代码编译环境,便于您参与CURVE的开发调试及打包测试
使用Docker进行编译(推荐方式)
获取或者构建docker镜像
方法一:从docker hub镜像库中拉取docker镜像(推荐方式)
docker pull opencurve/curvebuild:centos8
方法二:手动构建docker镜像
使用工程目录下的Dockerfile进行构建,命令如下:
docker build -t opencurve/curvebuild:centos8 .
注意:上述操作不建议在curve工程目录执行,否则构建镜像时会把当前目录的文件都复制到docker镜像中,建议把Dockerfile拷贝到新建的干净目录下进行docker镜像的构建。
在docker镜像中编译
docker run -it opencurve/curvebuild:centos8 /bin/bash
cd <workspace>
git clone https://github.com/opencurve/curve.git 或者 git clone https://gitee.com/mirrors/curve.git
# (可选步骤)将外部依赖替换为国内下载点或镜像仓库,可以加快编译速度: bash replace-curve-repo.sh
bash mk-tar.sh
基于tar包的安装部署流程可参考:集群部署
在物理机上编译
curve编译依赖的包括:
依赖 | 版本 |
---|---|
bazel | 0.17.2 |
gcc | 支持c++11的兼容版本 |
curve的其他依赖项,均由bazel去管理,可不单独安装。
安装依赖
Ubuntu/LinuxMint/WSL
sudo apt-get install -y bazel git g++ make
Fedora/CentOS
sudo yum install bazel git gcc-c++ make
一键编译和打包
opencurve 提供一键编译脚本,mk-tar.sh 生成所需的全部tar二进制包,命令如下:
# (可选步骤)将外部依赖替换为国内下载点或镜像仓库,可以加快编译速度: bash replace-curve-repo.sh
bash ./mk-tar.sh
基于tar包的安装部署流程可参考:集群部署
特别的,由于curve内部版本使用在debian系统上,因此特别提供debian的版本,命令如下:
bash ./mk-deb.sh
注意:基于deb包的安装部署流程正在整理中,目前不推荐使用deb包安装部署
测试用例编译及执行
编译全部模块
仅编译全部模块,不进行打包
bazel build ... --compilation_mode=dbg -s --collect_code_coverage --jobs=32 --copt -DHAVE_ZLIB=1 --define=with_glog=true --define=libunwind=true --copt -DGFLAGS_NS=google --copt -Wno-error=format-security --copt -DUSE_BTHREAD_MUTEX
编译对应模块的代码和运行测试
编译对应模块,例如test/common目录下的common-test测试:
bazel build test/common:common-test --copt -DHAVE_ZLIB=1 --define=with_glog=true --compilation_mode=dbg --define=libunwind=true
执行测试
执行测试前需要先准备好测试用例运行所需的依赖:
动态库
export LD_LIBRARY_PATH=<CURVE-WORKSPACE>/thirdparties/etcdclient:<CURVE-WORKSPACE>/thirdparties/aws-sdk/usr/lib:/usr/local/lib:${LD_LIBRARY_PATH}
fake-s3
快照克隆集成测试中,使用了开源的fake-s3模拟真实的s3服务。
$ apt install ruby -y OR yum install ruby -y
$ gem install fakes3
$ fakes3 -r /S3_DATA_DIR -p 9999 --license YOUR_LICENSE_KEY
备注:
-r S3_DATA_DIR
:存放数据的目录--license YOUR_LICENSE_KEY
:fakes3需要key才能运行,申请地址见fake-s3-p 9999
:fake-s3服务启动的端口,不用更改
etcd
wget -ct0 https://github.com/etcd-io/etcd/releases/download/v3.4.10/etcd-v3.4.10-linux-amd64.tar.gz
tar zxvf etcd-v3.4.10-linux-amd64.tar.gz
cd etcd-v3.4.10-linux-amd64 && cp etcd etcdctl /usr/bin
执行单个测试模块
./bazel-bin/test/common/common-test
运行单元/集成测试
bazel 编译后的可执行程序都在 ./bazel-bin
目录下,例如 test/common 目录下的测试代码对应的测试程序为 ./bazel-bin/test/common/common-test
,可以直接运行程序进行测试。
- curve相关单元测试程序目录在 ./bazel-bin/test 目录下,集成测试在 ./bazel-bin/test/integration 目录下
- nebd相关单元测试程序在 ./bazel-bin/nebd/test 目录下
- nbd相关单元测试程序在 ./bazel-bin/nbd/test 目录下
如果想运行所有的单元测试和集成测试,可以执行工程目录下的ut.sh脚本:
bash ut.sh