下载、更新与恢复
Crib 默认从 https://repo.pigsty.io/doc/catalog.json 获取版本目录。这个地址是规划中的正式目录,还没有上传,所以现在“刷新目录”拿不到正式目录。下文描述开发构建的行为,在本机测试目录上验证过,没有在公网 HTTPS 和 CDN 上测试。
什么时候联网
打开 Crib 或资料库都不联网。只有两个操作会联网:点“刷新目录”,以及点某个版本的“下载”。
已安装的内容不会过期,阅读和搜索始终离线完成。导入本地资料包也不需要联网。
版本目录
版本目录(catalog.json)列出可下载的版本、它们的状态、别名,以及每个归档的大小和哈希。开发构建可以内置一份签名的目录快照,所以第一次打开、没有联网时也能看到全部版本。
点“刷新目录”时,Crib 下载新目录并检查:
- 签名必须由 App 自带的可信根签发。服务器不能自己添加可信密钥。
- 修订号不能低于本机已有的目录;修订号相同而内容不同,只接受签发时间更晚的一份。否则视为回退或冲突,保留原来的目录。
- 已过期的目录不接受。
刷新失败不改动本机文件。资料库顶部显示“版本目录更新于 …”;刷新中可以点“取消”。
目录过期以后
目录带有效期,由发布者签名时写入。过期后,资料库显示“版本目录已过期,刷新后才能下载。”
- 版本列表照常显示,别名照常解析。
- 不能下载新版本,直到刷新到一份未过期的目录。
- 已安装的内容不受影响。
本机缓存的目录如果无法再通过校验(例如可信根换了密钥),Crib 跳过它,改用 App 内置的快照,并把旧文件移到用户目录的Distribution-rejected/,保留最近 5 份。目录中个别条目有问题时,只忽略那些条目,并在资料库提示;已安装的同一版本照常可读。
下载一个版本
在“全部版本”里点某一行的“下载”。进度面板显示“下载 → 校验 → 建立索引 → 启用”,下载阶段显示已下载和总字节数。
- 确认授权。 该版本必须在一份未过期的目录里,且状态不是“无法下载”。归档路径必须是目录给出的相对路径,只走同源 HTTPS,不跟随跨站重定向。
- 流式下载。 写入临时目录,总字节数以目录签名的大小为准。
- 校验。 核对长度、归档 SHA-256、ZIP 结构、清单哈希(必须等于目录记录的值)、清单签名、解包后的总大小。
- 解包。 解到暂存区,再逐个文件核对哈希并检查数据库结构。传输结束后再确认一次目录仍然授权这个版本。
- 建立索引。 在后台建立新的搜索世代,旧世代继续服务。
- 启用。 原子切换。新版本替换同一资料包当前启用的修订;旧修订仍已安装,状态变为“已停用”。
下载、校验或索引失败时,按钮变为“重试下载”。
断点续传
- 网络中断时(不包括你点“取消”),已下载的部分保存在用户目录的
Distribution-partials/中,保留 7 天。 - 再次下载同一个归档时,Crib 先重新计算已保存部分的哈希,再用
Range加If-Range(强 ETag 或 Last-Modified)请求剩余部分。 - 服务器返回 206 时必须带完全匹配的
Content-Range;返回 200 就从头重下。最终仍以目录签名的归档哈希为准。 - 点“取消”,或者校验、大小、路径检查失败时,已下载的部分直接丢弃。
- 单次下载最长 48 小时;连续 60 秒收不到数据视为中断,已下载部分保留以便续传。目录请求最长 600 秒。
失败、取消与磁盘空间
- 切换之前的任何失败、取消或磁盘空间不足,都保留原来的组合,不做切换。
- 资料包写入资料库之前先检查磁盘空间。
- 切换一旦完成,新组合就是当前组合,即使之后又报告了错误。重试前先看资料库里实际启用的是什么。
- 失败只记在这一个版本上。之前启用的旧修订照常可读。
更新到新的小版本
发布者发布新的小版本时,新增一个归档并移动版本线别名,例如把 pg18 从 18.6 移到 18.7;18.6 的文件不变。
刷新目录后,“全部版本”里出现 18.7,状态为未安装。刷新本身不会自动下载,也不会重建索引。下载 18.7 后,它替换 18.6 成为启用的修订;18.6 仍已安装,可以重新启用,也可以卸载。
下载或导入同一资料包中比当前启用修订更低的修订会被拒绝。要回到以前的修订,用“恢复资料组合…”。
Crib 没有自动更新。App 本身也没有公开的更新通道。
回到以前的组合
每次切换组合,Crib 保留切换前启用的那一组。在资料库底栏点“恢复资料组合…”可以预览并恢复,步骤见管理资料库。
启动时如果当前搜索世代损坏,或 App 换新后原来内置的资料包不在了,Crib 自动换到保留的组合或 App 内置的初始组合,并在资料库顶部提示。提示里的“重新启用”可以把之前启用的资料包重新启用。
个人资料不受影响
下载、导入、启用、停用、卸载和恢复组合都不写个人资料:笔记、书签、标签、阅读历史、更正、片段和设置。卸载一个版本后,挂在上面的笔记和书签保留;内容重新安装后可以再次定位。