ความล้มเหลวในระบบการสร้างเนื่องจากการเปลี่ยนแปลงในการตรวจสอบผลรวมการเก็บถาวรบน GitHub

GitHub เปลี่ยนวิธีการสร้างไฟล์เก็บถาวร “.tar.gz” และ “.tgz” ที่สร้างขึ้นโดยอัตโนมัติในหน้าเผยแพร่ ซึ่งนำไปสู่การเปลี่ยนแปลงในเช็คซัมและความล้มเหลวครั้งใหญ่ในระบบสร้างอัตโนมัติที่ตรวจสอบไฟล์เก็บถาวรที่ดาวน์โหลดจาก GitHub เทียบกับไฟล์ก่อนหน้าเพื่อยืนยันความสมบูรณ์ . เช็คซัมที่จัดเก็บไว้ เช่น วางไว้ในข้อมูลเมตาของแพ็คเกจหรือในสคริปต์บิลด์

ตั้งแต่รุ่น 2.38 เป็นต้นไป ชุดเครื่องมือ Git ได้รวมการใช้งาน gzip ในตัวตามค่าเริ่มต้น ซึ่งทำให้สามารถรวมการสนับสนุนสำหรับวิธีการบีบอัดนี้ทั่วทั้งระบบปฏิบัติการ และปรับปรุงประสิทธิภาพการสร้างไฟล์เก็บถาวร GitHub ได้รับการเปลี่ยนแปลงหลังจากอัปเดตเวอร์ชันของ git ในโครงสร้างพื้นฐาน ปัญหาเกิดจากข้อเท็จจริงที่ว่าไฟล์เก็บถาวรที่บีบอัดที่สร้างโดยการใช้ gzip ที่ใช้ zlib ในตัวนั้นเป็นไบนารีที่แตกต่างจากไฟล์เก็บถาวรที่สร้างโดยยูทิลิตี้ gzip ซึ่งส่งผลให้มีการตรวจสอบที่แตกต่างกันสำหรับไฟล์เก็บถาวรที่สร้างโดย git เวอร์ชันต่างๆ เมื่อดำเนินการ คำสั่ง "git archive"

ดังนั้น หลังจากอัปเดต git ใน GitHub แล้ว ก็เริ่มแสดงไฟล์เก็บถาวรที่แตกต่างกันเล็กน้อยในหน้าเผยแพร่ ซึ่งไม่ผ่านการตรวจสอบโดยใช้เช็คซัมเก่า ปัญหาปรากฏในระบบการสร้างต่างๆ ระบบบูรณาการอย่างต่อเนื่อง และเครื่องมือสำหรับการสร้างแพ็คเกจจากซอร์สโค้ด ตัวอย่างเช่น แอสเซมบลีของพอร์ต FreeBSD ประมาณ 5800 พอร์ต ซึ่งเป็นซอร์สโค้ดที่ดาวน์โหลดจาก GitHub เสียหาย

เพื่อเป็นการตอบสนองต่อข้อร้องเรียนเบื้องต้นเกี่ยวกับข้อบกพร่องดังกล่าว ในตอนแรก GitHub อ้างถึงข้อเท็จจริงที่ว่าไม่มีการรับประกันการตรวจสอบผลรวมถาวรสำหรับไฟล์เก็บถาวร หลังจากที่แสดงให้เห็นว่าจะต้องทำงานจำนวนมากในการอัปเดตข้อมูลเมตาในระบบนิเวศต่างๆ เพื่อคืนค่าการทำงานของระบบบิลด์ที่ได้รับผลกระทบ ตัวแทนของ GitHub เปลี่ยนใจ เปลี่ยนกลับการเปลี่ยนแปลง และส่งคืนวิธีการเก่าในการสร้างไฟล์เก็บถาวร

นักพัฒนา Git ยังไม่ได้ตัดสินใจและกำลังหารือเกี่ยวกับการดำเนินการที่เป็นไปได้เท่านั้น ตัวเลือกที่ถือว่ารวมการเปลี่ยนกลับไปใช้ยูทิลิตี้ gzip เริ่มต้น การเพิ่มแฟล็ก "--stable" เพื่อรักษาความเข้ากันได้กับไฟล์เก็บถาวรเก่า การเชื่อมโยงการใช้งานในตัวกับรูปแบบไฟล์เก็บถาวรแยกต่างหาก การใช้ยูทิลิตี้ gzip สำหรับคอมมิตเก่าและการใช้งานแบบอินไลน์สำหรับคอมมิตที่เริ่มต้นจากวันที่กำหนด รับประกันความเสถียรของรูปแบบสำหรับไฟล์เก็บถาวรที่ไม่มีการบีบอัดเท่านั้น

ความยากลำบากในการตัดสินใจอธิบายได้จากข้อเท็จจริงที่ว่าการย้อนกลับไปยังการโทรไปยังยูทิลิตี้ภายนอกไม่สามารถแก้ปัญหาความไม่เปลี่ยนรูปของเช็คซัมได้อย่างสมบูรณ์ เนื่องจากการเปลี่ยนแปลงในโปรแกรม gzip ภายนอกยังสามารถนำไปสู่การเปลี่ยนแปลงในรูปแบบไฟล์เก็บถาวร ปัจจุบัน มีการเสนอชุดแพตช์เพื่อตรวจสอบซึ่งจะส่งคืนลักษณะการทำงานเก่าตามค่าเริ่มต้น (เรียกยูทิลิตี้ gzip ภายนอก) และใช้การใช้งานในตัวในกรณีที่ไม่มียูทิลิตี้ gzip ในระบบ แพตช์ยังเพิ่มลงในเอกสารโดยระบุว่าไม่รับประกันความเสถียรของเอาต์พุต "git archive" และรูปแบบอาจมีการเปลี่ยนแปลงในอนาคต

ที่มา: opennet.ru

เพิ่มความคิดเห็น