第一个工作区
Managed 模式会持久保存配置、成员关系、Generation 与审计状态。下面从空目录开始。
初始化工作区
init 创建:
不要编辑或对外服务 .sow/。init 是幂等操作:重复执行会校验并收敛已声明的 Repository
与 Dist,不会重置有效工作区。
默认架构族是 x86_64 与 aarch64。配置接受 amd64、arm64 别名,并规范化为上述族名。
创建 Repository 与两个 Dist
一个 Repository 拥有一棵公共 pool/ + dists/ 树和一份私有状态数据库。每个 Dist 只有
一种格式。dist new 会立即生成合法空视图,客户端读取空 Dist 时得到空索引而不是 404。
此时公共布局为:
添加软件包
显式选择目标 Dist:
SOW 从包本身读取身份与架构,把接受的字节存入 local/pool/,更新 Desired Membership,
并在返回前构建受影响的 Dist。输入路径只用于导入;后续构建使用 Managed 包池。
需要合并多次成员变更时,用 --skip 暂不构建,最后统一收敛:
Desired Membership 领先于 Built Generation 时,Repository 状态为 dirty,且
ready_to_copy=false。
查看与校验
status 是低成本状态读取。check 是交付门禁:它校验配置、状态、公共文件权限、保留根、
包字节、Desired Membership、索引、签名与 Generation manifest,且不写入任何内容。
只有 clean 且所有层都通过的 Repository 才返回成功。
查看规范化配置与默认值:
对外服务 Repository
公共交付单元是 /srv/sow/local,不是工作区根。把这个目录挂到稳定 URL 前缀;不要暴露
sow.yml 或 .sow/。
- DNF base URL:
https://repo.example.com/local/dists/el9/x86_64/ - APT source:
deb https://repo.example.com/local bookworm main
安全的 Nginx 与 filesystem 发布流程见对外服务。
选择规则
- Workspace:从当前目录向上查找,或从
-C DIR开始查找。 - Repository:
-r NAME、当前路径所属 Repository,或唯一已配置 Repository。 - Dist:
-d NAME,可重复;只有命令能够唯一确定范围时才可省略。
存在歧义时直接报错;SOW 不会随便挑选 Repository 或 Dist。