---
title: "使用源码构建 oblogproxy | OceanBase 文档中心"
description: 使用源码构建 oblogproxy 您可以通过使用源码和下载安装包两种方式安装部署 oblogproxy。本文将介绍如何使用源码构建 oblogproxy。 编译 前置条件 安装 CMake 要求版本 3.20 及以上，下载安装，请参考 CMake 官方网站 。 安装依赖 根据操作系统的不同，安装依赖的情况可以分为以…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.1.4 社区版

# 使用源码构建 oblogproxy

更新时间：2023-08-03 17:20:32

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V3.1.4/zh-CN/1800.supporting-tools/400.cdc/300.oblogproxy/100.install-and-deploy-oblogproxy/100.use-source-code-to-build-an-oblogproxy.md)  

您可以通过使用源码和下载安装包两种方式安装部署 oblogproxy。本文将介绍如何使用源码构建 oblogproxy。

## 编译

### 前置条件

1. 安装 CMake

   要求版本 3.20 及以上，下载安装，请参考 [CMake 官方网站](https://cmake.org/download/) 。
 2. 安装依赖

   根据操作系统的不同，安装依赖的情况可以分为以下两种

      - 基于 Fedora（包括 CentOS，Fedora，OpenAnolis，RedHat，UOS 等）

       ```bash
       yum install git wget rpm rpm-build cpio gcc gcc-c++ make glibc-devel glibc-headers libstdc++-static binutils

       ```
      - 基于 Debian（包括 Debian，Ubuntu 等）

       ```bash
       apt-get install git wget rpm rpm2cpio cpio gcc make build-essential binutils

       ```

### 编译操作

#### 执行 CMake 编译

```bash
mkdir buildenv && cd buildenv
# 生成
cmake ..
# 执行
make -j 6

```

> **说明**
>
>  
>
> 进行完该步操作，当前目录将产出 `logproxy` 二进制文件。

### 编译选项

在执行 CMake 编译时，可以添加编译选项改变默认的行为。例如, 编译出 Demo，成功后，当前目录还会产出 `demo_client` 二进制。

```bash
mkdir buildenv && cd buildenv
cmake -DWITH_DEMO=ON ..
make -j 6

```

#### 自定义 libobcdc.so

1. 获取 libobcdc.so

   您可以自己指定编译所使用的 obcdc，可在下载预编译包或者自行编译两种方式中任选其一。

      - 下载预编译包

       您可在 [Release 页面](https://github.com/oceanbase/oceanbase/releases) 下载预编译包，obcdc 的包名是 "oceanbase-ce-devel-xxxx.系统版本.x86_64.rpm"，可根据自己的系统选取，解压：

       ```bash
       rpm2cpio oceanbase-ce-devel-xxxx.系统版本.x86_64.rpm | cpio -div && mv ./usr ./liboblog

       ```

       解压后获得：

            - libobcdc.so：在 `./usr/lib` 目录下。
            - libobcdc.h：在 `./usr/include` 目录下。
      - 编译 obcdc

       您可参考 [obcdc 编译说明](https://www.oceanbase.com/docs/community-observer-cn-10000000000450601)，在编译 [OceanBase 代码库](https://github.com/oceanbase/oceanbase#how-to-build) 时，添加参数 `OB_BUILD_LIBOBLOG=ON`。

       ```bash
       git clone https://github.com/oceanbase/oceanbase.git && cd oceanbase
       bash ./build.sh release --init -DOB_BUILD_LIBOBLOG=ON --make

       ```

       获得编译产出：

            - libobcdc.so：在 `build_release/tools/obcdc/src/` 目录下。
            - obcdc_tailf：在 `build_release/tools/obcdc/tests/` 目录下。
 2. 编译 oblogproxy

   若您选择自定义 libobcdc.so，在编译 oblogproxy 时需要在编译命令中打开自定义 obcdc 的开关并指定路径：

   ```bash
   mkdir buildenv && cd buildenv
   # 设置 CMake 环境变量从而可以找到预编译的 obcdc
   CMAKE_INCLUDE_PATH=/path/to/obcdc CMAKE_LIBRARY_PATH=/path/to/obcdc cmake -DUSE_LIBOBLOG=ON ..
   # 执行
   make -j 6

   ```

   > **说明**
   >
   >  
   >
   > 这里假设您把 `libobcdc.so` 和 `libobcdc.h` 都放在了 `/path/to/obcdc` 下。

#### 全部编译参数

| 选项 | 默认 | 说明 |
| --- | --- | --- |
| WITH_DEBUG | ON | 调试模式带 Debug 符号 |
| WITH_ASAN | OFF | 编译带 [AddressSanitizer](https://github.com/google/sanitizers/wiki/AddressSanitizer) |
| WITH_TEST | OFF | 测试 |
| WITH_DEMO | OFF | Demo |
| WITH_GLOG | ON | 使用 glog |
| WITH_DEPS | ON | 自动下载预编译依赖 |
| USE_LIBOBLOG | OFF | 使用自定义预编译的 obcdc |
| USE_CXX11_ABI | ON | 是否使用 C++ 11 ABI    **注意**   如果您使用了预编译的依赖（obcdc），需要保持一致，否则会找不到符号。 |

### 编译依赖说明

默认情况下，CMake 会自动下载并编译依赖库。但有几个组件需要特别说明：

- openssl：当前使用的版本是：1.0.1e。

  > **注意**
  >
  >  
  >
  > 1.0.* 和 1.1.* 版本 API 少量不兼容，当前 obcdc 和 logproxy 都是基于 1.0.* 实现的，因此，您需注意版本是否一致。
 - obcdc：如前文描述，您也可以自行获取或编译，并由环境变量指定路径，运行时需要指定 LD_LIBRARY_PATH。
 - libaio：obcdc 依赖。

## 运行

oblogproxy 单一配置文件，用代码目录下的 `conf.json`。

1. 配置系统租户

   您获得 OBServer 的 sys 租户账号和密码后，需要通过加密配置给 oblogproxy，执行以下命令即可得到账号和密码的密文：

   ```bash
   # 这里假设账号和密码分别为：user，pswd
   ./logproxy -x user
   # 执行后将会输出 4B9C75F64934174F4E77EE0E9A58****
   ./logproxy -x pswd
   # 执行后将会输出 DCE2AF09D006D6A440816880B938****

   ```

   把获得的账号和密码的密文分别配置到 `conf.json` 中的 `ob_sys_username` 和 `ob_sys_password` 字段，例如：

   ```json
   {
     "ob_sys_username": "4B9C75F64934174F4E77EE0E9A58****",
     "ob_sys_password": "DCE2AF09D006D6A440816880B938****"
   }

   ```
 2. 组织程序目录

   ```bash
   # 创建程序目录
   mkdir -p ./oblogproxy/bin ./oblogproxy/run
   # 复制配置文件
   cp -r ../conf ./oblogproxy/
   # 复制起停脚本
   cp ../script/run.sh ./oblogproxy/
   # 复制程序二进制
   cp logproxy ./oblogproxy/bin/

   ```
 3. 启动 oblogproxy

   ```bash
   cd ./oblogproxy
   # 指定 libobcdc.so 目录，让 oblogproxy 可以动态依赖
   export LD_LIBRARY_PATH=/path/to/libobcdc
   bash ./run.sh start

   ```

   默认监听 `2983` 端口，修改 `conf.json` 中的 `service_port` 字段可更换监听端口。

   > **说明**
   >
   >  
   >
   > 此时可以使用 oblogclient 进行 OceanBase 数据订阅，详细信息，参考 [使用文档](https://github.com/oceanbase/oblogclient)。

## 链路加密

### oblogclient 与 oblogproxy 间 TLS 通信

修改 `conf.json` 中以下字段：

- `channel_type`："tls"，开启与 oblogclient 通信的 TLS。
 - `tls_ca_cert_file`：CA 证书文件路径。
 - `tls_cert_file`：服务器端签名证书路径。
 - `tls_key_file`：服务器端的私钥路径。
 - `tls_verify_peer`：true，开启 oblogclient 验证。

> **注意**
>
>  
>
> - 对应的 oblogclient 也需要相应配置，详细情况，参考 [oblogclient链路加密](https://github.com/oceanbase/oblogclient)。
>  - 以上路径均需使用绝对路径。

### oblogproxy（obcdc）与 OBServer 间 TLS 通信

> **说明**
>
>  
>
> oblogproxy 运行 obcdc 与 OBServer 进行交互。

- `liboblog_tls`：true，开启与 OBServer 通信的 TLS。
 - `liboblog_tls_cert_path`：OBServer 相关证书文件路径（绝对路径），可以复制 OBServer 部署文件路径下的 `wallet` 文件夹，需要确保此路径包含：ca.pem，client-cert.pem，client-key.pem。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
