交付物与指纹

交付物 ​

text
libnginx-mod-http-cfd-tunnel_0.14.0-1_amd64.deb

体积、sha256、Installed-Size 这类精确字节不在文档里抄写 —— 单一机器可读出处是 build/fingerprints.env,随包文档只写「从哪里取」。这是硬规矩:文档里写死自指字节会导致 「为了写下自己的体积而重打一次包」。

怎么复核(三条命令) ​

bash
cd /root/DSH/nginx-cfd

# 1) 包本身没坏
sha256sum -c build/dist/libnginx-mod-http-cfd-tunnel_0.14.0-1_amd64.deb.sha256

# 2) 工作区 .so / 包内 .so / 包内文档 / 根文档 四处一致(10 项)
./build/fingerprints.sh --check

# 3) 包内容、依赖、ABI、文档不漏装(16 项)
./build/package-check.sh

指纹对账都对哪 10 项 ​

项含义
工作区 .so md5 / 体积与 build/fingerprints.env 记录一致
nginx-src/objs 的 .so与 build/prefix 的那份是同一份产物
.deb sha256 / 体积与记录一致
包内 .so md5与工作区交付模块同一份
包内 TECHNICAL.md与仓库根文档逐字节一致
根 TECHNICAL.md与记录一致
.sha256 文件sha256sum -c 复核通过

包内容自检都对哪 16 项 ​

  • 目录结构按 Debian 官方模块包铺垫(usr/lib/nginx/modules、modules-available、 modules-enabled 符号链接、usr/share/doc/...、usr/bin/cfd-quick-url);
  • load_module 片段用相对路径(与 geoip 等官方模块包同形),在 Debian prefix 布局下实测可加载;
  • Depends 走 nginx-abi-1.26.3-1 | nginx (>= 1.26.3),声明 libnghttp2-14、zlib1g;
  • README.md / TECHNICAL.md / cfd-quick-url 一个都不漏。

可复现性 ​

检查期望
同一工具链重编 .so逐字节相同(md5 与 build/fingerprints.env 的 SO_MD5 一致)
clone-build.sh 干净克隆自洽构建去调试信息后与交付 .so 相同
回归跑的那份字节就是包内那份(解包后配官方 nginx 复验 60/60)

本次(0.14.0-1)的复验流程 ​

bash
NGX_MODULES_ONLY=1 ./build/nginx-build.sh                    # 重编,确认 md5 不变
bash build/make-deb.sh 0.14.0-1                              # 打包(1 次)
./build/fingerprints.sh --write && ./build/fingerprints.sh --check   # 10/10
./build/package-check.sh                                     # 16/16
mkdir -p .scratch/instroot0140 && dpkg-deb -x build/dist/*0.14.0-1*.deb .scratch/instroot0140
MODULE_SO=$PWD/.scratch/instroot0140/usr/lib/nginx/modules/ngx_http_cfd_tunnel_module.so \
NGINX_BIN=$PWD/.scratch/official-nginx/usr/sbin/nginx \
  ./build/phase2-e2e.sh 8183 18693 18393 19393 2             # 60/60

MODULE_SO 必须是绝对路径:官方 nginx 的 prefix 是 /usr/share/nginx,相对路径会被拼到 prefix 下(踩过一次:dlopen("/usr/share/nginx/.scratch/…") failed)。

模块文档 · 对齐依据是 cloudflared 的源码与实测行为