Kegagalan dalam sistem binaan disebabkan oleh perubahan dalam jumlah semak arkib pada GitHub

GitHub mengubah cara ia menjana arkib ".tar.gz" dan ".tgz" yang dijana secara automatik pada halaman keluaran, yang membawa kepada perubahan dalam jumlah semak mereka dan kegagalan besar dalam sistem binaan automatik yang menyemak arkib yang dimuat turun daripada GitHub berbanding yang sebelumnya untuk mengesahkan integriti jumlah semak yang disimpan, contohnya, diletakkan dalam metadata pakej atau dalam skrip binaan.

Bermula dengan keluaran 2.38, kit alat Git menyertakan pelaksanaan terbina dalam gzip secara lalai, yang memungkinkan untuk menyatukan sokongan untuk kaedah pemampatan ini merentas sistem pengendalian dan meningkatkan prestasi penciptaan arkib. GitHub mengambil perubahan selepas mengemas kini versi git dalam infrastrukturnya. Masalahnya disebabkan oleh fakta bahawa arkib termampat yang dijana oleh pelaksanaan gzip berasaskan zlib terbina dalam adalah berbeza binari daripada arkib yang dicipta oleh utiliti gzip, yang menghasilkan jumlah semak yang berbeza untuk arkib yang dicipta oleh versi git yang berbeza apabila melaksanakan arahan "git archive".

Sehubungan itu, selepas mengemas kini git dalam GitHub, arkib yang sedikit berbeza mula dipaparkan pada halaman keluaran yang tidak lulus pengesahan menggunakan checksum lama. Masalahnya nyata dalam pelbagai sistem binaan, sistem integrasi berterusan dan alatan untuk membina pakej daripada kod sumber. Sebagai contoh, pemasangan kira-kira 5800 port FreeBSD, kod sumber yang dimuat turun daripada GitHub, telah rosak.

Sebagai tindak balas kepada aduan awal tentang gangguan, GitHub pada mulanya memetik fakta bahawa jumlah semak kekal untuk arkib tidak pernah dijamin. Selepas ditunjukkan bahawa sejumlah besar kerja diperlukan untuk mengemas kini metadata dalam pelbagai ekosistem untuk memulihkan sistem binaan yang terjejas oleh perubahan itu, wakil GitHub mengubah fikiran mereka, membalikkan perubahan dan mengembalikan kaedah lama untuk menjana arkib.

Pembangun Git belum membuat keputusan dan hanya membincangkan tindakan yang mungkin. Pilihan yang dipertimbangkan termasuk kembali menggunakan utiliti gzip lalai; menambah bendera "--stabil" untuk mengekalkan keserasian dengan arkib lama; memautkan pelaksanaan terbina dalam kepada format arkib yang berasingan; menggunakan utiliti gzip untuk komit lama dan pelaksanaan sebaris untuk komit bermula dari tarikh tertentu; menjamin kestabilan format hanya untuk arkib yang tidak dimampatkan.

Kesukaran membuat keputusan dijelaskan oleh fakta bahawa mengembalikan semula panggilan ke utiliti luaran tidak menyelesaikan sepenuhnya masalah ketakbolehubah checksum, kerana perubahan dalam program gzip luaran juga boleh membawa kepada perubahan dalam format arkib. Pada masa ini, satu set tampung telah dicadangkan untuk semakan yang mengembalikan gelagat lama secara lalai (memanggil utiliti gzip luaran) dan menggunakan pelaksanaan terbina dalam tanpa ketiadaan utiliti gzip dalam sistem. Tampalan juga menambah pada dokumentasi dengan menyebut bahawa kestabilan output "git archive" tidak dijamin dan formatnya mungkin berubah pada masa hadapan.

Sumber: opennet.ru

Tambah komen