sow dist
sow dist 管理客户端使用的发行版集合。每个 Dist 只包含 RPM 或 DEB 中的一种格式。同一仓库内的 Dist 共用 pool/,在 dists/ 下各有独立索引。
语法
命名
Dist 名与仓库名规则相同:[a-z0-9][a-z0-9._-]*,排除 .、..、.sow、pool、dists。
选择能说明发行版或渠道的名称,例如 el9、trixie 或 el9-beta。SOW 不根据名称推断包格式或策略。
sow dist ls
列出所选仓库的全部 Dist。
DESIRED 与 BUILT 是成员计数。两者不一致时,DIRTY_REASONS 会说明原因:
| 参数 | 说明 | 默认 |
|---|---|---|
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-r, --repo NAME |
选择一个仓库 | 按选择规则 |
--json |
输出 JSON | false |
表格显示架构族,JSON 还给出包生态使用的架构名。以下摘录展示 result.dists 中一个条目的
architectures 字段,对应的 DEB 视图目录为 binary-amd64 与 binary-arm64:
sow dist new
使用 --format rpm 或 --format deb 创建 Dist。
| 参数 | 说明 | 默认 |
|---|---|---|
--format FORMAT |
必填;rpm 或 deb |
— |
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-r, --repo NAME |
选择一个仓库 | 按选择规则 |
-T, --timeout DUR |
等待锁的最长时间;0 无限等待 |
0 |
-N, --no-wait |
锁被占用时立即失败 | false |
--json |
输出 JSON | false |
--format 必填,只接受 rpm 或 deb:
新 Dist 继承工作区的架构列表。需要选择架构子集或设置 limit、exclude 时,编辑 sow.yml,再运行 sow config check 与 sow build。
名称与格式已经存在时,dist new 报告当前状态。同名但格式不同会被拒绝:
创建与恢复
dist new 更新 sow.yml 并构建新 Dist。操作中断后,运行 sow build 恢复。
新 Dist 具有有效的空索引。RPM Dist 在每个架构视图下有一份空
repodata/;DEB Dist 有空的 Packages、Packages.gz、by-hash/SHA256/ 条目,
以及 Release;配置签名时再生成 InRelease 与 Release.gpg。
sow dist show
显示一个 Dist 的详细信息。
| 参数 | 说明 | 默认 |
|---|---|---|
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-r, --repo NAME |
选择一个仓库 | 按选择规则 |
--json |
输出 JSON | false |
JSON 还包含 effective_config_sha256,即解析后的 Dist 配置摘要。
修改 limit、exclude 或签名密钥后,当前配置可能与构建快照不同。
SOW 会将该 Dist 标为 dirty,重新构建后恢复一致。
sow dist rm
删除一个 Dist 的成员关系与衍生索引。
| 参数 | 说明 | 默认 |
|---|---|---|
-f, --force |
删除成员与索引,但保留 pool 中的包 | false |
-C, --workdir DIR |
工作区发现的起始目录 | 当前目录 |
-r, --repo NAME |
选择一个仓库 | 按选择规则 |
-T, --timeout DUR |
等待锁的最长时间;0 无限等待 |
0 |
-N, --no-wait |
锁被占用时立即失败 | false |
--json |
输出 JSON | false |
删除 Dist 不会删除 pool 字节
SOW 删除该 Dist 的配置、成员关系与索引。包文件仍保存在 pool/ 中:
运行 sow gc 可以回收当前状态与保留状态都不再需要的包文件。
如果已配置的目标发布过这个 Dist,移除会被拒绝。详见移除已发布视图。
仓库的 protected: true 只阻止仓库删除;受保护仓库上的常规 Dist 维护照常进行。
示例
在同一个仓库中创建 RPM 与 DEB Dist:
创建 beta Dist,在 sow.yml 中设置包保留策略,再构建:
列出需要构建的 Dist:
退出码
| 码 | 触发条件 |
|---|---|
0 |
列出、创建、显示或删除成功;或 dist new 报告已存在的 Dist |
1 |
创建空索引时的运行时 I/O 或渲染错误 |
2 |
用法错误——--format 缺失或非法、工作区未找到、仓库选择有歧义 |
4 |
工作区或仓库锁被占用,且给了 --no-wait 或 --timeout 到期 |
5 |
操作日志的完整性或恢复错误 |
6 |
名称非法、Dist 不存在、同名不同格式冲突、非空但未给 -f |
参见
- sow repo —— 上一层
- 包池与架构视图 —— 一个 Dist 如何变成多个客户端可见视图
- 成员策略 —— 配置
limit与exclude - sow build —— 修改策略后重新构建
- 仓库布局 —— RPM 与 DEB 的
dists/结构