وبلاگ نت‌آرامآموزش، تجربه و راهکارهای زیرساخت

رفع Hash Sum mismatch در apt؛ مشکل از مخزن است یا کش؟

تشخیص تداخل نسخه فایل مخزن، پراکسی و mirror در خطای هش apt، با روش امن بررسی و بازیابی.

انتشار:
توسط تیم فنی نت‌آرام
۷ دقیقه زمان مطالعه
۰ دیدگاه
محتوای تخصصی، ساده و کاربردی
هماهنگ با هویت حرفه‌ای نت‌آرام
بازگشت به لیست مقالات
تصویر شاخص مقاله رفع Hash Sum mismatch در apt؛ مشکل از مخزن است یا کش؟ در وبلاگ نت‌آرام
محتوای آموزشی وبلاگ نت‌آرام
روی سرور مجازی ایران دستور به‌روزرسانی فهرست بسته‌ها را اجرا می‌کنید و با Hash Sum mismatch روبه‌رو می‌شوید. معنی ساده‌اش این است که مقدار اثر انگشت فایل دریافتی با مقدار مورد انتظار APT یکی نیست. این کنترل کمک می‌کند فایل ناقص یا ناسازگار بی‌سروصدا استفاده نشود؛ پس راه‌حل، خاموش‌کردن بررسی امنیتی نیست.
ممکن است mirror هنگام دریافت در حال همگام‌سازی باشد، یک پراکسی نسخه قدیمی تحویل دهد، دانلود ناقص باشد یا تنظیم‌های محلی و فایل‌های کش مشکل داشته باشند. به‌ندرت خطاهای ذخیره‌سازی یا سخت‌افزار نیز دخیل‌اند. در این راهنما مشخص می‌کنیم کدام فایل و کدام منبع مشکل دارد و بعد از کم‌خطرترین راه پیش می‌رویم. مثال‌ها مخصوص Ubuntu و APT هستند؛ برای توزیع‌های دیگر آدرس و نام مخزن را طبق راهنمای همان سیستم انتخاب کنید.

۱. متن خطا و نوع فایل را ثبت کنید

در ترمینال سرور اجرا کنید:
کد / دستورsudo apt-get update
آدرس کنار Failed to fetch و زمان اجرا را یادداشت کنید. اگر مسیر شامل dists و Packages است، معمولاً مشکل در فهرست بسته‌هاست؛ اگر مسیر به فایل .deb در pool اشاره دارد، مشکل می‌تواند در دانلود خود بسته باشد. عنوان مخزن و توزیع کنار خطا را نیز بخوانید. اگر بخشی از مخازن موفق و یکی ناموفق است، تغییر همه منابع منطقی نیست. اطلاعات محرمانه موجود در URL یا نام‌های خصوصی را پیش از ارسال گزارش حذف کنید.
پس از دریافت خطا، نصب یا ارتقای گسترده را تا دریافت فهرست معتبر عقب بیندازید. گاهی APT با وجود هشدار از فهرست قدیمی استفاده می‌کند؛ صرف پایان‌یافتن دستور یا دیدن چند خط Hit نشانه موفقیت همه منابع نیست. اگر خطای امضای کلید یا تاریخ مشاهده می‌کنید، موضوع متفاوت است؛ راهنمای کلید منقضی‌شده مخزن و راهنمای ساعت نامعتبر مخزن را ببینید.

۲. یک بار در زمان مناسب دوباره امتحان کنید

اگر مشکل تازه و فقط برای یک mirror رخ داده است، چند دقیقه بعد همان sudo apt-get update را تکرار کنید. mirror ممکن است در میانه انتشار نسخه جدید فهرست بوده باشد. اگر بار دوم بدون خطای همان منبع تمام شد، بعداً نیز یک بار سلامت را بررسی کنید؛ اگر مرتب تکرار می‌شود به مراحل بعد بروید. نتیجه موفق موقت نباید شما را از پیگیری خطای پرتکرار بازدارد.
برای فهم نسخه سیستم و منابع فعال:
کد / دستورcat /etc/os-release ls -l /etc/apt/sources.list /etc/apt/sources.list.d
برخی نسخه‌های جدید از فایل‌های .sources و نسخه‌های قدیمی‌تر از .list استفاده می‌کنند؛ ممکن است یکی از مسیرهای بالا وجود نداشته باشد. فایل مربوط به همان مخزن خطادار را با ویرایشگر یا دستور خواندن باز کنید و نام suite، component و آدرس را یادداشت کنید. کل تنظیم‌ها ممکن است نشانی خصوصی داشته باشند؛ بدون حذف اطلاعات حساس آن‌ها را منتشر نکنید.

۳. مسیر پراکسی و کش را جدا کنید

