Kegagalan dalam sistem pembangunan karena perubahan dalam checksum arsip di GitHub

GitHub mengubah caranya menghasilkan arsip β€œ.tar.gz” dan β€œ.tgz” yang dihasilkan secara otomatis pada halaman rilis, yang menyebabkan perubahan dalam checksum dan kegagalan besar dalam sistem pembangunan otomatis yang memeriksa arsip yang diunduh dari GitHub dengan arsip sebelumnya untuk mengonfirmasi integritas .checksum yang disimpan, misalnya, ditempatkan dalam metadata paket atau dalam skrip build.

Dimulai dengan rilis 2.38, toolkit Git menyertakan implementasi gzip bawaan secara default, yang memungkinkan penyatuan dukungan untuk metode kompresi ini di seluruh sistem operasi dan meningkatkan kinerja pembuatan arsip. GitHub mengambil perubahan tersebut setelah memperbarui versi git di infrastrukturnya. Masalah ini disebabkan oleh fakta bahwa arsip terkompresi yang dihasilkan oleh implementasi gzip berbasis zlib bawaan adalah biner yang berbeda dari arsip yang dibuat oleh utilitas gzip, yang menghasilkan checksum berbeda untuk arsip yang dibuat oleh versi git berbeda saat menjalankannya. perintah "arsip git".

Oleh karena itu, setelah memperbarui git di GitHub, arsip yang sedikit berbeda mulai ditampilkan di halaman rilis, yang tidak lolos verifikasi menggunakan checksum lama. Masalahnya terwujud dalam berbagai sistem pembangunan, sistem integrasi berkelanjutan, dan alat untuk membangun paket dari kode sumber. Misalnya, perakitan sekitar 5800 port FreeBSD, kode sumbernya diunduh dari GitHub, rusak.

Menanggapi keluhan awal tentang gangguan ini, GitHub awalnya mengutip fakta bahwa checksum permanen untuk arsip tidak pernah dijamin. Setelah terlihat bahwa sejumlah besar pekerjaan diperlukan untuk memperbarui metadata di berbagai ekosistem untuk memulihkan fungsionalitas sistem pembangunan yang terpengaruh, perwakilan GitHub berubah pikiran, mengembalikan perubahan tersebut, dan mengembalikan metode lama dalam menghasilkan arsip.

Pengembang Git belum mengambil keputusan dan hanya mendiskusikan tindakan yang mungkin dilakukan. Opsi yang dipertimbangkan termasuk kembali menggunakan utilitas gzip default; menambahkan tanda β€œ--stable” untuk menjaga kompatibilitas dengan arsip lama; menghubungkan implementasi bawaan ke format arsip terpisah; menggunakan utilitas gzip untuk komit lama dan implementasi inline untuk komit mulai dari tanggal tertentu; menjamin stabilitas format hanya untuk arsip yang tidak terkompresi.

Kesulitan dalam mengambil keputusan dijelaskan oleh fakta bahwa mengembalikan panggilan ke utilitas eksternal tidak sepenuhnya menyelesaikan masalah kekekalan checksum, karena perubahan dalam program gzip eksternal juga dapat menyebabkan perubahan dalam format arsip. Saat ini, serangkaian tambalan telah diusulkan untuk ditinjau yang mengembalikan perilaku lama secara default (memanggil utilitas gzip eksternal) dan menggunakan implementasi bawaan jika tidak ada utilitas gzip di sistem. Tambalan tersebut juga menambah dokumentasi yang menyebutkan bahwa stabilitas keluaran "arsip git" tidak dijamin dan formatnya dapat berubah di masa mendatang.

Sumber: opennet.ru

Tambah komentar