SOW 博客
SOW 的发布说明、设计决策与项目动态。SOW 是 Pigsty 出品的 APT 与 YUM 软件仓库管理器。
SOW v0.7.1
SOW 0.7.1 升级到 Go 1.27.4,更新依赖,并修复恢复、软件包校验和 S3/R2 处理。
SOW v0.7.0
SOW 0.7.0 新增平面 RPM 仓库裁剪与口令文件签名,修复恢复和发布缺陷,保持工作区格式兼容。
SOW v0.6.1
SOW 0.6.1 升级到 Go 1.27.3,更新依赖并修复无效输入的错误信息,工作区格式保持兼容。
SOW v0.6.0
SOW 0.6.0 保留上一轮 Plain RPM 索引,记录 Managed 发布时间,强化校验与恢复,并减少重复 I/O。
SOW v0.5.0
SOW v0.5.0 新增 Plain RPM 发布时间参数,并修复仓库恢复、签名与包路径问题。
SOW v0.4.0
SOW v0.4.0 减少重复校验,独立验证 RPM 密钥集合,支持目标重绑定,并改进迁移与发布恢复。
协同发布决策记录
SOW v0.4.0 为什么保留原生发布后端,没有采用早期的 rclone 提案。
SOW 设计演进:从路由图到仓库引擎
SOW 如何从 v0.1 软件分发平台转为仓库引擎,以及 v0.2 到 v0.7 如何改进这一模型。
SOW v0.3.0
SOW v0.3.0 减少重复软件包读取与数据库查询,批量提交包文件,并增加构建进度事件。
设计原则
SOW 为什么分别管理软件包存储、仓库构建与发布。
系统模型
工作区、仓库、发行版与构建快照如何组织软件包和发布记录。
发布与恢复
SOW 如何上传仓库、继续中断的发布,以及清理不再使用的文件。
SOW v0.7.1
SOW 0.7.1 升级到 Go 1.27.4,更新依赖,并修复恢复、软件包校验和 S3/R2 处理。
SOW v0.7.0
SOW 0.7.0 新增平面 RPM 仓库裁剪与口令文件签名,修复恢复和发布缺陷,保持工作区格式兼容。
SOW v0.6.1
SOW 0.6.1 升级到 Go 1.27.3,更新依赖并修复无效输入的错误信息,工作区格式保持兼容。
SOW v0.6.0
SOW 0.6.0 保留上一轮 Plain RPM 索引,记录 Managed 发布时间,强化校验与恢复,并减少重复 I/O。
SOW v0.5.0
SOW v0.5.0 新增 Plain RPM 发布时间参数,并修复仓库恢复、签名与包路径问题。
SOW v0.4.0
SOW v0.4.0 减少重复校验,独立验证 RPM 密钥集合,支持目标重绑定,并改进迁移与发布恢复。
协同发布决策记录
SOW v0.4.0 为什么保留原生发布后端,没有采用早期的 rclone 提案。
SOW 设计演进:从路由图到仓库引擎
SOW 如何从 v0.1 软件分发平台转为仓库引擎,以及 v0.2 到 v0.7 如何改进这一模型。
SOW v0.3.0
SOW v0.3.0 减少重复软件包读取与数据库查询,批量提交包文件,并增加构建进度事件。
设计原则
SOW 为什么分别管理软件包存储、仓库构建与发布。
系统模型
工作区、仓库、发行版与构建快照如何组织软件包和发布记录。
发布与恢复
SOW 如何上传仓库、继续中断的发布,以及清理不再使用的文件。
-
SOW v0.7.1
v0.7.1 发布于 2026-11-11 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.7.1 更新 Go 工具链与依赖,并修复恢复、软件包校验、RPM 导出和 S3/R2 处理中的问题。 可从 GitHub 或下载页获取本版本。 本说明覆盖 0.7.0 以来的变化。数据库 schema v13、配置 schema sow/v3、CLI 与公开仓库布局保持兼容。0.5.0 至 0.7.0 的工作区无需迁移数据库。 恢复与仓库状态 修复未启用有效签名时,旧 …
v0.7.1 发布于 2026-11-11 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.7.1 更新 Go 工具链与依赖,并修复恢复、软件包校验、RPM 导出和 S3/R2 处理中的问题。 可从 GitHub 或下载页获取本版本。 本说明覆盖 0.7.0 以来的变化。数据库 schema v13、配置 schema sow/v3、CLI 与公开仓库布局保持兼容。0.5.0 至 0.7.0 的工作区无需迁移数据库。 恢复与仓库状态 修复未启用有效签名时,旧 …
-
SOW v0.7.0
v0.7.0 发布于 2026-11-09 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.7.0 新增 平面 RPM 仓库裁剪 与统一的 口令文件签名接口,并修复发布审核中发现的迁移、恢复、发布、RPM 验签与版本排序缺陷。 发布状态: SOW 0.7.0 已正式发布,可从 GitHub 或下载页获取。 本说明覆盖 0.6.1 以来的变化。数据库 schema v13、配置 schema sow/v3 与公开仓库布局保持不变,0.5.0 至 0.6.1 的 …
v0.7.0 发布于 2026-11-09 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.7.0 新增 平面 RPM 仓库裁剪 与统一的 口令文件签名接口,并修复发布审核中发现的迁移、恢复、发布、RPM 验签与版本排序缺陷。 发布状态: SOW 0.7.0 已正式发布,可从 GitHub 或下载页获取。 本说明覆盖 0.6.1 以来的变化。数据库 schema v13、配置 schema sow/v3 与公开仓库布局保持不变,0.5.0 至 0.6.1 的 …
-
SOW v0.6.1
v0.6.1 发布于 2026-10-22 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.6.1 是一次维护更新,升级依赖并改善错误信息。 命令接口、数据库 schema v13、配置 sow/v3 与公开仓库布局保持不变。 已使用 0.5.0 或 0.6.0 的工作区无需迁移数据库。 软件包与归档见下载页,校验和来自 v0.6.1 发布页。 工具链与依赖 源码构建现在要求 Go 1.27.3 或更新版本。所有发布二进制均使用 Go 1.27.3 构建。 …
v0.6.1 发布于 2026-10-22 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.6.1 是一次维护更新,升级依赖并改善错误信息。 命令接口、数据库 schema v13、配置 sow/v3 与公开仓库布局保持不变。 已使用 0.5.0 或 0.6.0 的工作区无需迁移数据库。 软件包与归档见下载页,校验和来自 v0.6.1 发布页。 工具链与依赖 源码构建现在要求 Go 1.27.3 或更新版本。所有发布二进制均使用 Go 1.27.3 构建。 …
-
SOW v0.6.0
v0.6.0 发布于 2026-10-17 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.6.0 改进仓库更新、文件校验和中断恢复,保持现有命令、配置格式与公开仓库布局不变。 已使用 0.5.0 的 Managed 工作区无需迁移数据库。 本文记录自 0.5.0 以来的变化。升级步骤见安装说明, 制品发布状态见下载页。 仓库维护者需要了解的变化 范围 0.6.0 的变化 对操作的影响 Plain RPM 更新 保留当前与紧邻上一轮以校验和命名的元数据 客户 …
v0.6.0 发布于 2026-10-17 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.6.0 改进仓库更新、文件校验和中断恢复,保持现有命令、配置格式与公开仓库布局不变。 已使用 0.5.0 的 Managed 工作区无需迁移数据库。 本文记录自 0.5.0 以来的变化。升级步骤见安装说明, 制品发布状态见下载页。 仓库维护者需要了解的变化 范围 0.6.0 的变化 对操作的影响 Plain RPM 更新 保留当前与紧邻上一轮以校验和命名的元数据 客户 …
-
SOW v0.5.0
v0.5.0 发布于 2026-09-29 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.5.0 为已有 YUM 仓库增加发布时间参数,并修复 Managed 仓库的恢复、签名和包路径处理。 构建过程也减少了对未变化软件包的重复校验。 安装方式见下载 SOW。使用 0.3 或 0.4 Managed 工作区时,先迁移各个 Repository,再进行写操作。 升级 Managed 工作区 停止向工作区写入的命令。 备份完整工作区,包括 …
v0.5.0 发布于 2026-09-29 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.5.0 为已有 YUM 仓库增加发布时间参数,并修复 Managed 仓库的恢复、签名和包路径处理。 构建过程也减少了对未变化软件包的重复校验。 安装方式见下载 SOW。使用 0.3 或 0.4 Managed 工作区时,先迁移各个 Repository,再进行写操作。 升级 Managed 工作区 停止向工作区写入的命令。 备份完整工作区,包括 …
-
SOW v0.4.0
v0.4.0 发布于 2026-08-24 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.4.0 改进了 Managed 仓库的校验与恢复。check 只对每个物理软件包计算一次内容哈希;RPM 验签分别判断各组密钥的信任结果;发布目标可通过有记录的重绑定操作修改公共 URL 或缓存时间。 Plain 行为与公共 pool/、dists/ 布局保持不变。本文记录 0.4.0;升级到当前版本请按安装指南操作。 从 0.3 升级到 0.4 停止工作区写入,备份 …
v0.4.0 发布于 2026-08-24 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.4.0 改进了 Managed 仓库的校验与恢复。check 只对每个物理软件包计算一次内容哈希;RPM 验签分别判断各组密钥的信任结果;发布目标可通过有记录的重绑定操作修改公共 URL 或缓存时间。 Plain 行为与公共 pool/、dists/ 布局保持不变。本文记录 0.4.0;升级到当前版本请按安装指南操作。 从 0.3 升级到 0.4 停止工作区写入,备份 …
-
协同发布决策记录
SOW 0.4.0 保留了原生 filesystem 与 r2 发布后端。早期提案曾计划使用 rclone,并增加远端审计和预览命令。 最终选择原生后端,是因为 SOW 需要逐项记录条件写入及其结果。 当前命令语法见 sow publish。 为什么保留原生后端 发布计划为每个文件记录预期 SHA-256 和操作。后端需要创建不可变对象,避免覆盖已有内容,并按条件更新可变入口文件。 SOW 记录操作结果,用于中断后继续发布。 批量复制工具需要额外的身份与检查点模型才能保留这些规则。0.4 选择 …
SOW 0.4.0 保留了原生 filesystem 与 r2 发布后端。早期提案曾计划使用 rclone,并增加远端审计和预览命令。 最终选择原生后端,是因为 SOW 需要逐项记录条件写入及其结果。 当前命令语法见 sow publish。 为什么保留原生后端 发布计划为每个文件记录预期 SHA-256 和操作。后端需要创建不可变对象,避免覆盖已有内容,并按条件更新可变入口文件。 SOW 记录操作结果,用于中断后继续发布。 批量复制工具需要额外的身份与检查点模型才能保留这些规则。0.4 选择 …
-
SOW 设计演进:从路由图到仓库引擎
SOW 在 v0.1 中探索了以 Git 为核心的软件分发控制面,在 v0.2 中转为仓库引擎。 本文记录这次变化,以及后续到 v0.7.0 的改进。 下文版本均对应正式 Git 标签,包括 v0.7.0。部分归档计划曾用“v0.2”“v0.3”指代开发中的设计; 其中在 RPM 视图内创建硬链接的 C2 布局,已在 v0.2.0 发布前被替换。 早期工作的细节见四篇配套文章: v0.1 原始产品计划说明最初的范围,以及范围为何过大。 v0.1 决策账本记录现存的 44 份 ADR 及其后续变化 …
SOW 在 v0.1 中探索了以 Git 为核心的软件分发控制面,在 v0.2 中转为仓库引擎。 本文记录这次变化,以及后续到 v0.7.0 的改进。 下文版本均对应正式 Git 标签,包括 v0.7.0。部分归档计划曾用“v0.2”“v0.3”指代开发中的设计; 其中在 RPM 视图内创建硬链接的 C2 布局,已在 v0.2.0 发布前被替换。 早期工作的细节见四篇配套文章: v0.1 原始产品计划说明最初的范围,以及范围为何过大。 v0.1 决策账本记录现存的 44 份 ADR 及其后续变化 …
-
SOW v0.3.0
v0.3.0 发布于 2026-08-10 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.3.0 减少了重复包读取与数据库查询。Plain 生成只遍历一次包内容;Managed 构建缓存已解析的包数据,并批量提交新包池文件。本版还移除了已退役的运行时与发布代码。 Plain:每个软件包只读一次 默认不签名的 sow create 流程对每个 RPM 或 DEB 只做一次哈希与解析,--jobs 控制并行任务数。SOW 根据解析结果生成元数据,写入索引前再次 …
v0.3.0 发布于 2026-08-10 查看发布 源码 · tar.gz 源码 · zip pgsty/sow SOW 0.3.0 减少了重复包读取与数据库查询。Plain 生成只遍历一次包内容;Managed 构建缓存已解析的包数据,并批量提交新包池文件。本版还移除了已退役的运行时与发布代码。 Plain:每个软件包只读一次 默认不签名的 sow create 流程对每个 RPM 或 DEB 只做一次哈希与解析,--jobs 控制并行任务数。SOW 根据解析结果生成元数据,写入索引前再次 …
-
设计原则
SOW 分别管理包存储、仓库构建和发布。以下原则说明各类状态由谁保存,以及操作如何使用这些状态。 每类记录由一个对象管理 记录 管理范围 包体与包身份 Repository Desired 成员关系与 Built 状态 Repository Generation 与变更集 Repository 目标绑定与修订记录 Repository 与发布目标 发布尝试与检查点 Repository 与目标前缀 远端清单与删除记录 Repository 与目标前缀 Plain RPM 上一版索引标记 …
SOW 分别管理包存储、仓库构建和发布。以下原则说明各类状态由谁保存,以及操作如何使用这些状态。 每类记录由一个对象管理 记录 管理范围 包体与包身份 Repository Desired 成员关系与 Built 状态 Repository Generation 与变更集 Repository 目标绑定与修订记录 Repository 与发布目标 发布尝试与检查点 Repository 与目标前缀 远端清单与删除记录 Repository 与目标前缀 Plain RPM 上一版索引标记 …
-
系统模型
SOW 用配置文件保存仓库设置,用 SQLite 记录托管状态,用公共目录向客户端提供文件。 模型分别记录选中的软件包、已完成的构建,以及已发布的内容。 对象 Workspace(工作区) ├── Repository(仓库) │ ├── Pool:包对象 │ ├── Dist:成员关系与策略 │ ├── Desired(期望状态) │ ├── Built Generation(已构建快照) │ └── 保留的 Generation └── 发布目标 └── Repository + 存储后端 …
SOW 用配置文件保存仓库设置,用 SQLite 记录托管状态,用公共目录向客户端提供文件。 模型分别记录选中的软件包、已完成的构建,以及已发布的内容。 对象 Workspace(工作区) ├── Repository(仓库) │ ├── Pool:包对象 │ ├── Dist:成员关系与策略 │ ├── Desired(期望状态) │ ├── Built Generation(已构建快照) │ └── 保留的 Generation └── 发布目标 └── Repository + 存储后端 …
-
发布与恢复
构建生成本地快照(Generation)。发布把快照中的文件上传到目标,并记录进度,以便中断后继续。 每个目标分别保存检查点,记录上次完成发布的内容。 状态归属 Repository 记录 目标记录 软件包、Desired 状态与 Built 状态 发布尝试与检查点 Generation 与变更集 远端清单 保留的包和元数据引用 宽限期与删除记录 发布顺序 固定发布计划 -> 上传包体 -> 上传不可变元数据 -> 记录提交意图 -> 按视图逐一更新协议入口文件 -> 校验存储与公共 URL …
构建生成本地快照(Generation)。发布把快照中的文件上传到目标,并记录进度,以便中断后继续。 每个目标分别保存检查点,记录上次完成发布的内容。 状态归属 Repository 记录 目标记录 软件包、Desired 状态与 Built 状态 发布尝试与检查点 Generation 与变更集 远端清单 保留的包和元数据引用 宽限期与删除记录 发布顺序 固定发布计划 -> 上传包体 -> 上传不可变元数据 -> 记录提交意图 -> 按视图逐一更新协议入口文件 -> 校验存储与公共 URL …