<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tutorials on SOW</title><link>https://sow.pgsty.com/docs/tutorial/</link><description>Recent content in Tutorials on SOW</description><generator>Hugo</generator><language>en</language><atom:link href="https://sow.pgsty.com/docs/tutorial/index.xml" rel="self" type="application/rss+xml"/><item><title>Build a YUM Repository</title><link>https://sow.pgsty.com/docs/tutorial/yum-repo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/tutorial/yum-repo/</guid><description>&lt;p&gt;This tutorial builds a production-shaped RPM repository from scratch. By the end you will have a
workspace holding a &lt;code&gt;pigsty&lt;/code&gt; repository with an &lt;code&gt;el9&lt;/code&gt; Dist, two architecture views rendered from
one package pool, debuginfo noise filtered out, only the newest version of each package kept,
and a &lt;code&gt;.repo&lt;/code&gt; file that &lt;code&gt;dnf&lt;/code&gt; accepts.&lt;/p&gt;
&lt;p&gt;Plan for about fifteen minutes. Every command runs locally; nothing talks to the network.&lt;/p&gt;
&lt;h2 id="before-you-start"&gt;Before you start&lt;/h2&gt;
&lt;p&gt;You need three things.&lt;/p&gt;</description></item><item><title>Build an APT Repository</title><link>https://sow.pgsty.com/docs/tutorial/apt-repo/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/tutorial/apt-repo/</guid><description>&lt;p&gt;This tutorial builds a managed APT repository: a Debian-style package pool grouped by source
package, one index per architecture, &lt;code&gt;by-hash&lt;/code&gt; index copies so clients never race a rebuild, and
client configuration in both the modern deb822 format and the legacy one-liner.&lt;/p&gt;
&lt;p&gt;Plan for about fifteen minutes.&lt;/p&gt;
&lt;h2 id="before-you-start"&gt;Before you start&lt;/h2&gt;
&lt;p&gt;You need SOW installed (&lt;a href="https://sow.pgsty.com/docs/start/install/"&gt;Installation&lt;/a&gt;), some &lt;code&gt;.deb&lt;/code&gt; files, and a
directory you can write to.&lt;/p&gt;
&lt;p&gt;This tutorial continues from &lt;a href="https://sow.pgsty.com/docs/tutorial/yum-repo/"&gt;Build a YUM Repository&lt;/a&gt; by adding a
second Dist to the same &lt;code&gt;pigsty&lt;/code&gt; repository — one pool, two package ecosystems. If you are
starting fresh, run these three commands first and then continue from Step 1:&lt;/p&gt;</description></item><item><title>Sign Your Repository</title><link>https://sow.pgsty.com/docs/tutorial/signing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/tutorial/signing/</guid><description>&lt;p&gt;An unsigned repository is a repository anyone on the path can rewrite. This tutorial closes that
hole: you generate a signing key, configure SOW to sign what it publishes, verify the signatures
by hand, and turn on client-side enforcement so &lt;code&gt;dnf&lt;/code&gt; and &lt;code&gt;apt&lt;/code&gt; refuse anything that does not
check out.&lt;/p&gt;
&lt;p&gt;Plan for about twenty minutes.&lt;/p&gt;
&lt;h2 id="two-independent-trust-chains"&gt;Two independent trust chains&lt;/h2&gt;
&lt;p&gt;Package repositories have two things worth signing, and they are not the same thing.&lt;/p&gt;</description></item><item><title>Serve Repositories</title><link>https://sow.pgsty.com/docs/tutorial/serving/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/tutorial/serving/</guid><description>&lt;p&gt;SOW builds a static directory. Anything that can serve static files can serve it — there is no
daemon, no application server, and no runtime component. This tutorial covers what to point a
web server at, a tested Nginx configuration, a one-command local preview, and how to move the
tree to a host that cannot reach your build machine.&lt;/p&gt;
&lt;p&gt;Plan for about fifteen minutes.&lt;/p&gt;
&lt;h2 id="what-you-actually-serve"&gt;What you actually serve&lt;/h2&gt;
&lt;p&gt;For a managed workspace, the document root is the &lt;strong&gt;repository&lt;/strong&gt; directory:&lt;/p&gt;</description></item><item><title>Migrate from createrepo_c / reprepro</title><link>https://sow.pgsty.com/docs/tutorial/migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://sow.pgsty.com/docs/tutorial/migration/</guid><description>&lt;p&gt;You already have a repository. This tutorial replaces the tool that builds it without breaking
the clients that consume it — including the leftover files nobody warns you about and the layout
differences you should know before, not after.&lt;/p&gt;
&lt;p&gt;Two paths, depending on what you have. Read the one that matches, then the comparison at the end.&lt;/p&gt;
&lt;h2 id="choose-your-target"&gt;Choose your target&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;You have&lt;/th&gt;
					&lt;th&gt;Migrate to&lt;/th&gt;
					&lt;th&gt;Read&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;createrepo_c&lt;/code&gt; on a directory of RPMs&lt;/td&gt;
					&lt;td&gt;Plain mode, in place&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://sow.pgsty.com/docs/tutorial/migration/#path-a-createrepo_c-in-place"&gt;Path A&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;dpkg-scanpackages&lt;/code&gt; on a flat DEB directory&lt;/td&gt;
					&lt;td&gt;Plain mode, in place&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://sow.pgsty.com/docs/tutorial/migration/#path-a-createrepo_c-in-place"&gt;Path A&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;A reprepro archive with &lt;code&gt;pool/&lt;/code&gt; and &lt;code&gt;dists/&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Managed workspace&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://sow.pgsty.com/docs/tutorial/migration/#path-b-reprepro-to-a-workspace"&gt;Path B&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;createrepo_c&lt;/code&gt; plus scripts for multiple architectures&lt;/td&gt;
					&lt;td&gt;Managed workspace&lt;/td&gt;
					&lt;td&gt;&lt;a href="https://sow.pgsty.com/docs/tutorial/migration/#path-b-reprepro-to-a-workspace"&gt;Path B&lt;/a&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Plain mode is the drop-in replacement: same directory, same URLs, one command instead of a
toolchain. Managed mode is a change of shape — a workspace, a pool, per-architecture views — and
gives you membership policy, transactional builds, and an audit trail. Migrate to Plain first if
you just want the dependency gone; move to Managed when the repository&amp;rsquo;s lifecycle is what hurts.&lt;/p&gt;</description></item></channel></rss>