GitHub のアーカイブ チェックサムの変更によるビルド システムの障害

GitHub は、リリース ページで自動的に生成される「.tar.gz」および「.tgz」アーカイブの生成方法を変更しました。これにより、チェックサムが変更され、GitHub からダウンロードされたアーカイブを以前のアーカイブと比較して整合性を確認する自動ビルド システムで大規模な障害が発生しました。 . 保存されたチェックサムは、たとえば、パッケージのメタデータまたはビルド スクリプトに配置されます。

リリース 2.38 以降、Git ツールキットにはデフォルトで gzip の組み込み実装が含まれており、これによりオペレーティング システム間でこの圧縮方法のサポートを統一し、アーカイブ作成パフォーマンスを向上させることが可能になりました。 GitHub は、インフラストラクチャ内の git のバージョンを更新した後、この変更を認識しました。 この問題は、組み込みの zlib ベースの gzip 実装によって生成された圧縮アーカイブが、gzip ユーティリティによって作成されたアーカイブとはバイナリが異なるために発生しました。そのため、 「gitアーカイブ」コマンド。

そのため、GitHub で git を更新した後、古いチェックサムを使用した検証に合格しなかった、わずかに異なるアーカイブがリリース ページに表示されるようになりました。 この問題は、さまざまなビルド システム、継続的統合システム、ソース コードからパッケージを構築するツールに現れました。 たとえば、GitHub からダウンロードされたソース コードである約 5800 個の FreeBSD ポートのアセンブリが壊れていました。

この不具合に関する最初の苦情に応えて、GitHub は当初、アーカイブの永続的なチェックサムが保証されていないという事実を挙げました。 影響を受けたビルド システムの機能を復元するためにさまざまなエコシステムでメタデータを更新するには膨大な作業が必要であることが判明した後、GitHub の担当者は考えを変え、変更を元に戻し、アーカイブを生成する古い方法に戻しました。

Git 開発者はまだ決定に至っておらず、可能なアクションについて議論しているだけです。 検討されたオプションには、デフォルトの gzip ユーティリティの使用に戻すことが含まれていました。 古いアーカイブとの互換性を維持するために「--stable」フラグを追加します。 組み込み実装を別のアーカイブ形式にリンクする。 古いコミットには gzip ユーティリティを使用し、特定の日付以降のコミットにはインライン実装を使用します。 形式の安定性は非圧縮アーカイブに対してのみ保証されます。

意思決定の難しさは、外部ユーティリティへの呼び出しにロールバックしても、チェックサムの不変性の問題が完全には解決されないという事実によって説明されます。これは、外部 gzip プログラムの変更がアーカイブ形式の変更につながる可能性があるためです。 現在、デフォルトで古い動作 (外部 gzip ユーティリティの呼び出し) を返し、システムに gzip ユーティリティがない場合は組み込み実装を使用する一連のパッチがレビュー用に提案されています。 このパッチでは、「git archive」出力の安定性は保証されておらず、形式は将来変更される可能性があるという記述もドキュメントに追加されています。

出所: オープンネット.ru

コメントを追加します