1 Commits
Author SHA1 Message Date
liuzhuohua e1125e3978 release: 1.0.7 — 备份/告警/配额三模块收尾 + 真机再抓 3 个真缺陷
版本号 1.0.6 → 1.0.7(13 个文件 55 处,逐条过;历史陈述不动)。

## 本轮又修的 3 个真缺陷(都是真机 API 验收才暴露的)

静态检查全绿、函数级测试 29/29 全过,接口一打就红:

1. 备份包名校验正则比命名规则窄 → 导出的包自己都认不出
   命名 charset 是 [A-Za-z0-9_-],校验只写 [a-z0-9]+,
   而 Debian 默认主机名 debian-primaryrouter 带连字符
   → 导出了、界面显示「已导出」,但列表里看不到、永远还原不了。
   修完才发现 _bk_list_entries 里还有第二份同样的正则(漏改),
   已让它直接调用 _bk_safe_name()。

2. inspect 把 manifest 的 sha256 弄丢了→ 20 项全部标「已损坏」
   重建 row 时没搬 sha256,下一行又拿 row.get('sha256') 比实际哈希
   → 恒为 None ≠ 哈希。还原也被「内容与清单不符」挡死。

3. 清单重叠 → 同一个文件进包两次
   SNAPSHOT_ETC_FILES 含 rescue.conf、SNAPSHOT_ETC_DIRS 含整个
   /etc/drouter → 同一 arcname 写两遍 tar(后者覆盖,不报错),
   file_count / total_bytes 虚高一倍。真机证据:22 项 → 20 项。

## 测试防线(新增 7 条断言,全部做过反向验证)

把 bug 注入回去看它变红、还原后变绿 —— 没反向验证过的断言
可能因抽取失败而恒绿:

- 校验规则与命名规则同源(charset + 长度)
- 该正则在 helper 里只有一份(列表不再自抄)
- inspect 把 sha256 带进了 row / 比对的是 row 里那个 / 还原侧仍用 it.get
- 打包时按 arcname 跨组去重 + 清单确有「文件 ⊂ 目录」重叠项
- OK_NAMES 补真实主机名形态(原用例只有无连字符的 debian)

t-107:119 → 126 项。

## 真机验收

- 新增 _dev/live-107-api.py(26 项,HTTP 接口层)
- _dev/live-107.py 29 项、live-107-api.py 26 项,全绿
- 基线零变化:网关 192.168.7.2 / nft 0 行 / dnsmasq inactive+disabled
  / rescue inactive / ip_forward=1 / netavark 表已回收
- deb 511,624 B;解包抽查三个新守护在 backend/、helper sha 与本地一致

## 产物校验

- 离线包 sha256sum -c 238/238 通过
- 包内 deb 与独立产物 sha256 一致(c1ebcf17…)
- deb / 离线包 远端↔本地 sha256 逐一对齐

## 顺手

- README 体积数字按 stat 实算改成 500 KB(原文写的是 453 KB)
- smoke-docker-106.sh → smoke-docker-107.sh,新增第 12/13 节
  (容器里三个新守护有不依赖 init 的拉起路径 + 镜像 Python 必须是 3.13)
- wireguard-tools 补进 DEPS 三处(helper / make-offline-deps / deb control)
2026-10-03 02:54:04 +08:00