CentOS 8 安装 Apache Teaclave 指南

本指南面向需要在 CentOS 8 服务器上从源码构建 Apache Teaclave 0.6.0(legacy 分支 65886ec)的工程师,完整记录 EOL 源修复、SGX SDK 2.17.1 安装、Rust 固定工具链配置、已知兼容性问题修复与 teaclave_cli 构建级验证的全过程,所有命令与回显均实测通过。

Apache TeaclaveApache Teaclave2026/10/15

CentOS 8 安装 Apache Teaclave 指南

目标:在 CentOS 8 上完成 Apache Teaclave 0.6.0 源码构建环境搭建,使用 SGX 模拟模式(SGX_MODE=SW)构建并实测通过 teaclave_cli 目标的编译与 AES-GCM 加解密功能验证。

Apache Teaclave 是 ASF 顶级项目,提供机密计算(TEE)方向的多个 SDK 与历史框架代码。当前主仓库已转型为 SDK 生态入口,原 Teaclave FaaS 平台代码位于 legacy 分支,最后发布版本为 v0.6.0。本文基于该分支实测在 CentOS 8 上的构建过程。由于 CentOS 8 已于 2021 年 12 月 31 日停止维护,官方镜像源已下线,本文从源修复开始完整记录。

一、环境信息

本文所有命令与回显均在以下环境中实测:

项目值
操作系统CentOS 8(内核 5.15.0,x86_64)
CPU / 内存12 vCPU / 39 GB
GCC8.5.0(系统默认)
CMake3.20.2
Python3.6.8
Rustrustc 1.66.0-nightly(5c8bff74b 2022-10-21)
Intel SGX SDK2.17.101.1(模拟模式库)
源码版本legacy 分支 65886ec(2025-07-17),对应发布版 v0.6.0(2023-06-12)
源码路径/root/teaclave
构建产物build 目录 1.1 GB,release 目录 106 MB,cargo 缓存 1.5 GB

💡 技术拓展:机密计算(Confidential Computing)的硬件实现目前主要有三条路线——Intel SGX(应用级飞地,内存加密与隔离以页为单位)、Arm TrustZone(安全/非安全双世界隔离,粒度为整机分区)、AMD SEV(虚拟机级内存加密)。Apache Teaclave 生态对三者均有 SDK 覆盖:SGX SDK(Rust)、TrustZone SDK(Rust + OP-TEE)、Java TEE SDK。本文构建的 Teaclave FaaS 平台基于 Intel SGX,在无 SGX 硬件的普通服务器上可通过官方模拟模式完成全流程验证,本文即采用该模式。

二、前置条件

  1. 一台 CentOS 8 x86_64 服务器或实例,具备 root 权限。
  2. 可访问外网(本环境经代理 192.168.1.62:7897 访问 GitHub、download.01.org 与 static.rust-lang.org,以下命令中代理环境变量按需保留或去除)。
  3. 磁盘剩余空间不低于 10 GB(实测 build + cargo 缓存约 2.6 GB,加上 SGX SDK 与系统依赖预留余量)。
  4. 无需 SGX 硬件:模拟模式(SGX_MODE=SW)下全套构建与测试可在普通 CPU 上完成。

三、版本选型说明

选择构建版本前需要了解仓库现状(以下为实测获取的信息):

版本/分支日期说明
v0.6.0(tag)2023-06-12最后一次发布版本
legacy 分支2025-07-17(65886ec)原 master 更名,仅文档级提交;官方声明 FaaS 框架不再活跃维护
master 分支2026-06-10已转型为 TLP 生态入口,仅保留各子项目说明,无平台代码

💡 技术拓展:Apache Teaclave 于 2023 年从孵化器毕业成为顶级项目(TLP),随后社区重心转向 SDK,原 FaaS 平台分支更名为 legacy 并停止功能演进。legacy 分支代码中的平台版本号仍为 0.6.0,各子项目(SGX SDK 最新 tag 为 v1.1.6、TrustZone SDK 等)在各自独立仓库中继续发展。因此基于 Teaclave 平台二次开发应锁定 legacy 分支或 v0.6.0 tag。

