BamZap 包管理器 · 伴生孵化
soupkg v1.8 客户端(别名 sk) · 半独立于 Soup,单 .sar 分发,soupmake 构建
核心能力
| 能力 | 说明 |
|---|---|
| 内容寻址存储 | 对象按 sha256 内容 hash 命名,相同内容只存一份、跨版本去重 |
| content-defined chunking | 大文件/目录切分内容块(平均 ~1MiB),每块独立对象,支持断点下载 |
| 后量子签名 | soupq(SPHINCS+ 风格,底层 SM3)优先,回退 smx(SM2) / openssl ed25519 |
| deny-by-default | 签名者公钥指纹必须先在可信库登记,否则拒绝 |
| 远程后端 | https(纯 HTTPS 对象空间)/ cos(本地目录或 git 仓库)/ lore / git |
| 声明式部署 | HetuFile(sml 格式)一次描述注册→推送→部署→校验 |
快速开始
# 构建 .sar(soupmake) soupmake # 打包 bamzap.sar # 运行(.sar 半独立分发,只需 soupx) soupx bamzap.sar --help # 生成密钥对(后量子,默认 soupq 后端) soupx bamzap.sar keygen myorg # fingerprint(sha256 of pub): 9f3c...e1 # 登记签名者公钥(只做一次) soupx bamzap.sar trust add 9f3c...e1 "myorg release key" # 注册应用并自动签名 export SOUPKG_SIGN_ID=myorg soupx bamzap.sar pool register myapp ./myapp/ # registered(chunked-dir) myapp -> b92dc8... # 验签(hash + 后量子签名 + 信任库,任何一步失败即拒绝) soupx bamzap.sar verify myapp # verify myapp: OK (signer=9f3c...e1) # 运行 soupx bamzap.sar bare run myapp Alice # hello from myapp, args=Alice
数据池
pool/ ├── objects/ 内容寻址对象(sha256 命名,自动去重) ├── refs/ 版本指针(每个 ref 一个文件,内容为对象 hash) ├── refs/*.log ref 变更历史(只增) ├── remote/ 远程后端缓存 ├── locks/ 执行器锁 └── history.log 全局操作历史(只增)
位置:Windows %USERPROFILE%\.soupkg\,Linux/macOS ~/.soupkg/。
HTTPS 对象空间分发(推荐)
export SOUPKG_HTTPS_ROOT=https://objects.example.com/bamzap/ # 必须以 / 结尾 export SOUPKG_HTTPS_TOKEN=xxxx # Bearer token soupx bamzap.sar pool remote add origin https soupx bamzap.sar pool remote push https --with-objects # 另一台机器 soupx bamzap.sar pool remote fetch https soupx bamzap.sar verify myapp soupx bamzap.sar bare run myapp
对象 = PUT <base>/<sha256>;ref = PUT <base>/refs/<name>;注册表 = PUT <base>/index.json。fetch 按本地缺失 hash 逐块下载并立即 sha256 校验。凭据只存在环境变量,读取后立即清空。
后量子签名链(soupq)
verify 完整链路:hash(对象/chunk sha256 比对)→ sign(manifest 后量子签名验签)→ trust(公钥指纹在可信库)→ integrity(所有 chunk 对象 hash 复核)。任意一步失败即 FATAL。
- 私钥 raw 64B / 公钥 raw 192B / 签名最大 9904B。
- 签名原文由
signed_payload(base64)锁定,验签时不重新编码 JSON。 - 未设
SOUPKG_SIGN_ID时 register 产出无签名 manifest,verify 在 sign 步拒绝(预期行为)。
算法与参数详见 soupq 后量子签名模块。
声明式部署(HetuFile)
soupx bamzap.sar apply HetuFile.sml
pool greeter { source: "./greeter-v2.soup"; register: true }
remote origin { backend: "https"; root: $env.SOUPKG_HTTPS_ROOT }
deploy app { ref: "greeter"; target: "./deploy/"; mode: "copy"; run_args: "Alice" }
verify greeter { chain: true }
子命令速查
| 子命令 | 用法 | 说明 |
|---|---|---|
pool register | <name> <file|dir> | 注册/发新版(内容寻址 + 写 ref) |
pool list / info | — | 列 ref / 池信息 |
pool gc | [--prune-unreachable] [--exec] | 回收孤儿对象(默认 dry-run) |
pool remote | add/push/fetch | git|cos|lore|https 后端 |
ref log / rollback / restore | <name> [<hash>] | 版本历史 / 回滚 / 恢复 |
run / bare | run|link|copy|run | 容器或裸机运行/落地 |
verify | <name> [--remote] | 真实签名链(deny-by-default) |
keygen / sign / trust | — | 密钥/签名/信任库 |
apply | <HetuFile.sml> | 声明式执行 |
sar install | <file.sar> | 包安装入池 |
构建:soupmake 目标 build/pack(打包)、check(类型检查)、test(e2e 自测)、clean。