Skip to content

fix: SourceForge チェックサム不安定問題を根本解決 - #2

Merged
ayutaz merged 2 commits into
mainfrom
fix/sourceforge-checksum-stability
Mar 16, 2026
Merged

fix: SourceForge チェックサム不安定問題を根本解決#2
ayutaz merged 2 commits into
mainfrom
fix/sourceforge-checksum-stability

Conversation

@ayutaz

@ayutaz ayutaz commented Mar 16, 2026

Copy link
Copy Markdown
Owner

Summary

SourceForge の CDN/ミラーネットワークが .tar.gz を定期的に再gzip圧縮することで、SHA256 ハッシュが不定期に変わりビルドが壊れる問題を根本的に解決します。

根本原因(調査結果)

  • SourceForge のミラー間でアーカイブの gzip 圧縮ヘッダ(タイムスタンプ、OSバイト)や DEFLATE エンコーディングが異なる
  • 内部の tar コンテンツは同一であることを実証済み
  • 実際のダウンロードテストで、同じ URL から異なるハッシュが返されることを確認

対策内容

  1. GitHub Release ミラー (deps-v1) を一次ダウンロード元として追加
    • SourceForge をフォールバックとして維持
    • GitHub Release のアセットはハッシュが不変
  2. Inner tar ハッシュ検証を追加
    • gzip 展開後の tar ストリームをハッシュすることで、gzip 再圧縮に対して安定
    • .tar.gz ハッシュ不一致時に自動的にフォールバック
  3. gzip マジックバイト検証を追加
    • HTML エラーページの誤ダウンロードを早期検出

変更ファイル

  • scripts/fetch_dependencies.sh — Linux/macOS/CI 用
  • scripts/fetch_dependencies.ps1 — Windows 用

Test plan

  • Linux CI ビルドが GitHub ミラーからダウンロードして成功すること
  • macOS CI ビルドが成功すること
  • Windows クロスコンパイルが成功すること
  • Android / iOS ビルドが成功すること
  • GitHub ミラーが到達不能な場合に SourceForge フォールバックが動作すること

Closes #1

SourceForge の CDN/ミラーが tar.gz を再圧縮することで SHA256 が
不定期に変わり、ビルドが壊れる問題 (#1) に対する恒久対策。

1. GitHub Release ミラー (deps-v1) を一次ダウンロード元として追加
   - SourceForge をフォールバックとして維持
2. inner tar ハッシュ検証を追加
   - gzip 展開後の tar をハッシュすることで再圧縮に対して安定
   - .tar.gz ハッシュ不一致時の自動フォールバック
3. gzip マジックバイト検証を追加
   - HTML エラーページの誤ダウンロードを検出

Closes #1
@ayutaz ayutaz self-assigned this Mar 16, 2026
Docker コンテナ (ubuntu:22.04) に xxd がインストールされていないため、
gzip マジックバイト検証が常に失敗していた。
POSIX 標準の od コマンドに置き換えてポータビリティを確保。
@ayutaz
ayutaz merged commit b18458c into main Mar 16, 2026
9 checks passed
@ayutaz
ayutaz deleted the fix/sourceforge-checksum-stability branch March 16, 2026 16:35
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.

ERROR: Checksum mismatch for hts_engine_API.tar.gz

1 participant