01 / 快速创建
一条命令创建可用仓库
◇ 直接把装有软件包的目录交给 SOW
sow create就地索引目录顶层的 RPM 与 DEB 文件- 生成 rpm-md 元数据与 APT Packages 索引
- 显式发布时间参数兼容已有 YUM 客户端
不需要守护进程或元数据工具链,从软件包直接得到仓库索引。
$ sow create /srv/repo --jobs 8
✓ repodata/repomd.xml
✓ Packages
✓ Packages.gz
核心价值
先用一条命令生成本地仓库;需要治理时,再由 Managed 工作区维护成员关系、不可变 Generation 与发布历史。
01 / 快速创建
◇ 直接把装有软件包的目录交给 SOW
sow create 就地索引目录顶层的 RPM 与 DEB 文件不需要守护进程或元数据工具链,从软件包直接得到仓库索引。
$ sow create /srv/repo --jobs 8
✓ repodata/repomd.xml
✓ Packages
✓ Packages.gz
02 / 托管模式
◇ 统一管理 Enterprise Linux、Debian 与 Ubuntu 仓库
成员关系、筛选策略、签名与快照都有明确状态和审计记录。
03 / 开箱即用
◇ macOS 与 Linux 使用一致的命令接口
amd64 与 arm64 提供自包含 CGO_ENABLED=0 归档不需要运营仓库守护进程,也不需要额外语言运行时。
04 / 增量同步
◇ 先查看,再同步
sow changes 列出包体、元数据、指针与删除记录无论同步到文件系统还是云端,小改动都只产生小批量传输。
$ sow changes -r pgsql
+ pool/p/postgresql-18/...
~ dists/el9/x86_64/repodata/...
$ sow publish prod
✓ 变更对象已校验
运行模型
SOW 让轻量路径随时可重建,并让每个托管交付决策都可见。
Plain 模式根据软件包目录重建索引。包字节与参数相同,元数据输出就相同,显式指定的发布时间也属于参数。
Managed 模式分离 Desired Membership 与不可变 Built Generation,避免策略和发布沦为隐式副作用。
对外服务前校验软件包与元数据完整性;Managed 模式还会记录操作,并恢复中断的写入。
常见问题
Plain 与 Managed 使用同一个二进制,但解决不同的运行问题。
如果目录已经恰好包含需要对外服务的全部内容,从 Plain 模式 开始。需要由 SOW 管理成员关系、策略、已签名元数据、不可变 Generation、审计历史或发布目标时,使用 Managed 工作区。
平面 RPM 目录可以使用 sow create,并通过 0.5 新增参数指定发布时间。维护脚本继续负责保存发布历史与签署索引,再用保留旧缓存的客户端验收。完整步骤见 YUM 迁移指南;Plain 不生成旧式 SQLite 元数据或模块流。
--sign-with 为未签名 RPM 包补签。Plain 模式需要在最后一次建库后单独签署 repomd.xml;Managed 模式通过配置管理元数据签名策略。两种流程见仓库签名。
可以。Plain 目录可同时放置 RPM 与 DEB 软件包。在 Managed 模式中,每个 Dist 只有一种格式,但同一个 Repository 可从公共交付树中对外提供多个 RPM 与 DEB Dist。
不需要。SOW 是自包含 CLI,生成静态仓库文件。Managed 工作区把嵌入式状态保存在本地;只需使用现有 HTTP 服务器对外提供生成的公共树。
配置好的目标可以是本地或挂载的 filesystem,也可以是 Cloudflare R2 对象存储。sow changes 会在发布前展示差异,SOW 记录的 target 状态会用于下一次增量发布。