跳转到主要内容

Software Object Warehouse

构建软件仓库 同步增量变化

一个自包含二进制,即可把本地 RPM 与 DEB 软件包变成可用仓库;需要更强控制时,再用托管模式管理快照、审计记录与增量发布。

单一二进制 · Linux + macOS · RPM + DEB · Apache-2.0

核心价值

从平面仓库起步,按需升级为托管交付

先用一条命令生成本地仓库;需要治理时,再由 Managed 工作区维护成员关系、不可变 Generation 与发布历史。

01 / 快速创建

一条命令创建可用仓库

◇ 直接把装有软件包的目录交给 SOW

  • sow create 就地索引目录顶层的 RPM 与 DEB 文件
  • 同时生成可直接使用的平面 YUM/APT 仓库
  • 可替代 createrepo_cdpkg-scanpackagesreprepro

不需要守护进程或元数据工具链,从软件包直接得到仓库索引。

create.sh
$ sow create /srv/repo --jobs 8
repodata/repomd.xml
Packages
Packages.gz

02 / 托管模式

一份包体,多个托管视图

◇ 统一管理 Enterprise Linux、Debian 与 Ubuntu 仓库

  • 每个 Repository 的 live 软件包只存一份,各 Dist 只投影元数据视图
  • 避免对象存储上的重复 object key 与冗余上传
  • 用不可变 Built Generation manifest 保留快照,并组织不同仓库变体

成员关系、筛选策略、签名与快照都有明确状态和审计记录。

03 / 开箱即用

一个二进制,内置生产实践

◇ macOS 与 Linux 使用同一个可执行程序

  • amd64arm64 提供自包含 CGO_ENABLED=0 归档
  • Release Pipeline 为 Linux 生成 RPM 与 DEB 安装包
  • 内置安全路径、有界并发、fsync 与原子发布

不需要运营仓库守护进程,也不需要额外语言运行时。

04 / 增量同步

只发布本次变更集

◇ 先查看,再同步

  • sow changes 列出包体、元数据、指针与删除记录
  • Operation Log 保留谁在何时修改了什么
  • 发布只上传差异,而不是所有仓库对象

无论同步到文件系统还是云端,小改动都只产生小批量传输。

publish.sh
$ sow changes -r pgsql
+ pool/p/postgresql-18/...
~ dists/el9/x86_64/repodata/...
$ sow publish prod
变更对象已校验

运行模型

起步时保持简单,托管后保持显式

SOW 让轻量路径随时可重建,并让每个托管交付决策都可见。

01

重建派生状态

Plain 模式把仓库元数据视为软件包目录的确定性结果;修改输入后,重新执行 sow create 即可。

02

显式管理意图

Managed 模式分离 Desired Membership 与不可变 Built Generation,避免策略和发布沦为隐式副作用。

03

交付前先验证

校验、签名、操作历史与原子发布,把一次仓库构建变成可审计的发布边界。

常见问题

选择刚好满足需求的最小流程

Plain 与 Managed 使用同一个二进制,但解决不同的运行问题。

我应该从 Plain 还是 Managed 模式开始?

如果目录已经恰好包含需要对外服务的全部内容,从 Plain 模式 开始。需要由 SOW 管理成员关系、策略、已签名元数据、不可变 Generation、审计历史或发布目标时,使用 Managed 工作区

SOW 能同时处理 RPM 与 DEB 软件包吗?

可以。Plain 目录可同时放置 RPM 与 DEB 软件包。在 Managed 模式中,每个 Dist 只有一种格式,但同一个 Repository 可从公共交付树中对外提供多个 RPM 与 DEB Dist。

SOW 需要守护进程或数据库服务吗?

不需要。SOW 是自包含 CLI,生成静态仓库文件。Managed 工作区把嵌入式状态保存在本地;只需使用现有 HTTP 服务器对外提供生成的公共树。

Managed 仓库可以发布到哪里?

配置好的目标可以是本地或挂载的 filesystem,也可以是 Cloudflare R2 对象存储sow changes 会在发布前展示差异,SOW 记录的 target 状态会用于下一次增量发布。

现在就构建第一个仓库。sow create 开始;需要筛选策略、快照与发布历史时,再进入 Managed 工作区。