خرابی در ساخت سیستم‌ها به دلیل تغییر در چک‌سام‌های بایگانی در GitHub

GitHub نحوه تولید آرشیوهای ".tar.gz" و ".tgz" به طور خودکار را در صفحات انتشار تغییر داد، که منجر به تغییرات در چک‌سام‌های آنها و خرابی‌های گسترده در سیستم‌های ساخت خودکار شد که بایگانی‌های دانلود شده از GitHub را در مقابل آرشیوهای قبلی برای تایید یکپارچگی بررسی می‌کند. جمع‌های کنترلی ذخیره شده، برای مثال، در ابرداده‌های بسته یا در اسکریپت‌های ساخت.

با شروع نسخه 2.38، جعبه ابزار Git به طور پیش‌فرض شامل پیاده‌سازی داخلی gzip بود که امکان یکپارچه‌سازی پشتیبانی از این روش فشرده‌سازی را در بین سیستم‌های عامل و بهبود عملکرد ایجاد آرشیو فراهم کرد. GitHub این تغییر را پس از به‌روزرسانی نسخه git در زیرساخت خود دریافت کرد. مشکل از این واقعیت ناشی می شود که بایگانی های فشرده تولید شده توسط پیاده سازی gzip مبتنی بر zlib داخلی با آرشیوهای ایجاد شده توسط ابزار gzip متفاوت هستند، که منجر به بررسی های مختلف برای آرشیوهای ایجاد شده توسط نسخه های مختلف git در هنگام اجرای برنامه می شود. دستور git archive.

بر این اساس، پس از به‌روزرسانی git در GitHub، بایگانی‌های کمی متفاوت در صفحات انتشار نمایش داده می‌شوند که با استفاده از چک‌سام‌های قدیمی تأیید را انجام نمی‌دهند. این مشکل در سیستم‌های ساخت مختلف، سیستم‌های یکپارچه‌سازی مداوم و ابزارهایی برای ساخت بسته‌ها از کد منبع ظاهر شد. به عنوان مثال، مونتاژ حدود 5800 پورت FreeBSD که کدهای منبع آنها از GitHub دانلود شده بود، خراب شد.

در پاسخ به شکایات اولیه در مورد اشکالات، GitHub در ابتدا به این واقعیت اشاره کرد که جمع‌های چک دائمی برای بایگانی‌ها هرگز تضمین نشده است. پس از اینکه نشان داده شد برای به‌روزرسانی ابرداده‌ها در اکوسیستم‌های مختلف برای بازگرداندن عملکرد سیستم‌های ساخت آسیب‌دیده، حجم زیادی کار لازم است، نمایندگان GitHub نظر خود را تغییر دادند، تغییر را برگرداندند و روش قدیمی تولید آرشیو را بازگرداندند.

توسعه دهندگان Git هنوز تصمیمی نگرفته اند و فقط در مورد اقدامات احتمالی بحث می کنند. گزینه های در نظر گرفته شده شامل بازگشت به استفاده از ابزار پیش فرض gzip بود. افزودن پرچم "--stable" برای حفظ سازگاری با آرشیوهای قدیمی. پیوند اجرای داخلی به یک قالب آرشیو جداگانه؛ استفاده از ابزار gzip برای commit های قدیمی و پیاده سازی درون خطی برای commit هایی که از تاریخ خاصی شروع می شوند. تضمین ثبات فرمت فقط برای آرشیوهای فشرده نشده.

دشواری تصمیم گیری با این واقعیت توضیح داده می شود که بازگشت به تماس با یک ابزار خارجی مشکل تغییرناپذیری جمع کنترل را به طور کامل حل نمی کند، زیرا تغییر در برنامه gzip خارجی نیز می تواند منجر به تغییر در قالب آرشیو شود. در حال حاضر، مجموعه‌ای از وصله‌ها برای بررسی پیشنهاد شده‌اند که رفتار قدیمی را به‌طور پیش‌فرض برمی‌گرداند (با فراخوانی یک ابزار gzip خارجی) و از پیاده‌سازی داخلی در غیاب ابزار gzip در سیستم استفاده می‌کند. وصله‌ها همچنین به مستندات اشاره می‌کنند که پایداری خروجی «آرشیو git» تضمین نشده است و ممکن است قالب در آینده تغییر کند.

منبع: opennet.ru

اضافه کردن نظر