پیکربندی مؤثر APT ممکن است در فایل‌های مختلف یا متغیر محیطی تعریف شده باشد. برای دیدن گزینه‌های پراکسی:
کد / دستورapt-config dump | grep -i proxy
اگر خروجی شامل نام کاربری یا رمز است آن را جایی ارسال نکنید. اگر پراکسی سازمانی الزامی است، با مدیر آن هماهنگ کنید. برای یک آزمون موقت می‌توانید از پراکسی سازگار بخواهید پاسخ کش‌شده را بازاستفاده نکند:
کد / دستورsudo apt-get -o Acquire::http::No-Cache=true -o Acquire::https::No-Cache=true update
این تنظیم فقط برای همان اجراست و از پراکسی‌های سازگار درخواست می‌کند پاسخ تازه بدهند؛ تضمین نمی‌کند همه پراکسی‌های شفاف یا CDNها کش را نادیده بگیرند. اگر این آزمون موفق شد اما اجرای عادی هنوز خطا دارد، تاریخچه و تنظیم کش را به مسئول پراکسی بدهید تا همان شیء یا سیاست کش بررسی شود. برای تفاوت خطای احراز هویت پراکسی با این مشکل، راهنمای خطای ۴۰۷ در apt را بخوانید.
اگر شبکه شما ارتباط مستقیم مجاز دارد و مدیر شبکه تأیید می‌کند، آزمون از یک مسیر شبکه یا mirror معتبر دیگر می‌تواند محل مشکل را مشخص کند. بدون هماهنگی، پراکسی امنیتی یا سیاست شبکه را دور نزنید. اگر هر دو مسیر همان فایل نامعتبر را برمی‌گردانند، منشأ مخزن یا خود فایل هم باید بررسی شود.

۴. در صورت نیاز mirror همان مخزن را اصلاح کنید

ابتدا از فایل تنظیم مربوط به مخزن یک نسخه با مجوز محدود و نام جدید در پوشه خصوصی مدیر بگیرید. سپس در همان فایل، فقط نشانی mirror را با mirror معتبر و سازگار با همان نسخه، معماری، suite و component عوض کنید؛ جزئیات امضای مخزن و Signed-By را حفظ کنید. در فایل deb822 ممکن است بخش URIs چند نشانی داشته باشد. از جایگزین‌کردن تمام منابع با دستورهای آماده اینترنتی خودداری کنید، چون می‌تواند مخزن نسخه دیگری را وارد سیستم کند.
برای نمونه، اگر سیستم Ubuntu است، فهرست mirrorهای تأییدشده و راهنمای رسمی همان نسخه را مبنا قرار دهید. مخزن شخص ثالث را به آدرس رسمی اوبونتو تبدیل نکنید؛ هر مخزن مالک جداگانه دارد. پس از ویرایش دوباره اجرا کنید:
کد / دستورsudo apt-get update apt-cache policy
دستور اول شاخص‌ها را تازه می‌کند و دومی منبع و اولویت بسته‌ها را نشان می‌دهد. بررسی کنید همان suite مورد انتظار وجود دارد و هیچ پیام هش یا امضا باقی نمانده است. اگر تغییر نتیجه نداد، فایل ثبت‌شده را به حالت قبل برگردانید و علت شبکه یا خود مخزن را پیگیری کنید.

۵. تفاوت کش بسته با فهرست مخازن

دستور زیر فایل‌های بسته دانلودشده در کش APT را پاک می‌کند، نه لزوماً فهرست‌های مخزن را:
کد / دستورsudo apt-get clean
اگر خطا مربوط به خود فایل .deb بود و بسته‌های کش‌شده برای نصب آفلاین لازم نیستند، این کار می‌تواند دانلود مجدد را ممکن کند. clean همه فایل‌های بسته کش‌شده مربوط به APT را پاک می‌کند؛ پیش از اجرا مطمئن شوید به آن‌ها برای نصب آفلاین نیاز ندارید. این دستور بسته‌های نصب‌شده را حذف نمی‌کند. اگر خطا مربوط به فهرست‌هاست، انتظار نداشته باشید clean به‌تنهایی مشکل را درمان کند.
APT معمولاً فهرست‌ها را در /var/lib/apt/lists نگه می‌دارد و هنگام update آن‌ها را مدیریت می‌کند. حذف یک‌جای این پوشه یا قفل آن در زمان اجرای مدیر بسته می‌تواند بررسی را دشوار کند. اگر پس از رفع mirror و پراکسی هنوز به خرابی محلی مشکوکید، در پنجره نگه‌داری و وقتی هیچ عملیات بسته‌ای فعال نیست، از وضعیت و فضای دیسک نسخه ثبت کنید و بازسازی فهرست‌ها را طبق راهنمای توزیع انجام دهید. از حذف فایل lock برای دورزدن عملیات فعال استفاده نکنید. راهنمای پیکربندی APT محل فهرست‌ها و گزینه‌های پراکسی را توضیح می‌دهد.

۶. اگر خطا باقی ماند یا دوباره برگشت

نام دقیق فایل، زمان، نسخه APT، URL بدون اطلاعات محرمانه و نتیجه آزمایش هر مسیر را ثبت کنید. اگر سایر سرویس‌ها هم خطای خواندن دارند، فضای آزاد، خطاهای فایل‌سیستم و سلامت ذخیره‌سازی را بررسی کنید؛ چند بار تکرار دانلود خطای دیسک را درمان نمی‌کند. سازوکار by-hash در مخزن‌های پشتیبانی‌شده از برخی ناهماهنگی‌های زمان انتشار جلوگیری می‌کند، اما همه مخزن‌ها و پراکسی‌ها آن را یکسان پشتیبانی نمی‌کنند. قالب رسمی مخزن Debian نحوه انتشار این فایل‌ها را شرح می‌دهد.
موفقیت زمانی است که به‌روزرسانی همه منابع مورد نیاز بدون خطای هش و امضا انجام شود و نسخه و منشأ بسته مورد نظر با apt-cache policy نام-بسته مطابق انتظار باشد. سپس نصب یا ارتقای برنامه‌ریزی‌شده را با بازبینی تغییرات ادامه دهید؛ برای عبور از خطا از گزینه‌های اجازه بسته تأییدنشده استفاده نکنید.
اشتراک‌گذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.

دیدگاه‌ها (۰)

دیدگاه‌های تاییدشده و پاسخ‌های تیم نت‌آرام