# TeamTunnel 计量核心构建记录

这是由 TeamTunnel 使用未改动的 sing-box 1.14.0 上游源码自行编译的 Windows amd64 核心，**不是官方预编译发行文件**。增加 `with_v2ray_api` 构建选项，以读取按 direct / proxy 出站标签累积的流量计数。是否实际启用统计，仍由客户端生成的配置决定。

## 锁定输入

- 上游源码：[sing-box v1.14.0](https://github.com/SagerNet/sing-box/tree/v1.14.0)。本项目已有的 `third-party/sing-box-1.14.0-source.zip` 来自 [GitHub 源码归档](https://codeload.github.com/SagerNet/sing-box/zip/refs/tags/v1.14.0)。
- 源码 ZIP SHA-256：`76fdd3a079153e0f5e10ce94e618a72f25a3d6927676bf41de3509ca2ff6d271`。
- `go.mod` 要求至少 Go 1.25.5；本次使用 Go 1.26.7 Windows amd64 可移植工具链。
- 工具链：[go1.26.7.windows-amd64.zip](https://go.dev/dl/go1.26.7.windows-amd64.zip)。SHA-256：`f4f534a486e4bc3387fa18f08208f2f854b7aaea8a08f2a2d829a914a05abb11`，执行前与 [Go 官方下载元数据](https://go.dev/dl/?mode=json&include=all) 交叉核对。
- 依赖版本、内容校验由原始 `go.mod` / `go.sum` 及 Go 校验数据库约束；构建使用 `-mod=readonly`，不更新锁定文件。

## 复现

在 Windows PowerShell 中，从项目目录运行：

```powershell
./scripts/Build-MeteredCore.ps1
```

脚本仅在项目的 `.build/metered-core` 内下载、解压工具链和源代码，并使用该目录内的 Go 模块及编译缓存。不会在系统安装 Go，不修改系统 PATH。编译的核心输出为 `runtime/metered/sing-box.exe`，不会覆盖原来的 `runtime/sing-box.exe`。已有计量核心若与新结果不同，脚本会停止并保留独立构建目录中的新产物。

等效 Go 构建命令如下；脚本还锁定 `CGO_ENABLED=0`、`GOOS=windows`、`GOARCH=amd64`、`GOAMD64=v1`、`GOTOOLCHAIN=local` 等进程级环境，并在退出时还原：

```text
go build -mod=readonly -trimpath -buildvcs=false -tags with_gvisor,with_clash_api,with_v2ray_api -ldflags "-X runtime.godebugDefault=multipathtcp=0,tlssha1=1 -checklinkname=0 -X github.com/sagernet/sing-box/constant.Version=1.14.0 -s -w -buildid=" -o sing-box.exe ./cmd/sing-box
```

源码来自归档，使用 `-buildvcs=false` 避免读取或混入外围工作目录的 Git 信息。只开启 TeamTunnel 当前 TCP Trojan、TUN 和流量 API 所需的构建选项；没有启用 Cronet / Naive 等额外可选协议，也不依赖官方包中的 `libcronet.dll`。此构建并不保证与官方完整功能版本兼容。

产物旁的 `build-info.json` 记录核心 SHA-256、核心 `version` 输出、精确 Go 模块版本及校验值、工具链和构建参数。构建步骤只执行 `version`，不执行 `run`，不会启动 TUN、修改路由 / DNS / 系统代理或连接远端节点。

2026-09-04 成功构建的 `runtime/metered/sing-box.exe` SHA-256 为 `b03b45906df381f89f2bc25ac81ddaf16a507b0495fb93f6340b9e1d656cbe4a`，大小 40,334,848 字节。两次独立重新解压源码及工具链后，产物哈希相同。`version` 确认 Go 1.26.7、三个指定标签和 CGO disabled，构建后的 `go.mod` / `go.sum` 与锁定源码归档完全一致。包含 Trojan 出站及 V2Ray API direct / proxy 计数设置的离线 `check` 已通过；这里只验证配置可接受，不代表实际联网和计量集成已验证。

## 许可及来源边界

上游源码根目录的 `LICENSE` 声明 GNU GPL v3 或更新版本，原文复制到 `runtime/metered/LICENSE`；完整 GPL 文本继续保留在 `third-party/GPL-3.0.txt`。依赖许可及对应源码来自各 Go 模块，其精确版本记录在 `build-info.json` 的 `modules` 字段及源码的 `go.mod` / `go.sum`。

本文件是构建来源记录，不等同于已经完成再分发许可审查。上游源码 ZIP 不包含全部 Go 模块源码；正式再分发时仍需核对这些依赖的对应源码和通知义务，以及 TeamTunnel 整体适用的许可要求。不得再用“全部是官方预编译组件”描述采用此核心的软件包。

统计配置参考：[sing-box V2Ray API 官方文档](https://sing-box.sagernet.org/configuration/experimental/v2ray-api/)。该 API 按显式配置的出站名称计数；它不是整机网卡流量或服务器运营商账单。
