跳转到主要内容

Software Object Warehouse

构建软件仓库 增量发布更新

从本地 RPM 与 DEB 文件构建 YUM、APT 仓库。用 sow create 索引已有目录;用托管工作区(Managed)筛选软件包、签署元数据、保留快照并发布更新。

SOW 0.5.0 · Linux + macOS · RPM + DEB · Apache-2.0

两种建库方式

选择平面模式或托管模式

Plain 模式索引目录内的软件包。Managed 模式管理软件包选择、构建记录与发布历史。

01 / 快速创建

索引软件包目录

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

  • sow create 就地索引目录顶层的 RPM 与 DEB 文件
  • 生成 rpm-md 元数据与 APT Packages 索引
  • 替换已有 YUM 索引时,可指定元数据时间戳

用静态 HTTP 服务器提供生成后的目录。

create.sh
$ sow create /srv/repo --jobs 8
$ python3 -m http.server 8080 --bind 127.0.0.1 --directory /srv/repo

03 / 开箱即用

一个可执行文件

◇ macOS 与 Linux 使用一致的命令接口

  • 提供 Linux、macOS 的 amd64 与 arm64 归档
  • 提供 Linux 的 RPM 与 DEB 安装包
  • 内置软件包解析与元数据生成功能

直接运行 SOW 命令。Managed 状态保存在内嵌 SQLite 数据库中。

04 / 增量同步

发布仓库更新

◇ 发布到文件系统或 Cloudflare R2

  • sow changes 列出两次本地构建之间的文件变化
  • 发布时比较当前构建与目标上次发布的内容
  • 上传变化文件,并保存发布记录

在 sow.yml 中配置目标,然后运行 sow publish TARGET。

publish.sh
$ sow changes -r pgsql
$ sow publish prod
$ sow status -r pgsql

运行模型

构建、检查、发布

分别管理软件包选择、本地构建和远端发布。

01

重建本地索引

Plain 模式每次读取目录。添加或删除软件包文件后,再运行 sow create。

02

查看构建状态

Managed 模式记录软件包选择与已完成的构建。运行 sow status 查看是否需要构建。

03

发布前检查

运行 sow check 校验 Managed 仓库。运行 sow publish TARGET 更新已配置的目标。

常见问题

选择适合的流程

两种模式使用同一个 SOW 可执行文件。

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

索引已有软件包目录时,使用 Plain 模式。需要按发行版选择软件包、设置版本保留规则、签署元数据或发布更新时,使用 Managed 工作区。

可以替换现有的 createrepo_c 工作流吗?

使用 RPM XML 元数据的仓库可以替换。通过 --metadata-timestamp 保持发布时间递增;如果客户端要求索引签名,构建后签署最终索引。操作步骤与元数据格式见 YUM 迁移指南。

签署 RPM 包时,也会签署仓库索引吗?

--sign-with 为未签名 RPM 包补签。Plain 模式需要在最后一次建库后单独签署 repomd.xml;Managed 模式通过配置管理元数据签名策略。两种流程见仓库签名。

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

可以。Plain 目录可同时放置 RPM 与 DEB 软件包。在 Managed 模式中,每个 Dist 只有一种格式,同一个仓库可以包含多个 RPM 与 DEB Dist。

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

不需要。SOW 通过命令生成静态文件,Managed 模式使用本地 SQLite 数据库。用静态 HTTP 服务器提供包含 pool/ 与 dists/ 的仓库根目录。

Managed 仓库可以发布到哪里?

可以发布到本地或挂载的文件系统,也可以发布到 Cloudflare R2。每个目标单独记录发布检查点,sow publish 据此选择下次需要更新的文件。

构建第一个仓库安装 SOW 后,用 sow create DIR 为软件包目录生成索引。