237 lines
6.3 KiB
Markdown
237 lines
6.3 KiB
Markdown
使用源码构建 OceanBase 数据库
|
|
=========================================
|
|
|
|
通过源代码,您可以自行构建 OceanBase 数据库,并测试其最新特性。本文介绍如何通过源代码构建OceanBase 数据库。
|
|
|
|
前提条件
|
|
-------------------------
|
|
|
|
在构建 OceanBase 数据库之前,确保您的构建机器满足以下要求:
|
|
|
|
* 操作系统:CentOS 7/8 (x86 架构)
|
|
|
|
|
|
|
|
* 机器数量:1 台
|
|
|
|
|
|
|
|
* 最低硬件规格:
|
|
|
|
|
|
|
|
* 推荐硬件规格:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
获取源代码
|
|
--------------------------
|
|
|
|
运行以下命令,克隆 OceanBase 数据库源代码到您的构建机器:
|
|
|
|
```shell
|
|
git clone git@${GIT_MIRROR_ADDRESS}/oceanbase/oceanbase
|
|
```
|
|
|
|
|
|
**注意**
|
|
|
|
|
|
|
|
克隆代码需要先安装配置 Git。详细信息,参考 [Git 文档](https://git-scm.com/doc)。
|
|
|
|
获取构建依赖
|
|
---------------------------
|
|
|
|
您可以通过以下方式获取构建依赖:
|
|
|
|
* **方案一:** **使用 yum 源** **获取依赖包(推荐)**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
构建过程中,您所依赖的大多数工具和库都可以通过公共yum源及 OceanBase 的官方 yum 源获取。如您的操作系统在我们的支持范围内,您可以通过我们预制的脚本,直接下载对应的软件包以节约您的构建时间
|
|
|
|
第一步、安装必要的工具
|
|
|
|
您需要提前准备好以下软件:
|
|
|
|
```bash
|
|
yum install wget rpm* cpio make glibc-devel glibc-headers
|
|
```
|
|
|
|
|
|
|
|
第二步、执行以下命令确认您的编译机可以访问OceanBase官方yum源
|
|
|
|
```shell
|
|
curl http://mirrors.aliyun.com/oceanbase/OceanBase.repo
|
|
```
|
|
|
|
|
|
|
|
第三步、执行初始化脚本,下载构建依赖
|
|
|
|
```shell
|
|
# 进入代码根目录
|
|
cd oceanbase
|
|
|
|
# 执行build.sh脚本并传入init参数
|
|
sh build.sh init
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
* **方案二:自行编译依赖**
|
|
|
|
您也可以在 `deps/3rd` 目录下自行编译依赖。构建软件要求见下表:
|
|
|
|
|
|
| **所** **需软** **件** | **推荐版本(最低版本)** | **软件用途** | **提供依赖** | **必选** |
|
|
|---------------------------|------------------|----------|----------|--------|
|
|
| cmake | 3.20.0 | 构建工具 | 是 | 是 |
|
|
| make | 3.8.2 | 构建工具 | 否 | 是 |
|
|
| gcc | 5.2.0 | 构建工具/依赖库 | 是 | 是 |
|
|
| llvm/clang/lld | 11.0.1 (7.1.0) | 构建工具 | 是 | 是 |
|
|
| binutils | 2.30 | 构建工具 | 是 | 否 |
|
|
| flex | 2.5.35 | 代码生成 | 是 | 仅开发 |
|
|
| python2 | 2.7(2.6) | 代码生成 | 否 | 仅开发 |
|
|
| bison | 2.4.1 | 代码生成 | 是 | 仅开发 |
|
|
| ccache | 3.7.12 | 构建工具 | 是 | 否 |
|
|
| isa-l | 2.22.0 | 依赖库 | 是 | 是 |
|
|
| libaio | 0.3.112(0.3.109) | 依赖库 | 是 | 是 |
|
|
| libcurl | 7.29.0 | 依赖库 | 是 | 是 |
|
|
| libunwind | 1.5.0 | 依赖库 | 是 | 是 |
|
|
| mariadb-connector-c | 3.1.12 | 依赖库 | 是 | 是 |
|
|
| openssl-static | 1.0.1e | 依赖库 | 是 | 是 |
|
|
| glibc-devel/glibc-headers | 2.17 | 依赖库 | 否 | 是 |
|
|
| oss-c-sdk | 3.9.2 | 依赖库 | 否 | 否 |
|
|
| rpm\* | 4.14.1(4.11) | 打包工具 | 否 | 仅打包 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
构建/打包 OceanBase 数据库
|
|
----------------------------------------
|
|
|
|
OceanBase 数据库使用 CMake 作为构建工具,您可以直接使用 CMake 命令自行创建目录进行构建,也可以使用 `build.sh` 脚本使用预制的构建选项进行构建:
|
|
|
|
* DEBUG 构建
|
|
|
|
```shell
|
|
# 在源码目录下执行debug版的预制构建命令
|
|
sh build.sh debug
|
|
|
|
# 进入生成的 debug 构建目录
|
|
cd build_debug
|
|
|
|
# 进行构建
|
|
make -j{N} observer
|
|
|
|
# 查看构建产物
|
|
stat src/observer/observer
|
|
```
|
|
|
|
|
|
|
|
* RELEASE 构建
|
|
|
|
```shell
|
|
# 在源码目录下执行 release 版的预制构建命令
|
|
sh build.sh release
|
|
|
|
# 进入生成的 release 构建目录
|
|
cd build_release
|
|
|
|
# 进行构建
|
|
make -j{N} observer
|
|
|
|
# 查看构建产物
|
|
stat src/observer/observer
|
|
```
|
|
|
|
|
|
|
|
* 创建 RPM 包
|
|
|
|
```shell
|
|
# 在源码目录下执行 rpm包 的预制构建命令
|
|
sh build.sh rpm
|
|
|
|
# 进入生成的 rpm 打包目录
|
|
cd build_rpm
|
|
|
|
# 构建 rpm 包依赖的文件
|
|
make -j{N} rpm
|
|
|
|
# 查看构建产物
|
|
stat *rpm
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
**说明**
|
|
|
|
|
|
|
|
为加快构建速度,您可以使用 `-j` 参数并行构建。并行数量 `N` 建议为 min(CPU(Core)\* 2,内存(GB) / 2)。
|
|
|
|
构建选项说明
|
|
---------------------------
|
|
|
|
构建参数说明见下表:
|
|
|
|
|
|
| **构建选项** | **默认值** | **软件用途** |
|
|
|----------------------------|------------|------------------------------------------|
|
|
| OB_USE_LLVM_LIBTOOLS | ON | 使用 llvm-ar/ld.lld 等作为库工具,关闭则使用 binutils。 |
|
|
| OB_USE_CLANG | ON | 使用 clang 作为编译器,关闭则使用gcc。 |
|
|
| OB_COMPRESS_DEBUG_SECTIONS | OFF | 压缩二进制中的 DEBUG SECTIONS。 |
|
|
| OB_STATIC_LINK_LGPL_DEPS | ON(打包时OFF) | 静态链接LGPL协议的依赖 |
|
|
| OB_ENABLE_PCH | ON | 启用预编译头 |
|
|
| OB_ENALBE_UNITY | ON | 启用联合构建 |
|
|
| OB_USE_CCACHE | OFF | 启用编译缓存 |
|
|
| ENABLE_DEBUG_LOG | OFF | 开启调试日志。 |
|
|
|
|
|
|
|
|
后续操作
|
|
-------------------------
|
|
|
|
您在成功构建 OceanBase 数据库之后,可以使用 OBD 部署 OceanBase 数据库。详细信息参考 [使用 OBD 部署 OceanBase 数据库](../2.quickstart/4.deploy-the-oceanbase-database-by-using-obd.md)。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|