Docs Blog Download & Install 简体中文 GitHub

OPEN-SOURCE APT / YUM REPOSITORY MANAGER

Software Over Warehouse

One binary that builds and manages APT & YUM repositories createrepo_c and reprepro, replaced — by the Pigsty Community

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

VALUE PROPOSITION

Everything a repository needs, in one executable

For operators who host their own package feeds—no toolchain to install, no daemon to run, no guessing about state.

01 · TWO ENGINES

Flat Repositories and Managed Workspaces

One command to start. One model to grow into

  • Plain: sow create indexes a directory of rpm / deb files in place
  • Managed: workspace → repository → dist, with the pool separated from published views
  • The two paths never mix, and both emit deterministic, reproducible output

From a scratch directory to a long-lived feed, without changing tools

02 · POOL AND VIEWS

One Payload, Many Architecture Views

The pool owns the bytes. Views are projections

  • A Debian-style pool/ holds immutable payloads, grouped by initial
  • Architecture views are hardlink projections, never a second copy
  • noarch / all packages land in every applicable view

A multi-architecture repository costs about as much disk as one

03 · SIGNING AND TRUST

Two Independent Trust Chains

Metadata signatures and package signatures, kept apart

  • Metadata is signed in-process: repomd.xml.asc, InRelease, Release.gpg
  • RPM package signing runs in never / fill / always mode
  • Keys are referenced as file://, env://, or agent://

Changing a signing identity marks the repository dirty until it is rebuilt

04 · TRANSACTIONS AND AUDIT

Interrupt It. The Repository Stays Whole

Record the intent, then touch the files

  • Writes are journaled first; the next write command rolls them forward or back
  • Commit order is fixed—payload, metadata, pointer, delete—so clients never see a torn tree
  • The operation journal is queryable and exportable: sow log, sow log export

When the evidence is insufficient, it refuses—rather than guessing

SCOPE

A deliberately narrow scope

SOW builds and maintains local repositories. The column on the right is not a backlog—those are explicit non-goals.

IN SCOPE

What SOW does

  • Generating and maintaining RPM and DEB repository indexes
  • Package pools, architecture views, and membership policy
  • Metadata signing and RPM package signing
  • Transactions, crash recovery, and an operation audit trail

EXPLICIT NON-GOALS

What SOW does not do

  • Building packages—SOW indexes them, it does not produce them
  • Remote publishing, CDN integration, or object-storage upload
  • Multi-writer setups—the model is single-writer by design
  • modulemd, sqlite repodata, zchunk, and source package indexes