文档 博客 下载安装 English GitHub

开源 APT / YUM 软件仓库管理器

Software Over Warehouse

一个二进制,创建并管理 APT 与 YUM 仓库 替代 createrepo_c 与 reprepro,由 Pigsty 社区维护

SOW // REPOSITORY WORKSPACE sow.yml
YUMrepodata/DNF · YUM · REPOSYNC
REPOSITORY ENGINE SOW PLAIN · MANAGED
APTdists/INRELEASE · BY-HASH

POOL // IMMUTABLE PACKAGE STORE

postgresqlPOOLEDpgbouncerPOOLEDpatroniBUILTetcdSIGNED
SINGLE BINARYMAINTAINED BY PIGSTY

价值主张

把发包这件事,收进一个二进制

面向自己维护软件源的运维者:不装工具链,不起常驻服务,不猜测状态。

01 · 双引擎

平面仓库与托管工作区

一条命令起步,一套模型长跑

  • Plainsow create 就地索引一个放着 rpm / deb 的目录
  • Managed:工作区 → 仓库 → Dist 三层模型,包池与发布视图分离
  • 两条路径互不干扰,输出确定、可复现

从临时目录到长期维护的软件源,不必换工具

02 · 包池与视图

一份包体,多个架构视图

包池持有内容,视图只是投影

  • Debian 风格 pool/ 包池,内容不可变、按首字母分组
  • 架构视图用硬链接投影,不复制第二份包体
  • noarch / all 作为中性包进入每个适用视图

多架构仓库的磁盘占用,接近单架构

03 · 签名与信任

两条独立的信任链

元数据签名与包签名,各管各的

  • 元数据签名在进程内完成:repomd.xml.ascInReleaseRelease.gpg
  • RPM 包签名支持 never / fill / always 三档策略
  • 密钥引用三形态:file://env://agent://

换签名身份会让仓库变脏,重建后才可交付

04 · 事务与审计

中断之后,仓库仍然是完整的

先记意图,再动文件

  • 写操作先落 journal,崩溃后由下一条写命令前滚或回滚
  • 提交顺序固定:包体 → 元数据 → 指针 → 删除,客户端看不到撕裂状态
  • 操作账本可查、可导出 JSONL:sow log / sow log export

证据不足就拒绝执行,而不是猜一个结果

SCOPE

一份刻意收窄的范围

SOW 只做本地仓库的创建与维护。下面右侧不是待办清单,是明确的非目标。

覆盖范围

SOW 负责的部分

  • RPM 与 DEB 仓库索引的生成与维护
  • 包池、架构视图与成员策略
  • 元数据签名与 RPM 包签名
  • 事务、崩溃恢复与操作审计

明确非目标

SOW 不做的部分

  • 造包:SOW 索引软件包,不构建软件包
  • 远端发布、CDN 与对象存储上传
  • 多机多写:单写者模型,不做分布式协调
  • modulemd、sqlite repodata、zchunk 与源码包索引