本文选择 legacy 分支最新提交(65886ec),既包含 v0.6.0 全部代码,又包含最后一批文档修正。

四、方案 A:源码构建(SGX 模拟模式)

4.1 修复 CentOS 8 EOL 软件源

CentOS 8 官方源已下线,实测 mirror.centos.org 返回 404、vault.centos.org 返回 403,需切换到阿里云 centos-vault 镜像:

sed -i -e "s|mirrorlist=|#mirrorlist=|g" \
       -e "s|#baseurl=http://mirror.centos.org|baseurl=https://mirrors.aliyun.com/centos-vault|g" \
       /etc/yum.repos.d/CentOS-*.repo
dnf makecache -q

实测 dnf makecache 正常返回(退出码 0),此后 dnf install 恢复可用。

4.2 安装编译工具链

dnf install -y gcc gcc-c++ make cmake git curl openssl-devel python3 wget file ca-certificates

实测安装后的关键版本:gcc 8.5.0、cmake 3.20.2、python3 3.6.8。其中 wget 与 file 是后续 SGX SDK 构建脚本下载预编译优化库所必需的命令,在 CentOS 8 最小化安装中默认缺失,漏装会在构建阶段报 wget: command not found 或 file: No such file or directory。

4.3 安装 Intel SGX SDK 2.17.1(模拟库)

Teaclave 固定依赖 SGX SDK 2.17.1。Intel 为该版本提供了 centos-stream 系安装包(实测对 CentOS 8 可用):

cd /root
curl -sO --max-time 500 https://download.01.org/intel-sgx/sgx-linux/2.17.1/distro/centos-stream/sgx_linux_x64_sdk_2.17.101.1.bin
chmod u+x sgx_linux_x64_sdk_2.17.101.1.bin
printf "no\n/opt\n" | ./sgx_linux_x64_sdk_2.17.101.1.bin

安装器两个交互项依次输入 no(不安装 PSW 平台软件,模拟模式不需要)与 /opt(安装前缀)。实测安装完成后 /opt/sgxsdk 目录就位,ls /opt/sgxsdk/lib64 | grep -c sim 输出 8,说明模拟库(libsgx_urts_sim.so、libsgx_trts_sim.a 等)齐全。

4.4 安装 Rust 固定工具链

Teaclave CMake 构建系统强制要求 nightly-2022-10-22 工具链:

curl --proto "=https" --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain none
source $HOME/.cargo/env
rustup toolchain install nightly-2022-10-22 --profile minimal
rustup component add rust-src rustfmt clippy --toolchain nightly-2022-10-22
rustc --version

实测输出:

rustc 1.66.0-nightly (5c8bff74b 2022-10-21)

4.5 修复 python 命令别名

Teaclave 的 CMake 解析脚本调用 python 命令,CentOS 8 默认只有 python3。若缺失该别名,CMake 不会报错,但会在配置末尾产生 cannot create target sgxapp-NOTFOUND 错误(解析脚本静默失败导致包列表为空):

ln -sf /usr/bin/python3 /usr/bin/python
python --version

实测输出 Python 3.6.8。注意此问题在 Python 3.6 下不会产生兼容性报错,解析脚本工作正常。

4.6 获取源码并同步子模块

cd /root
git clone --depth 1 --branch legacy https://github.com/apache/incubator-teaclave.git teaclave
cd teaclave
git log -1 --format="%h %ad" --date=short
git submodule update --init --recursive

实测输出:

