Skip to content

Quick Start

Index a directory of RPM and DEB packages, serve it, and configure a client.

Use Plain mode to build a repository from a directory of packages. It works without a workspace or configuration file. You need SOW, Python 3 for the preview, and at least one RPM or DEB file.

Prepare a directory

Create a writable directory. Replace the input paths below and run the copy command for each package format you have:

mkdir -p "$HOME/sow-quickstart"
cp /path/to/example.rpm "$HOME/sow-quickstart/"
cp /path/to/example.deb "$HOME/sow-quickstart/"

Keep packages at the directory top level; sow create does not scan subdirectories.

Generate metadata

sow create "$HOME/sow-quickstart"

With one RPM and one DEB, the output includes:

rpm=1 deb=1 signed=0 removed=0 marker=false noop=false recovered=false

The directory now has indexes beside the original packages:

sow-quickstart/
├── example.rpm
├── example.deb
├── repodata/       # RPM index and metadata
├── Packages        # DEB flat index
└── Packages.gz

SOW creates indexes for the formats present. Plain mode does not create APT Release, InRelease, or Release.gpg files. It leaves package names and paths unchanged.

Start a local server

Run this command in a separate terminal and leave it running:

python3 -m http.server --bind 127.0.0.1 --directory "$HOME/sow-quickstart" 8080

If this host has no APT or DNF client, check the HTTP entry point for the format you added:

# RPM
curl --fail http://127.0.0.1:8080/repodata/repomd.xml >/dev/null

# DEB
curl --fail http://127.0.0.1:8080/Packages.gz >/dev/null

This server is reachable only from the same host. For other clients or a persistent service, follow Serve Repositories.

Configure a local client

On a Linux host running the preview server, create the source file for your package manager. These examples use unsigned metadata and disable client signature checks. For signed metadata, use a Managed workspace and the signing tutorial.

Save this as /etc/yum.repos.d/sow-quickstart.repo:

[sow-quickstart]
name=SOW Quick Start
baseurl=http://127.0.0.1:8080/
enabled=1
gpgcheck=0
repo_gpgcheck=0

Refresh the index and install one of your packages:

sudo dnf --disablerepo='*' --enablerepo=sow-quickstart makecache
sudo dnf install PACKAGE_NAME

Save this as /etc/apt/sources.list.d/sow-quickstart.list:

deb [trusted=yes] http://127.0.0.1:8080/ ./

The final ./ selects a flat repository. Refresh the index and install one of your packages:

sudo apt update
sudo apt install PACKAGE_NAME

Replace PACKAGE_NAME with a package name from its metadata, not its filename. On macOS, use the HTTP checks above; run package installation on a compatible Linux client.

Update the repository

Add or remove package files, then regenerate the indexes:

sow create "$HOME/sow-quickstart"

Unchanged package files and options produce the same metadata. A repeat run reports noop=true.

When replacing another YUM metadata generator, follow Migrate an Existing YUM Repository to preserve the timestamp that cached clients expect.

When the preview is complete, stop the server with Ctrl+C and remove its source file from your client. Keep the package directory if you want to reuse it.

Next

Use a Managed workspace for named Dists, architecture views, version limits, signed metadata, and publication targets. See sow create for all Plain options.