<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tutorial on SOW</title>
    <link>https://sow.pgsty.com/zh/categories/tutorial/</link>
    <description>Recent content in Tutorial on SOW</description>
    <generator>Hugo</generator>
    <language>zh-CN</language>
    
    
    
      <lastBuildDate>Fri, 28 Aug 2026 18:32:04 +0800</lastBuildDate>
    
    
      <atom:link href="https://sow.pgsty.com/zh/categories/tutorial/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
        <title>搭建 YUM 仓库</title>
        <link>https://sow.pgsty.com/zh/docs/tutorial/yum-repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/tutorial/yum-repo/</guid>
        <description>&lt;p&gt;本教程从零创建一个 Managed RPM 仓库。你需要一个可写目录，以及一个或多个&#xA;RPM 文件。&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-创建工作区&#34;&gt;1. 创建工作区&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-145a5e51-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-145a5e51-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow init .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo new pigsty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist new el9 --format rpm -r pigsty&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Dist 名称由你定义。SOW 不会根据 &lt;code&gt;el9&lt;/code&gt; 推断操作系统版本。&lt;/p&gt;</description>
      </item>
    <item>
        <title>搭建 APT 仓库</title>
        <link>https://sow.pgsty.com/zh/docs/tutorial/apt-repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/tutorial/apt-repo/</guid>
        <description>&lt;p&gt;本教程从零创建一个 Managed DEB 仓库。你需要一个可写目录，以及一个或多个&#xA;DEB 文件。&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-创建工作区&#34;&gt;1. 创建工作区&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-code td-code--untitled&#34; id=&#34;td-code-c134a0a1-fence-0&#34; data-td-code data-td-code-auto-id&#xA;     data-td-language=&#34;bash&#34; data-td-line-count=&#34;5&#34;&gt;&#xA;  &lt;div class=&#34;td-code__viewport&#34; id=&#34;td-code-c134a0a1-fence-0-viewport&#34; data-td-code-viewport&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /srv/sow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow init .&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow repo new pigsty&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sow dist new trixie --format deb -r pigsty&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;p&gt;Dist 名称会成为 APT Suite。它由你定义；SOW 不会根据 &lt;code&gt;trixie&lt;/code&gt; 推断发行版语义。&lt;/p&gt;</description>
      </item>
    <item>
        <title>教程</title>
        <link>https://sow.pgsty.com/zh/docs/tutorial/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/tutorial/</guid>
        <description>&lt;p&gt;这里的教程都从全新工作区开始。请按顺序执行命令，并按你的环境替换大写占位符与包路径。&lt;/p&gt;&#xA;&lt;p&gt;如果还没装 SOW，先看&lt;a href=&#34;https://sow.pgsty.com/zh/docs/start/install/&#34;&gt;安装&lt;/a&gt;与&lt;a href=&#34;https://sow.pgsty.com/zh/docs/start/quickstart/&#34;&gt;快速上手&lt;/a&gt;。&#xA;下面的教程介绍 Managed 仓库路径。&lt;/p&gt;&#xA;&lt;div class=&#34;td-content-cards td-content-cards--auto&#34; id=&#34;td-cards-260b68e7-0&#34;&gt;&#xA;&#xA;&lt;article id=&#34;td-card-260b68e7-cards-0-0&#34; class=&#34;td-content-card&#34;&gt;&#xA;&lt;div class=&#34;td-content-card__body&#34;&gt;&#xA;&lt;div class=&#34;td-content-card__head&#34;&gt;&lt;a class=&#34;td-content-card__title&#34; href=&#34;https://sow.pgsty.com/zh/docs/tutorial/yum-repo/&#34;&gt;搭建 YUM 仓库&lt;/a&gt;&lt;/div&gt;&#xA;&lt;div class=&#34;td-content-card__description&#34;&gt;&lt;p&gt;托管 RPM 仓库：分架构视图、noarch 中性投影、debuginfo 过滤、版本数量上限，以及可用的&#xA;dnf 客户端配置。&lt;/p&gt;</description>
      </item>
    <item>
        <title>仓库签名</title>
        <link>https://sow.pgsty.com/zh/docs/tutorial/signing/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/tutorial/signing/</guid>
        <description>&lt;p&gt;SOW 提供两条互相独立的签名路径：&lt;/p&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;路径&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;产物&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;客户端开关&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;RPM 元数据&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;repodata/repomd.xml.asc&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;repo_gpgcheck=1&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;APT 元数据&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;InRelease&lt;/code&gt; 与 &lt;code&gt;Release.gpg&lt;/code&gt;&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;Signed-By&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;RPM 包体&lt;/td&gt;&#xA;      &lt;td&gt;RPM 内嵌签名&lt;/td&gt;&#xA;      &lt;td&gt;&lt;code&gt;gpgcheck=1&lt;/code&gt;&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;APT 通过签名的 &lt;code&gt;Release&lt;/code&gt; 信任包哈希；SOW 不重签 DEB 包体。先配置元数据签名；只有当你负责&#xA;这些 RPM 字节的签名策略时，再启用包体签名。&lt;/p&gt;</description>
      </item>
    <item>
        <title>服务与发布仓库</title>
        <link>https://sow.pgsty.com/zh/docs/tutorial/serving/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/tutorial/serving/</guid>
        <description>&lt;p&gt;SOW 只生成静态文件，不是 HTTP 服务器。本指南把可写 Workspace 与 Nginx 服务路径分开。&lt;/p&gt;&#xA;&lt;h2 id=&#34;公共与私有路径&#34;&gt;公共与私有路径&#xA;&lt;/h2&gt;&#xA;&lt;div class=&#34;td-table-scroll td-table-scroll--static&#34;&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;模式&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;公共单元&lt;/th&gt;&#xA;      &lt;th scope=&#34;col&#34;&gt;绝不能服务&lt;/th&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Plain&lt;/td&gt;&#xA;      &lt;td&gt;传给 &lt;code&gt;sow create&lt;/code&gt; 的目录&lt;/td&gt;&#xA;      &lt;td&gt;临时 &lt;code&gt;.sow-plain-stage-*&lt;/code&gt; 输出；没有持久 journal&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;    &lt;tr&gt;&#xA;      &lt;td&gt;Managed&lt;/td&gt;&#xA;      &lt;td&gt;一个 Repository 的完整 &lt;code&gt;pool/ + dists/&lt;/code&gt; 树&lt;/td&gt;&#xA;      &lt;td&gt;Workspace &lt;code&gt;sow.yml&lt;/code&gt;、&lt;code&gt;.sow/&lt;/code&gt;、SQLite、锁、日志与 staging&lt;/td&gt;&#xA;    &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;a href=&#34;https://sow.pgsty.com/zh/docs/start/workspace/&#34;&gt;第一个工作区&lt;/a&gt;里的源 Repository 是 &lt;code&gt;/srv/sow/local&lt;/code&gt;。不要把&#xA;&lt;code&gt;/srv/sow&lt;/code&gt; 设为 document root。&lt;/p&gt;</description>
      </item>
    <item>
        <title>演练构建 pigsty-infra 仓库</title>
        <link>https://sow.pgsty.com/zh/docs/tutorial/infra-repo/</link>
        <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
        
        <guid>https://sow.pgsty.com/zh/docs/tutorial/infra-repo/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;https://github.com/pgsty/infra-pkg&#34;&gt;&lt;code&gt;pgsty/infra-pkg&lt;/code&gt;&lt;/a&gt; 是 Pigsty Infra 软件包的上游构建源码。&#xA;本教程假设双架构 RPM 与 DEB 已经构建完成，只处理后半程：从一堆包开始，用 SOW 建成真正可消费、可维护的 &lt;code&gt;infra&lt;/code&gt; 仓库。&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-把包集中到-repo&#34;&gt;1. 把包集中到 ~/repo&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;本教程固定使用 &lt;code&gt;~/repo&lt;/code&gt;，不再为每条路径定义环境变量。先把已有包复制进两个输入目录：&lt;/p&gt;</description>
      </item>
    
  </channel>
</rss>