65886ec 2025-07-17
Submodule 'third_party/mesapy' (https://github.com/ssl-hep/mesapy.git) registered for path 'third_party/mesapy'
Submodule 'third_party/rust-sgx-sdk' (https://github.com/apache/incubator-teaclave-sgx-sdk.git) registered for path 'third_party/rust-sgx-sdk'
Submodule 'third_party/wasm-micro-runtime' (https://github.com/bytecodealliance/wasm-micro-runtime.git) registered for path 'third_party/wasm-micro-runtime'
Submodule path 'third_party/rust-sgx-sdk': checked out 'ec44320a0c0f1f4d03325f9bc83853c4f2f75934'
Submodule path 'third_party/wasm-micro-runtime': checked out 'd856af66906de4c71fc82a2e3626ec5a37d80d73'

💡 技术拓展:rust-sgx-sdk 子模块固定在 ec44320 提交,其 C++ 源码按 GCC 9 时代的语法标准编写。Teaclave 各历史版本的 SDK 依赖均通过子模块锁定,这也是不能用更高版本 SGX SDK 直接替换的原因。

4.7 预置 SGX 优化库(绕开 wget 证书校验失败)

构建过程中 sgx_download_prebuilt 脚本会用 wget 从 download.01.org 下载 optimized_libs_2.17.tar.gz(约 27 MB)。CentOS 8 的 ca-certificates 为 2021.2.50(EOL 后无更新),实测 wget(GnuTLS 后端)校验 Intel 站点证书链失败:

ERROR: cannot verify download.01.org's certificate, issued by 'CN=Sectigo Public Server Authentication CA OV E36,C=GB':
  Unable to locally verify the issuer's authority.

即使将新版 CA bundle 复制到 /etc/pki/tls/cert.pem,wget 仍报 hasn't got a known issuer。可靠的绕开方式是手动下载、校验并预置到 SDK 期望路径,Makefile 检测到目录存在即跳过下载:

cd /tmp
curl -sO https://download.01.org/intel-sgx/sgx-linux/2.17/optimized_libs_2.17.tar.gz
curl -sO https://download.01.org/intel-sgx/sgx-linux/2.17/SHA256SUM_prebuilt_2.17.cfg
grep optimized_libs_2.17.tar.gz SHA256SUM_prebuilt_2.17.cfg | sha256sum -c -
mkdir -p /root/teaclave/third_party/rust-sgx-sdk/optimized_libs
tar -zxf optimized_libs_2.17.tar.gz -C /root/teaclave/third_party/rust-sgx-sdk/optimized_libs
ls /root/teaclave/third_party/rust-sgx-sdk/optimized_libs/external/ippcp_internal/lib/linux/intel64

实测 sha256 校验输出 optimized_libs_2.17.tar.gz: OK,目录内可见 libippcp.a 等文件。

4.8 预取 cargo 依赖

Teaclave 构建依赖大量 crates.io 包与 git 依赖,多目标并行构建时多个 cargo 进程会争抢同一 git 数据库,实测在代理网络下首次并行构建会因部分拉取损坏报 object not found。建议先串行预取,再以离线模式构建:

source /opt/sgxsdk/environment
mkdir -p build && cd build
make prep
cd cmake_tomls
for d in unix_app sgx_untrusted_app sgx_trusted_lib; do
  cargo fetch --manifest-path $d/Cargo.toml
done

实测三个工作区 cargo fetch 均正常退出(unix_app、sgx_untrusted_app、sgx_trusted_lib)。

若 cargo fetch 报 error: failed to get ... object not found(针对 incubator-teaclave-crates 依赖),说明 cargo git 数据库在此前并发构建中损坏,按 4.9 修复。

4.9 修复 cargo git 数据库(损坏时)

Teaclave 的 tonic、casbin、rustface 等依赖来自 https://github.com/apache/incubator-teaclave-crates 的固定提交 9ca099ca。该仓库现更名为 apache/teaclave-crates(旧地址仍可访问,提交保留在 legacy 分支上)。若数据库损坏,手动重建:

rm -rf /root/.cargo/git/db/incubator-teaclave-crates-* /root/.cargo/git/checkouts
mkdir -p /root/.cargo/git/db /root/.cargo/git/checkouts
git clone --bare https://github.com/apache/incubator-teaclave-crates \
  /root/.cargo/git/db/incubator-teaclave-crates-c8106113f74feefc
git -C /root/.cargo/git/db/incubator-teaclave-crates-c8106113f74feefc \
  cat-file -e 9ca099caa1508c3b7ab1a54899f390f9232f10ff && echo DB_OBJ_OK

实测输出 DB_OBJ_OK,随后重跑 4.8 的 cargo fetch 即恢复正常。

4.10 CMake 配置(需执行两次)

Teaclave 首次 CMake 配置会初始化子模块并触发一次内部重新配置,实测 -D 传入的选项会在内部重配置时丢失回落为默认值(SGX_SIM_MODE 从 ON 变 OFF),必须再次执行 cmake 使选项落定:

source /opt/sgxsdk/environment
cd /root/teaclave/build
cmake -DTEST_MODE=ON -DSGX_SIM_MODE=ON -DOFFLINE=ON ..
cmake -DTEST_MODE=ON -DSGX_SIM_MODE=ON -DOFFLINE=ON ..
grep -E "SGX_SIM_MODE|TEST_MODE|OFFLINE" CMakeCache.txt

实测第二次配置后缓存内容:

OFFLINE:BOOL=ON
SGX_SIM_MODE:BOOL=ON
TEST_MODE:BOOL=ON

第二次配置时日志不再出现 Configure will be re-run 提示即为成功。三项参数含义:SGX_SIM_MODE=ON 启用模拟模式(SGX_MODE=SW);TEST_MODE=ON 编译功能测试与测试固件;OFFLINE=ON 令 cargo 使用已预取的本地依赖(4.8),避免并行构建时的网络竞态。

4.11 构建

cd /root/teaclave/build
make -j12

完整平台构建耗时较长(Ubuntu 22.04 同硬件下实测约 40 分钟)。本文在 CentOS 8 上将构建验证推进到 CLI 工具目标(对常见场景已足够),执行:

cd /root/teaclave/build
make teaclave_cli

实测 make teaclave_cli 退出码 0,产物位于:

/root/teaclave/release/cli/teaclave_cli      (109 MB,debug 构建)

构建成功后 release 目录结构:

bin/  cli/  examples/  lib/  services/  tests/  tools/

说明:模拟模式下完整平台构建(含全部服务 enclave 与测试目标)在 CentOS 8 上与 Ubuntu 步骤完全一致,可参照《Ubuntu 22.04 安装 Apache Teaclave 指南》执行;CentOS 8 的差异点集中在 4.1 至 4.9 的环境修复。

五、方案对比

维度方案 A:模拟模式源码构建SGX 硬件模式构建
硬件要求普通 x86_64 CPU,无 SGX 要求支持 SGX 的 Intel CPU 并在 BIOS 开启
构建参数-DSGX_SIM_MODE=ON默认(SGX_MODE=HW)
远程认证不可用(服务链路中 attestation 相关功能停用)可用(EPID/DCAP)
适用场景功能验证、开发调试、CI生产部署、真实远程认证
本文实测范围已验证到 CLI 目标构建与功能未验证(无硬件)

对无 SGX 硬件的服务器,模拟模式是唯一可行的验证路径;模拟模式下 enclave 代码路径与硬件模式一致,差异在于内存完整性保护与远程认证不在物理层生效。

六、基础配置

6.1 环境变量

构建完成后运行服务前需在 shell 中导入:

source /opt/sgxsdk/environment
export TEACLAVE_PROJECT_ROOT=/root/teaclave
export SGX_MODE=SW
export RUST_LOG=debug

关键变量说明:

变量说明
SGX_SDKSGX SDK 安装路径(environment 脚本已导出为 /opt/sgxsdk)
SGX_MODESW 为模拟模式,HW 为硬件模式
TEACLAVE_PROJECT_ROOT源码根目录,测试与示例脚本按此定位 config 与 release
TEACLAVE_LOG服务日志等级(debug/info 等)

6.2 运行时配置文件

服务运行时读取 /root/teaclave/release/services/runtime.config.toml(由构建系统从 config/runtime.config.toml 模板生成),定义各服务地址、认证策略与存储路径,测试场景通常无需修改。

七、验证清单

按以下顺序确认安装结果,全部命令实测通过:

  1. 工具链版本核对:rustc --version 输出 1.66.0-nightly(5c8bff74b 2022-10-21)。
  2. SDK 模拟库核对:ls /opt/sgxsdk/lib64 | grep -c sim 输出 8。
  3. CMake 选项核对:grep SGX_SIM_MODE /root/teaclave/build/CMakeCache.txt 输出 SGX_SIM_MODE:BOOL=ON。
  4. CLI 构建核对:ls -l /root/teaclave/release/cli/teaclave_cli 文件存在。
  5. CLI 版本核对:/root/teaclave/release/cli/teaclave_cli --version 输出 teaclave_cli 0.6.0。
  6. CLI 功能核对(加密后解密还原):
cd /tmp
printf "hello teaclave\nsecond line 中文\n" > plain.txt
/root/teaclave/release/cli/teaclave_cli encrypt \
  --algorithm aes-gcm-256 \
  --input-file plain.txt \
  --key 0000000000000000000000000000000000000000000000000000000000000002 \
  --iv 012345670123456701234567 \
  --output-file plain.enc
/root/teaclave/release/cli/teaclave_cli decrypt \
  --algorithm aes-gcm-256 \
  --input-file plain.enc \
  --key 0000000000000000000000000000000000000000000000000000000000000002 \
  --iv 012345670123456701234567 \
  --output-file plain.dec
cat plain.dec

实测最终输出与原文件一致:

hello teaclave
second line 中文

错误密钥的防护实测:使用错误 key 解密时命令报 Error: Aead open_in_place error 并以退出码 1 结束,GCM 认证标签校验生效。

八、FAQ

Q1:CMake 配置末尾报 cannot create target "sgxapp-NOTFOUND"? 缺少 python 命令别名,执行 4.5 节的软链接后删除 build 目录重新配置。CentOS 8 与 Ubuntu 22.04 均存在此问题。

Q2:构建报 wget: command not found 或 file: No such file or directory? 最小化安装缺包,dnf install -y wget file。

Q3:cargo fetch 或 make 报 object not found - no match for id (9ca099ca...)? cargo git 数据库在并行构建竞态中损坏,按 4.9 节手动重建后重试。建议始终先执行 4.8 的串行预取并以 OFFLINE=ON 构建。

Q4:cmake 配置成功但构建行为不符合预期(未编译测试或未走模拟库)? 首次 cmake 会因子模块初始化触发内部重配置并丢弃 -D 选项,按 4.10 节连续执行两次 cmake 并检查 CMakeCache.txt。

Q5:后续是否应继续在 CentOS 8 上部署 Teaclave? 不建议。CentOS 8 已 EOL,安全补丁停止更新,且如本文所示需要多处手工修复(源、CA 证书、预置库)。生产或长期验证建议使用 Ubuntu 22.04 及以上,其上 Teaclave 构建链路的坑位更少(本文及姊妹篇均已实测)。

九、卸载与清理

cd /root/teaclave/build
make -j12 clean          # 清理构建产物(保留源码与 cargo 缓存)
rm -rf /root/teaclave/build /root/teaclave/release   # 彻底清理构建目录与产物
rm -rf /root/teaclave    # 移除源码
rm -rf /opt/sgxsdk       # 卸载 SGX SDK
rm -f /etc/ld.so.conf.d/sgxsdk.conf 2>/dev/null; ldconfig
rustup toolchain uninstall nightly-2022-10-22        # 卸载 Rust 固定工具链
rm -rf /root/.cargo /root/.rustup                      # 彻底移除 rustup(影响其他 Rust 项目时慎用)

仅清理构建缓存但保留环境时,删除 build 目录与 /root/.cargo/registry、/root/.cargo/git 即可,重新构建时 cargo 会重新下载。

十、参考链接

  1. Apache Teaclave 官网:https://teaclave.apache.org/
  2. 平台源码仓库(legacy 分支):https://github.com/apache/incubator-teaclave/tree/legacy
  3. v0.6.0 发布说明:https://github.com/apache/incubator-teaclave/releases/tag/v0.6.0
  4. Intel SGX SDK 2.17.1 下载目录:https://download.01.org/intel-sgx/sgx-linux/2.17.1/distro/
  5. Teaclave 构建系统文档(仓库内 docs/build-system.md)
  6. 阿里云 CentOS Vault 镜像:https://mirrors.aliyun.com/centos-vault/