Skip to content

kernel-archive: keep the bytes it published - #240

Merged
Zakkaus merged 1 commit into
masterfrom
kernel/keep-published
Aug 10, 2026
Merged

kernel-archive: keep the bytes it published#240
Zakkaus merged 1 commit into
masterfrom
kernel/keep-published

Conversation

@Zakkaus

@Zakkaus Zakkaus commented Aug 10, 2026

Copy link
Copy Markdown
Member

重建演练发现的缺口:镜像上的内核归档一旦丢失就恢复不了。

gpkg 不是位元可重现的,外层 tar 带建置时间,同一版本重建一次摘要就变;PKGDIR 是
建置快取,重建会覆盖。实测三个摘要:overlay Manifest 与正式发布的一致
49503e6a…),从 PKGDIR 恢复的不同(f74824e7…),建置机上没有摘要相符的副本。
所以照 PKGDIR 恢复会让 sys-kernel/gentoo-cjk-kernel-bin 的 digest 检查对每个用户
失败。

改动

发布成功之后把发布出去的那份位元组存进 PUBLISHED_DIR,预设
/var/lib/binhost/kernel-published/<系列>/<发布名>。发布失败不存,同名再次发布覆盖。

保留规则沿用现有那套:overlay 不再提供的版本与整条线,远端与本地副本一起清理,
同样受 MAX_RETIRE 约束,超过上限时两边都不动。

已经发布但还没有副本的版本会从镜像机补齐,核对 overlay Manifest 的摘要之后才写入,
不符就报错中止。两条现有内核线就是这个状态。

测试

变异反证七处全部转红:不保留副本、发布失败也保留、不清理本地旧副本、不退役本地线
目录、不退役远端线目录、补齐不核对摘要、以及超过 MAX_RETIRE 时仍动手。其中「不退役
本地线目录」原先没有用例覆盖,本 PR 补上。

建置机上真跑过补齐路径:临时远端根放真正已发布的位元组,PUBLISHED_DIR 指向临时
目录执行一轮,两条线都补齐,副本的 SHA512 与 overlay Manifest 逐一相符
49503e6a…8a611845…)。临时目录已移除。

本机全套测试、check-copy 与建置机容器内的 ShellCheck 通过。

docs/recovery.md 的内核归档那一节按新行为改写。

gpkg 不是位元可重现的,外层 tar 带建置时间,同一版本重建一次摘要就变。
PKGDIR 是建置快取,重建会覆盖,所以镜像上的归档一旦丢失,从 PKGDIR 恢复
出来的档案与 `sys-kernel/gentoo-cjk-kernel-bin` 的 Manifest 不一致,每个
用户的 digest 检查都会失败。这一点在重建演练里实测确认。

发布成功之后把发布出去的那份位元组存进 `PUBLISHED_DIR`,预设
`/var/lib/binhost/kernel-published/<系列>/<发布名>`。发布失败不存;同名
再次发布覆盖。

保留规则沿用现有那套:overlay 不再提供的版本与整条线,远端与本地副本一起
清理,同样受 `MAX_RETIRE` 约束,超过上限时两边都不动。

已经发布但还没有副本的版本会从镜像机补齐,核对 overlay Manifest 的摘要之后
才写入,不符就报错并中止。

`docs/recovery.md` 的内核归档那一节按新行为改写。
@Zakkaus
Zakkaus merged commit 60cd069 into master Aug 10, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant