From 2c9147b437aae677ed4785276706edff35b88aed Mon Sep 17 00:00:00 2001 From: JianFeeeee Date: Sat, 12 Sep 2026 19:18:24 +0800 Subject: [PATCH] =?UTF-8?q?fix(packaging):=20SHA256SUMS=20=E5=8F=AA?= =?UTF-8?q?=E5=88=97=E6=9C=AC=E6=89=B9=E4=BA=A7=E7=89=A9=EF=BC=8C=E4=B8=94?= =?UTF-8?q?=E7=94=A8=E5=B9=B3=E9=93=BA=E5=90=8D=EF=BC=88=E6=AD=A4=E5=89=8D?= =?UTF-8?q?=E4=BC=9A=E5=B8=A6=E4=B8=8A=E5=8E=86=E5=8F=B2=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E3=80=81=E4=B8=94=E4=B8=8E=E9=99=84=E4=BB=B6=E5=90=8D=E4=B8=8D?= =?UTF-8?q?=E7=AC=A6=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit v1.2.2 出包时发现:dist/ 跨多次构建累积,而清单用 `find $DIST_DIR` 全目录扫, 于是 SHA256SUMS 里混进了 1.2.0/1.2.1 的包名——用户从发布页下载这份清单后 `sha256sum -c` 必然报「文件缺失」(那些包并不在本页)。 两处一起修: - 按本批 `$PKG_VERSION` 过滤(只列这次真正打出来的产物); - 名字用 basename(平铺名),与发布页附件名一致;哈希取真实路径(此前若直接 对 basename 求哈希会找不到文件——就在 `deb/`、`tar/` 子目录里)。 验证:对含 1.2.0/1.2.1/1.2.2 的 dist/ 跑新逻辑 → 4 条(旧逻辑 12 条); 并拿发布页真下载的 SHA256SUMS 逐条核对四个产物的实际哈希 → 全部一致。 --- deploy/packaging/package-linux.sh | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/deploy/packaging/package-linux.sh b/deploy/packaging/package-linux.sh index 48df894..d0a88b2 100644 --- a/deploy/packaging/package-linux.sh +++ b/deploy/packaging/package-linux.sh @@ -710,18 +710,25 @@ main() { echo "=== Done! Packages in: $DIST_DIR ===" echo "" echo "Summary:" - mapfile -t release_files < <(find "$DIST_DIR" -type f \( -name "*.deb" -o -name "homeagent_*.tar.gz" -o -name "*.rpm" \) 2>/dev/null | sort) + # 只列**本批**产物:dist/ 会跨多次构建累积,用 find 全目录会让清单/SHA256SUMS + # 带上历史版本的文件名——用户下载那种清单后 `sha256sum -c` 必然报缺失。 + # (v1.2.2 构建时就出现过:清单里混进了 1.2.0/1.2.1 的包名。)按本批版本号过滤。 + mapfile -t release_files < <(find "$DIST_DIR" -type f \( -name "*${PKG_VERSION}*.deb" -o -name "homeagent_${PKG_VERSION}_*.tar.gz" -o -name "*${PKG_VERSION}*.rpm" \) 2>/dev/null | sort) for f in "${release_files[@]}"; do echo " $(du -h "$f" | cut -f1) $f" done # 全部包生成之后一次计算,避免边打边算漏掉后生成的产物。 + # 名字用**平铺名**(basename):下载页的附件名就是平铺的, + # 清单里若写 ./deb/xxx.deb,用户下载后 `sha256sum -c` 会找不到文件。 if [ ${#release_files[@]} -gt 0 ]; then ( cd "$DIST_DIR" - find . -type f \( -name "*.deb" -o -name "homeagent_*.tar.gz" -o -name "*.rpm" \) \ - -print0 | sort -z | xargs -0 sha256sum > SHA256SUMS + # 哈希取**真实路径**,标签用**平铺名**:两者不能混(直接对 basename 求哈希会找不到文件)。 + for f in "${release_files[@]}"; do + printf '%s ./%s\n' "$(sha256sum "$f" | awk '{print $1}')" "$(basename "$f")" + done | sort -k2 > SHA256SUMS ) - echo " SHA256SUMS: $DIST_DIR/SHA256SUMS" + echo " SHA256SUMS: $DIST_DIR/SHA256SUMS (仅本批 ${#release_files[@]} 个产物,平铺名)" fi }