repository
9 篇-
SOW 设计演进:从路由图到仓库引擎
SOW 在 v0.1 中探索了以 Git 为核心的软件分发控制面,在 v0.2 中转为仓库引擎。 本文记录这次变化,以及后续到 v0.5.0 的改进。 下文版本号指正式 Git 标签。部分归档计划曾用“v0.2”“v0.3”指代开发中的设计; 其中在 RPM 视图内创建硬链接的 C2 布局,已在 v0.2.0 发布前被替换。 早期工作的细节见四篇配套文章: v0.1 原始产品计划说明最初的范围,以及范围为何过大。 v0.1 决策账本记录现存的 44 份 ADR 及其后续变化。 v0.1 到底证明 …
SOW 在 v0.1 中探索了以 Git 为核心的软件分发控制面,在 v0.2 中转为仓库引擎。 本文记录这次变化,以及后续到 v0.5.0 的改进。 下文版本号指正式 Git 标签。部分归档计划曾用“v0.2”“v0.3”指代开发中的设计; 其中在 RPM 视图内创建硬链接的 C2 布局,已在 v0.2.0 发布前被替换。 早期工作的细节见四篇配套文章: v0.1 原始产品计划说明最初的范围,以及范围为何过大。 v0.1 决策账本记录现存的 44 份 ADR 及其后续变化。 v0.1 到底证明 …
-
设计原则
SOW 分别管理包存储、仓库构建和发布。以下原则说明各类状态由谁保存,以及操作如何使用这些状态。 每类记录由一个对象管理 记录 管理范围 包体与包身份 Repository Desired 成员关系与 Built 状态 Repository Generation 与变更集 Repository 目标绑定与修订记录 Repository 与发布目标 发布尝试与检查点 Repository 与目标前缀 远端清单与删除记录 Repository 与目标前缀 每个 Repository 分别保存自己的包 …
SOW 分别管理包存储、仓库构建和发布。以下原则说明各类状态由谁保存,以及操作如何使用这些状态。 每类记录由一个对象管理 记录 管理范围 包体与包身份 Repository Desired 成员关系与 Built 状态 Repository Generation 与变更集 Repository 目标绑定与修订记录 Repository 与发布目标 发布尝试与检查点 Repository 与目标前缀 远端清单与删除记录 Repository 与目标前缀 每个 Repository 分别保存自己的包 …
-
系统模型
SOW 用配置文件保存仓库设置,用 SQLite 记录托管状态,用公共目录向客户端提供文件。 模型分别记录选中的软件包、已完成的构建,以及已发布的内容。 对象 Workspace(工作区) ├── Repository(仓库) │ ├── Pool:包对象 │ ├── Dist:成员关系与策略 │ ├── Desired(期望状态) │ ├── Built Generation(已构建快照) │ └── 保留的 Generation └── 发布目标 └── Repository + 存储后端 …
SOW 用配置文件保存仓库设置,用 SQLite 记录托管状态,用公共目录向客户端提供文件。 模型分别记录选中的软件包、已完成的构建,以及已发布的内容。 对象 Workspace(工作区) ├── Repository(仓库) │ ├── Pool:包对象 │ ├── Dist:成员关系与策略 │ ├── Desired(期望状态) │ ├── Built Generation(已构建快照) │ └── 保留的 Generation └── 发布目标 └── Repository + 存储后端 …
-
为什么 SOW 每个仓库只保留一棵包体树
这项决策起草于 2026-08-05,随 2026-08-08 的 SOW v0.2.0 发布。SOW 0.5.0 仍使用这一布局: 每个仓库保存一棵包体树,各发行版视图引用同一棵树。 决策 每个 Repository 的公共目录如下: <repository>/ pool/ # 包体 dists/ <dist>/ <architecture>/ # RPM 元数据 上图展示 RPM 视图。APT 索引位于 dists/<dist>/main/binary-<architecture>/, …
这项决策起草于 2026-08-05,随 2026-08-08 的 SOW v0.2.0 发布。SOW 0.5.0 仍使用这一布局: 每个仓库保存一棵包体树,各发行版视图引用同一棵树。 决策 每个 Repository 的公共目录如下: <repository>/ pool/ # 包体 dists/ <dist>/ <architecture>/ # RPM 元数据 上图展示 RPM 视图。APT 索引位于 dists/<dist>/main/binary-<architecture>/, …
-
核心概念
选择模式 需求 Plain Managed 为软件包目录生成索引 sow create DIR 用 sow add 导入软件包 保存配置与成员关系 目录内容就是状态 sow.yml 与私有 SQLite 数据库 组织软件包 一个平面目录,可同时包含 RPM 与 DEB 具名 Dist,每个 Dist 一种格式 生成架构视图 不支持 支持 过滤软件包、限制版本数 --pigsty 提供 Pigsty 约定 每个 Dist 单独配置 签名 RPM 软件包 支持 支持 签名仓库元数据 在 SOW 外 …
选择模式 需求 Plain Managed 为软件包目录生成索引 sow create DIR 用 sow add 导入软件包 保存配置与成员关系 目录内容就是状态 sow.yml 与私有 SQLite 数据库 组织软件包 一个平面目录,可同时包含 RPM 与 DEB 具名 Dist,每个 Dist 一种格式 生成架构视图 不支持 支持 过滤软件包、限制版本数 --pigsty 提供 Pigsty 约定 每个 Dist 单独配置 签名 RPM 软件包 支持 支持 签名仓库元数据 在 SOW 外 …
-
仓库布局
对外服务完整的 Managed 仓库目录:pool/ 加 dists/。 工作区配置与 .sow/ 状态应位于 Web 服务根目录之外。 Plain 目录 /srv/offline/ ├── example-1.0-1.x86_64.rpm ├── example_1.0-1_amd64.deb ├── repodata/ │ ├── <sha256>-primary.xml.gz │ ├── <sha256>-filelists.xml.gz │ ├── …
对外服务完整的 Managed 仓库目录:pool/ 加 dists/。 工作区配置与 .sow/ 状态应位于 Web 服务根目录之外。 Plain 目录 /srv/offline/ ├── example-1.0-1.x86_64.rpm ├── example_1.0-1_amd64.deb ├── repodata/ │ ├── <sha256>-primary.xml.gz │ ├── <sha256>-filelists.xml.gz │ ├── …
-
sow repo
sow repo 用于创建、列出、查看、升级和删除仓库。每个仓库在 pool/ 中保存包文件,在 dists/ 中保存索引。同一仓库的 Dist 共用包文件。 语法 sow repo ls [-C DIR] [--json] sow repo new NAME [-C DIR] [-T DUR | -N] [--json] sow repo show [NAME] [-C DIR] [-r NAME] [--json] sow repo migrate [NAME] [--abort] [-j …
sow repo 用于创建、列出、查看、升级和删除仓库。每个仓库在 pool/ 中保存包文件,在 dists/ 中保存索引。同一仓库的 Dist 共用包文件。 语法 sow repo ls [-C DIR] [--json] sow repo new NAME [-C DIR] [-T DUR | -N] [--json] sow repo show [NAME] [-C DIR] [-r NAME] [--json] sow repo migrate [NAME] [--abort] [-j …
-
第一个工作区
本例创建一个 Managed 仓库,包含两个具名软件包集合,称为 Dist: el9 存放 RPM,bookworm 存放 DEB。使用可写的空目录 /srv/sow,或换成其他路径。 初始化工作区 sow init /srv/sow cd /srv/sow init 创建: /srv/sow/ ├── sow.yml # 配置;schema: sow/v3 └── .sow/ # SOW 管理的私有状态 需要调整配置时,编辑 sow.yml。私有目录 .sow/ 由 SOW 管理。 重复执行 …
本例创建一个 Managed 仓库,包含两个具名软件包集合,称为 Dist: el9 存放 RPM,bookworm 存放 DEB。使用可写的空目录 /srv/sow,或换成其他路径。 初始化工作区 sow init /srv/sow cd /srv/sow init 创建: /srv/sow/ ├── sow.yml # 配置;schema: sow/v3 └── .sow/ # SOW 管理的私有状态 需要调整配置时,编辑 sow.yml。私有目录 .sow/ 由 SOW 管理。 重复执行 …
-
Managed 工作区
定期更新的仓库适合使用 Managed 模式。SOW 记录包成员关系、执行 Dist 策略、构建元数据, 并保留操作历史。 工作区、仓库与 Dist Workspace(工作区) └── Repository(仓库) └── Dist(软件包集合) └── Architecture view(架构视图) 术语 用途 工作区 保存 sow.yml、私有 .sow/ 状态和允许的架构族 仓库 拥有独立包池、Dist、SQLite 数据库、构建快照(Generation)和发布状态 Dist 按名称组 …
定期更新的仓库适合使用 Managed 模式。SOW 记录包成员关系、执行 Dist 策略、构建元数据, 并保留操作历史。 工作区、仓库与 Dist Workspace(工作区) └── Repository(仓库) └── Dist(软件包集合) └── Architecture view(架构视图) 术语 用途 工作区 保存 sow.yml、私有 .sow/ 状态和允许的架构族 仓库 拥有独立包池、Dist、SQLite 数据库、构建快照(Generation)和发布状态 Dist 按名称组 …