news 2026/9/12 1:50:15

TDengine 源码构建实战指南:从 CMake 编译、自动化测试到社区版打包的完整开发流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TDengine 源码构建实战指南:从 CMake 编译、自动化测试到社区版打包的完整开发流程

TDengine 源码构建实战指南:从 CMake 编译、自动化测试到社区版打包的完整开发流程

【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine

本文以 TDengine 官方开发者指南(README-JP.md)为骨架,面向希望自己动手从源码构建、测试、打包并贡献代码的开发者,完整讲解 TDengine 的系统要求、CMake 构建选项、单元/集成测试、社区版 tarball 打包、安装与运行全流程。读完本文,你将掌握在 Linux/macOS 上复现 TDengine 官方构建流程的能力,并能借助仓库中的 cmake/options.cmake、packaging/pack_community_tar.sh 与 test/README.md 深入理解每个环节的底层实现。

1. 项目定位:面向开发者的 TDengine 开源版本

TDengine 是一款为物联网(IoT)、车联网与工业物联网(IIoT)设计的开源、高性能、云原生且内置 AI 能力的时序数据库(TSDB),可高效实时地摄取、处理并分析每天 TB 乃至 PB 级的海量传感器数据。围绕这一核心定位,官方 README 总结了以下关键特性:

  • 高性能:通过解决高基数(high cardinality)问题支撑数十亿数据采集点,并在数据写入、查询与压缩性能上具备竞争力;
  • 简化方案:内置缓存、流式计算、数据订阅与 AI Agent 能力,降低系统设计与运维复杂度;
  • 云原生:原生分布式设计、分片与分区、计算存储分离、RAFT 协议、Kubernetes 部署支持;
  • AI 加持:内置 AI Agent TDgpt,可连接时序基础模型、大语言模型与机器学习算法,提供预测、异常检测、缺失值补全与分类能力;
  • 易用与易分析:超级表(super table)、时间窗口分区、预计算等机制让数据探索与整形高效简单;
  • 开源:核心模块(含集群功能与 AI Agent)均在开源许可下提供。

本仓库默认版本号可在 cmake/version.cmake 中查看(默认3.4.2.5.alpha),许可协议为 AGPL-3.0(见 LICENSE)。若想了解最新组件 TDgpt 的细节,可阅读 tools/tdgpt/README.md。

本文档其余内容聚焦于官方 README 中面向开发者的部分:如何自行构建、测试、打包、安装并运行 TDengine——这正是从源码贡献者的视角进入项目的最佳路径。

2. 构建前提条件

2.1 系统要求

官方指南给出的最低系统要求如下:

项目要求
操作系统Linux(Ubuntu 18.04+、CentOS 7+)、macOS 10.15+;Windows 支持受限
CPUx86_64 或 ARM64
内存建议 4 GB RAM 以上
磁盘建议 2 GB 以上可用空间
主要构建平台Linux

TDengine 的构建与测试主要面向 Linux 完成;macOS 构建仅作为本地开发支持;开源树中 Windows 支持有限,因此需要可复现构建时,请默认选择 Linux

2.2 构建工具安装

Ubuntu/Debian:

sudo apt-get update sudo apt-get install -y build-essential cmake git

CentOS/RHEL:

sudo yum groupinstall -y "Development Tools" sudo yum install -y cmake3 git

注意:构建外部依赖需要CMake 3.21 及以上版本。若发行版自带的 CMake 过旧,请从官方渠道安装新版本后再继续。

根据构建目标不同,还可能用到以下工具:

  • 运行test/下的测试框架需要Python 3
  • 构建 taosAdapter、taosKeeper 等组件需要Go 1.23 及以上

2.3 可选工具

  • ccache—— 加速重复构建:sudo apt install ccache
  • Conan 2.x—— 仅在构建taos-gen组件时需要:pip3 install conan

3. 从源码构建 TDengine

3.1 快速开始

获取源码后,在仓库根目录执行:

mkdir debug && cd debug cmake .. -DBUILD_CONTRIB=ON # 首次构建:-DBUILD_CONTRIB=ON 为必需 make -j$(nproc)

