跳转到主要内容

功能

Plain/Managed 仓库生成、包池、策略、签名、事务、发布与审计。

SOW 提供两条相互隔离的运行路径。Plain 模式无状态地重建一个目录;Managed 模式在工作区中 持续记录软件包成员关系与不可变仓库 Generation。两者都不会暗中接管对方的状态。

能力矩阵

能力 Plain Managed
RPM 与 DEB 元数据
RPM + DEB 混合操作 同一目录 同一 Repository、不同 Dist
持久成员关系与 Generation
分架构视图与中性包投影
exclude 与版本 limit 策略
元数据签名 RPM 与 DEB
RPM 包签名 --sign-with neverfillalways
事务日志与恢复 重新运行 create Workspace、Repository、发布
可查询 Operation Log 与 JSONL 导出
发布目标 filesystem 与 R2

SOW 在进程内解析软件包并渲染元数据,不调用 createrepo_cdpkg-scanpackagesreprepromodifyrepo_c。RPM 包签名是例外:它会改写包体,因此需要主机上的 rpm 命令与 GPG 环境。

仓库格式

表面 RPM/YUM DEB/APT
包事实来源 RPM header DEB control archive
身份 NEVRA + 确切字节 SHA-256 name=version:arch + 确切字节 SHA-256
索引 primaryfilelistsotherrepomd.xml PackagesPackages.gzRelease
中性架构 noarch all
不可变索引路径 校验和命名 rpm-md by-hash/SHA256
Managed 元数据签名 repomd.xml.asc InReleaseRelease.gpg

SOW 有意不生成 SQLite rpm-md、zchunk、modulemd、源码包索引与 MD5/SHA1 DEB manifest。 它负责构建仓库文件,不提供 HTTP 服务或 CDN。

按问题阅读

问题 页面
sow create 写什么、替代什么? Plain 平面仓库
Workspace、Repository、Dist 与私有状态如何关联? Managed 工作区
一个包池如何供给多个纯元数据视图? 包池与元数据视图
为什么软件包被排除或限量? 成员策略
哪把密钥签哪个对象? 签名模型
中断后会发生什么? 事务与恢复
如何查看、校验并审计仓库? 可观测与审计

Release 目标、文件系统要求、客户端与 Provider 见平台与集成

Plain 平面仓库

sow create 的单遍扫描、覆盖重建契约,以及确定性输出与 Pigsty 完成标记。

Managed 工作区

工作区 → 仓库 → Dist 三层模型、固定磁盘布局、sow.yml 如何驱动一切,以及发现与选择规则。

包池与元数据视图

一份软件包、一个属主、纯元数据 APT/RPM 视图:正典包池寻址、中性包、搬迁与显式 reposync 导出。

成员策略

exclude 与 limit 如何决定哪些包留在 Dist 里:规则字段、glob 匹配、版本排序,以及放宽策略为什么永远不会复活已移出的成员。

签名模型

两条独立信任链、四种密钥引用形态、进程内与外部签名的分工,以及安全换钥方式。

事务与恢复

Managed 模式的操作日志、两级锁模型、固定提交顺序与证据驱动崩溃恢复。

可观测与审计

正确使用 status、check、changes、retention 与操作日志,不混淆状态和证明。