# Tutorials

> End-to-end walkthroughs that take a pile of packages all the way to a signed repository your clients can install from.

---

LLMS index: [llms.txt](/llms.txt)

---

Each tutorial starts from a new workspace. Commands are intended to be run in order;
replace uppercase placeholders and package paths for your environment.

If you have not installed SOW yet, start with [Installation](/docs/start/install/) and
[Quick Start](/docs/start/quickstart/). The tutorials below cover the managed repository path.


- [Build a YUM Repository](/docs/tutorial/yum-repo/) — A managed RPM repository with per-architecture views, `noarch` projection, debuginfo filtering, version limits, and a working `dnf` client configuration.
- [Build an APT Repository](/docs/tutorial/apt-repo/) — A managed DEB repository with a Debian-style pool, `by-hash` indexes, and a deb822 client configuration.
- [Sign Your Repository](/docs/tutorial/signing/) — Generate a dedicated GPG key, sign repository metadata and RPM packages, and configure clients to reject anything unsigned.
- [Serve Repositories](/docs/tutorial/serving/) — Serve a Repository with Nginx and publish a verified Generation to a configured filesystem target without exposing private workspace state.
- [Build the pigsty\-infra Repository](/docs/tutorial/infra-repo/) — Turn existing dual-architecture infra-pkg RPMs and DEBs into a real repository, then rehearse local installation, rolling updates, Stable promotion, and monthly snapshots.


## Which one first

| Your situation | Start here |
|---|---|
| You ship RPMs to dnf clients | [Build a YUM Repository](/docs/tutorial/yum-repo/) |
| You ship DEBs for Debian or Ubuntu | [Build an APT Repository](/docs/tutorial/apt-repo/) |
| You need signed metadata or signed RPM payloads | [Sign Your Repository](/docs/tutorial/signing/) |
| The tree is built but nothing can reach it | [Serve Repositories](/docs/tutorial/serving/) |
| You want to turn a dual-architecture package pool into a maintained Infra repository | [Build the pigsty-infra Repository](/docs/tutorial/infra-repo/) |

The YUM and APT tutorials are independent fresh-workspace paths. A real Workspace may hold
both RPM and DEB Dists in one Repository when that ownership boundary suits your operation.

## Conventions used here

Shell blocks contain commands without a `$` prefix so you can copy a whole block at once.
Output appears in a separate block below the command, or as a comment when it is one line.
Where a command needs a value you must substitute, it appears in `UPPERCASE`.

Every tutorial ends with a verification step. `sow check` returning `0` proves the selected
Repository is complete and matches the recorded Generation. A nonzero result is not a release
artifact.

---

Section pages:

- [Build a YUM Repository](/docs/tutorial/yum-repo/): Create a managed RPM repository, apply membership policy, serve it, and configure dnf.
- [Build an APT Repository](/docs/tutorial/apt-repo/): Create a managed DEB repository with by-hash indexes and configure an APT client.
- [Sign Your Repository](/docs/tutorial/signing/): Sign RPM and APT metadata, optionally sign RPM packages, and enable client verification.
- [Serve and Publish Repositories](/docs/tutorial/serving/): Serve a public Repository with Nginx and publish verified Generations to a filesystem target.
- [Build the pigsty-infra Repository](/docs/tutorial/infra-repo/): Turn an existing dual-architecture RPM and DEB package pool into an infra repository, then validate installs, roll updates, promote to Stable, and take monthly snapshots.