重要首次从源码构建时必须使用-DBUILD_CONTRIB=ON。该选项会下载 xxhash、zstd、lz4 等外部依赖并在.externals/下完成构建;第二次及以后的构建通常可以省略该标志,缓存产物会被自动复用。

常用的变体命令:

# 附带 CLI 工具的 Release 构建 cmake .. -DBUILD_CONTRIB=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON make -j$(nproc) # macOS 上的等价并行构建 cmake .. -DBUILD_CONTRIB=ON -DCMAKE_BUILD_TYPE=Release cmake --build . --parallel "$(sysctl -n hw.ncpu)"

3.2 构建选项详解

下表默认值取自 README-JP,对应 cmake/options.cmake 中定义的独立开源版默认配置:

选项默认值说明
BUILD_CONTRIBLinux 为OFF,其余为ON从源码构建第三方依赖,首次构建必需
CMAKE_BUILD_TYPEDebug标准 CMake 构建类型(Debug/Release/RelWithDebInfo
BUILD_TESTOFF使用 googletest 构建单元测试
BUILD_TOOLSOFF构建 taosBenchmark、taosdump 等工具
BUILD_SANITIZEROFF启用 sanitizer
BUILD_COVERAGEOFF启用覆盖率测量
BUILD_JEMALLOCOFF启用 jemalloc 分配器
BUILD_WEBSOCKETOFF启用 WebSocket 支持
BUILD_ASSERT_NOT_COREOFFassert 时不生成 core 文件
BUILD_PTHREAD_TWEAKOFF针对老旧 Linux 环境应用 pthread 调整
BUILD_ASTRAOFF面向 Astra 平台构建
BUILD_ASTRA_RPCOFF使用 Astra RPC 传输构建
BUILD_WITH_LEMONON包含 lemon 解析器支持
BUILD_WITH_UDFON包含 UDF(用户自定义函数)支持
BUILD_GEOSON包含 GEOS 支持(Astra 除外)
BUILD_SHARED_LIBSOFF构建共享库
RUST_BINDINGSON构建 Rust 绑定
BUILD_PCRE2ON包含 PCRE2 支持
BUILD_ADDR2LINEOFF构建 addr2line 辅助支持
BUILD_WITH_LEVELDBOFF启用 LevelDB 支持
BUILD_ROCKSDBLinux 为OFF,其余为ON从源码构建 RocksDB
ROCKSDB_USE_DEPSLinux 为ON,其余为OFF使用deps/下预编译的 RocksDB 而非源码构建
TD_USE_ROCKSDBON启用 RocksDB 支持
BUILD_WITH_LZ4ON包含 LZ4 支持构建
BUILD_S3Linux 为ON,但社区版构建强制OFF启用 S3 相关构建路径
BUILD_WITH_S3Linux 为ON,但社区版构建强制OFF可用时包含 S3 支持
BUILD_WITH_COSOFF包含 COS 支持
BUILD_WITH_LZMA2ON包含 LZMA2 支持
BUILD_WITH_ANALYSISLinux 为ON启用分析相关构建路径
BUILD_WITH_SQLITEOFF包含 SQLite 支持
BUILD_WITH_BDBOFF包含 Berkeley DB 支持
BUILD_WITH_LUCENEOFF包含 Lucene 支持
BUILD_WITH_NURAFTOFF包含 NuRaft 支持
BUILD_WITH_UVON包含 libuv 支持
BUILD_WITH_UV_TRANSON包含 libuv 传输支持
BUILD_DEPENDENCY_TESTSLinux 为ON构建依赖测试
BUILD_DOCSOFF构建 Doxygen 文档
BUILD_WITH_INVERTEDINDEXON启用倒排索引支持
BUILD_TAOSD_INTEGRATEDOFFtaosd构建为集成库
BUILD_AS_LIBOFF将 TDengine 构建为库
BUILD_RELEASEOFF启用发布版构建路径
BUILD_LIBSASLOFF使用 libsasl2 构建
BUILD_FLEX_DEPLOYOFF启用灵活部署模式
BUILD_WITH_RAND_ERROFF启用随机错误注入
BUILD_TSZ_ENABLEDON启用 TSZ 压缩支持
BUILD_USE_PUBLIC_DEPSOFF外部依赖使用公网 URL 而非内部镜像获取

源码一致性说明:上表默认值以官方 README 为准,个别选项在 cmake/options.cmake 中实际定义可能略有出入。例如BUILD_LIBSASL在源码第 140 行实际默认值为ONBUILD_USE_PUBLIC_DEPS在文件中被定义了两次(standalone 分支为ON、末尾为OFF)。以当前仓库源码实际为准是最稳妥的做法。

典型组合示例:

cmake .. -DBUILD_CONTRIB=ON -DCMAKE_BUILD_TYPE=Release -DBUILD_TOOLS=ON

3.3 构建产物

debug/为构建目录时,默认构建树结构如下:

  • 二进制位于debug/build/bin/
    • taosd—— TDengine 服务端守护进程
    • taos—— TDengine CLI 客户端
    • taosBenchmark—— 基准测试工具(需BUILD_TOOLS=ON
    • taosdump—— 导入/导出工具(需BUILD_TOOLS=ON
  • 库文件位于debug/build/lib/
    • Linux 下为libtaos.so(或对应平台的客户端库)

4. 测试

4.1 单元测试

TDengine 使用 googletest 编写单元测试,开启BUILD_TEST=ON后通过 CTest 驱动:

cd debug cmake .. -DBUILD_CONTRIB=ON -DBUILD_TEST=ON make -j$(nproc) ctest --output-on-failure

部分单独的测试二进制也会输出到debug/build/bin/

4.2 集成测试

TDengine 在test/目录下提供了一套 Python 端的端到端测试框架。README-JP 给出了传统流程:先构建服务器与工具,再用测试配置启动taosd,最后运行系统测试用例:

# 先构建服务器与工具 cd debug cmake .. -DBUILD_CONTRIB=ON -DBUILD_TOOLS=ON -DBUILD_TEST=ON make -j$(nproc) # 以测试配置启动 taosd ./build/bin/taosd -c test/cfg &

以当前仓库为准,集成测试框架已演进为基于 Pytest 的新框架(详见 test/README.md),具备以下特点:

  • 基于Pytest,支持 fixture、参数化测试与插件扩展;
  • 集成原有测试框架的公共函数,实现既有代码与工具的无缝复用;
  • 支持通过YAML 文件灵活部署服务器,可自定义测试环境与配置;
  • 测试结束后自动生成Allure 报告
  • 测试用例存放在 test/cases 下,按主题分目录组织(如09-DataQuerying/17-DataSubscription/等)。

本地运行新框架测试的基本步骤:

cd test pip3 install -r requirements.txt # 在已启动 taosd 的环境中执行 pytest 用例 pytest cases/...

仓库还提供了批量执行脚本 test/run_tests.sh:它接收一个测试用例列表文件作为参数,逐行解析pytest ...命令并执行,将结果写入test_logs/case_result.txttest_logs/run_tests.log,通过日志中的successfully executedAsanFileSuccessLen: 1标记判定用例 PASS/FAILED,若环境中安装了 Allure 还会自动生成报告(见 test/run_tests.sh)。CI 侧的相关脚本位于 test/ci(如pytest.shrun.shrun_case.sh与用例清单cases.task)。

5. 打包与发布

5.1 社区版 tarball 打包

README-JP 中介绍了通过打包脚本生成开源社区版 tarball 的流程。以当前仓库为准,该脚本实际位于 packaging/pack_community_tar.sh,其 Usage 摘要如下(对应脚本头注释 packaging/pack_community_tar.sh):

./pack_community_tar.sh -c <compile_dir> -n <version> [-m <compat_version>] [-V <verType>]

首先完成构建:

mkdir debug && cd debug cmake .. -DCMAKE_BUILD_TYPE=Release -DBUILD_CONTRIB=ON -DBUILD_TOOLS=ON make -j$(nproc)

然后在仓库根目录运行打包脚本(README-JP 中的版本号示例3.3.6.0仅为演示,当前仓库 cmake/version.cmake 的默认版本为3.4.2.5.alpha):

cd .. ./packaging/pack_community_tar.sh -c debug -n 3.3.6.0

可选参数:

  • -m <compatible_version>—— 兼容版本号,默认3.0.0.0
  • -V <stable|beta|preRelease>—— 版本类型,默认stable

完整示例:

./packaging/pack_community_tar.sh \ -c debug \ -n 3.3.6.0 \ -m 3.0.0.0 \ -V stable

打包脚本的关键校验与行为(来自源码级核查 packaging/pack_community_tar.sh):

  • 版本格式校验-n必须匹配^([0-9]+\.){2,4}[0-9]+$(3~5 段数字);-V仅接受stablebetapreRelease(第 68-78 行);
  • 必需文件校验:构建目录下必须存在bin/taosdbin/taoslib/libtaos.solib/libtaosnative.so,以及packaging/tools/下的install.shinstall_client.shremove.shremove_client.shpackaging/cfg/taos.cfg(第 135-166 行);
  • 架构自动检测x86_64→x64aarch64/arm64→arm64mips64*→mips64loongarch64riscv64,未知架构按原样使用(第 110-123 行);
  • 仅支持 Linux:脚本检测到非 Linux 环境会直接报错退出(第 103-108 行)。

生成产物输出到仓库根目录下的release/目录:

release/TDengine-server-<version>-Linux-x64.tar.gz release/TDengine-client-<version>-Linux-x64.tar.gz

-V指定为betapreRelease,文件名会带上版本类型后缀(如TDengine-server-3.3.6.0-beta-Linux-x64.tar.gz)。

两层 tarball 结构(与既有打包流程保持一致):

  • 外层为分发用 tarball;
  • 内层为包含bin/cfg/inc/package.tar.gz

以 server 包为例,外层 tarball 还包含:

  • driver/libtaos.so.<version>libtaosnative.so.<version>以及记录兼容版本的vercomp.txt
  • examples/c:C 语言示例代码;
  • install.sh:安装脚本(脚本会将verMode=cluster替换为verMode=edge,并通过patch_server_install_messages去除社区包中不存在的 keeper/explorer 安装提示,见 第 179-191 行);
  • start-all.sh/stop-all.sh:社区版仅管理taosd一个服务的启停脚本。

server 包中的bin/包括核心二进制taosdtaos,以及存在时才打包的taosBenchmarktaosdumptaosudfinc/包含 include/client/taos.h、include/common/taosdef.h、include/util/taoserror.h、include/util/tdef.h、include/libs/function/taosudf.h 等头文件。client 包结构类似,但核心二进制为taos,配套install_client.shget_client.sh等脚本。

需要特别说明的是:社区版 tarball 只打包本仓库构建的产物——taosdtaostaosBenchmarktaosdumptaosudflibtaos.solibtaosnative.so、头文件与安装脚本。像taoskeepertaos-explorertaosx、各语言连接器、taosinspect等位于其他仓库或需要独立构建流程的组件,不在打包范围内

5.2 官方安装包

官方安装包由 packaging/tools/makepkg.sh 生成(位于packaging/tools/目录),该脚本按compile_dirversionbuild_timecpuTypeosTypeverModeverTypepagModeversionComp等参数生成适用于各操作系统的安装包,并区分 cluster(企业版)/cloud/edge 等模式。社区版开发者主要使用 5.1 节的pack_community_tar.sh流程。

6. 安装与运行

6.1 从安装包安装

对于由makepkg.sh生成的官方安装包:

tar -xzf TDengine-server-<version>-Linux-x86_64.tar.gz cd TDengine-server-<version> sudo ./install.sh

6.2 从源码直接安装

不经过打包,直接从本地源码构建结果安装:

cd debug sudo make install

6.3 启动与连接

安装完成后启动服务端并连接:

# 安装后启动服务 sudo systemctl start taosd # 通过 CLI 连接 taos

若想从构建树快速本地运行:

cd debug ./build/bin/taosd -c test/cfg

随后在另一个 shell 中执行:

cd debug ./build/bin/taos -c test/cfg

6.4 配置文件要点

-c指定的配置目录可参考打包用的默认配置 packaging/cfg/taos.cfg,其中集中了服务端与 WebSocket 两大类配置项。服务端侧关键项包括:

  • firstEp—— 集群中首个 dnode 的端点(默认hostname:6030),CLI 或 dnode 启动时连接;
  • fqdn—— 本 dnode 所在主机的 FQDN,可为 IP;
  • serverPort—— dnode 对外服务端口(默认6030);
  • logDir/dataDir/tempDir—— 日志、数据与临时文件目录(Linux 下默认/var/log/taos/var/lib/taos/tmp/);
  • minimalDataDirGB—— 磁盘剩余空间低于该值时 dnode 拒绝启动(默认2.0GB);
  • numOfLogLines/logKeepDays/asyncLog—— 日志行数上限、保留天数与异步写日志开关;
  • debugFlag系列 —— 按模块(timer/util/rpc/query/dnode/vnode/wal/sync 等)分别设置调试级别(131 仅警告与错误、135 增加 debug、143 增加 trace、199/207 同时输出到屏幕与文件)。

WebSocket 配置段(端口6041)则包含wsTlsMode(TLS 模式 0~3)、wsTlsVersionwsTlsCa(CA 证书路径或 PEM 内容)、adapterList(taosAdapter 地址列表,用于负载均衡与故障转移)以及connRetriesretryBackoffMsretryBackoffMaxMs(连接失败重试与退避策略)等。

7. 覆盖率

README-JP 介绍了本地生成 HTML 覆盖率报告的方式;以当前仓库为准,覆盖率相关工作已容器化到 test/ci/cov/ 目录,其使用方式记录在 test/ci/cov/README.md 中:

# 构建并启动容器 docker-compose up -d # 查看容器状态 docker-compose ps # 查看 cron 任务日志 docker-compose exec tdengine-coverage-cron cat /var/log/cron/cron.log

容器基于python:3-slim镜像,定时任务安排为:10:10运行测试报告、10:12运行带清理的测试报告、10:50执行清理;日志存放在宿主机的./cron_logs目录。需要手动验证时,可进入容器执行:

docker-compose exec tdengine-coverage-cron bash python3 /home/tdengine_coverage_alarm.py -test

覆盖率相关脚本(run_coverage_container.shrun_coverage_diff.shcoverage.tasktdengine_coverage_alarm.py等)均可在此目录中查阅。

8. 版本、CI 与许可

版本管理:构建版本号、兼容版本号、版本类型、git 提交号等由 cmake/version.cmake 统一管理(当前默认版本3.4.2.5.alpha,兼容版本3.0.0.0),并可通过BUILD_VER_NUMBERBUILD_VER_COMPATIBLEBUILD_VER_TYPEBUILD_GITINFO等 CMake 变量覆盖。

CI 工作流:构建检查相关工作流在仓库 test/ci 下可找到对应脚本,例如pytest.sh(运行 Pytest 用例)、run.sh/run_case.sh(容器内用例执行)、cases.task(用例任务清单)、run_upgrade_compat.sh(升级兼容性检查)与win_cases.task/run_windows_ci.py(Windows 用例与 CI 执行)。

许可协议:TDengine 以 GNU Affero General Public License 3.0(AGPL-3.0)开源,核心模块包括集群功能与 AI Agent 均在该许可下可用。


至此,从环境准备、源码构建、选项调优、测试验证,到社区版打包、安装运行与覆盖率收集,一条完整的 TDengine 开发者工作流已全部打通。你可以基于 packaging/pack_community_tar.sh 的参数化设计定制自己的发布流程,也可以借助 test/cases 下的用例目录深入理解各功能模块的预期行为,为后续的代码贡献打好基础。

【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 1:48:06

CAN总线与车辆协议全景解析:从物理层到应用实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 1:46:11

SpringBoot+Vue智慧养老系统开发实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 1:45:42

ETSI EN 303 645标准:消费级IoT设备安全实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华