لینوکس: apt / dnf / pacman خراب شده‌اند — علت‌ها و راه‌حل‌ها

در لینوکس، apt و dnf و pacman پایه اصلی نصب و به‌روزرسانی نرم‌افزار هستند. وقتی این ابزارها «خراب» به نظر می‌رسند، مشکل فقط این نیست که دیگر نمی‌توان برنامه جدیدی نصب کرد؛ معمولاً به‌روزرسانی‌های امنیتی هم متوقف می‌شوند و نگهداری کل سیستم بسیار سخت‌تر می‌شود. علت‌های رایج شامل به‌روزرسانی‌های نیمه‌کاره، mirrorهای خراب، ناسازگاری در پایگاه‌داده بسته‌ها، خطاهای امضا، وابستگی‌های خراب یا باقی ماندن فایل‌های lock هستند. مهم‌ترین نکته این است که نباید بلافاصله cache یا فایل‌های پیکربندی را بی‌هدف حذف کرد، بلکه باید اول فهمید دقیقاً کدام بخش واقعاً آسیب دیده است.

گاهی به نظر می‌رسد که خود مدیر بسته خراب شده، در حالی که علت واقعی در شبکه، DNS، تنظیمات repository یا کمبود فضای دیسک است. به همین دلیل، عیب‌یابی باید با این شروع شود که مشخص کنیم مشکل در ارتباطات است، در repository است، در پایگاه‌داده محلی است یا در وابستگی‌ها.

نشانه‌های رایج

  • apt update، dnf update یا pacman -Syu با خطا متوقف می‌شوند
  • پیام‌هایی درباره وابستگی‌های حل‌نشده یا بسته‌های خراب دیده می‌شود
  • به دلیل خطاهای GPG یا امضا، repository قابل استفاده نیست
  • پایگاه‌داده قفل شده و هیچ عملیات بسته‌ای انجام نمی‌شود
  • mirrorها خطای 404 یا timeout برمی‌گردانند
  • پس از یک به‌روزرسانی ناقص، عملیات مربوط به بسته‌ها دیگر درست کار نمی‌کند
  • پس از به‌روزرسانی بعضی کتابخانه‌ها، خود مدیر بسته دیگر اجرا نمی‌شود

اول از همه چه چیزی را باید بررسی کرد

اولین قدم این است که مشخص شود آیا مشکل واقعاً در مدیر بسته است یا در شبکه و DNS.

ping -c 4 8.8.8.8
ping -c 4 google.com
ip addr
ip route

اگر خود شبکه یا DNS از قبل مشکل داشته باشد، خراب شدن apt یا dnf یا pacman فقط نتیجه همان مشکل خواهد بود. اما اگر شبکه عادی کار می‌کند و فقط عملیات بسته‌ها شکست می‌خورند، باید روی repositoryها، کلیدها، lockها، cache، پایگاه‌داده و وابستگی‌ها تمرکز کرد.

دلایل مشترک در apt / dnf / pacman

1. به‌روزرسانی نیمه‌کاره

یکی از رایج‌ترین علت‌ها، متوقف شدن به‌روزرسانی در وسط کار است. قطع برق، بسته شدن ترمینال، قطع اتصال SSH یا فریز شدن محیط گرافیکی می‌تواند پایگاه‌داده بسته‌ها یا بعضی بسته‌ها را در وضعیت نیمه‌تمام رها کند.

در چنین وضعیتی بهتر است به‌جای حذف فوری فایل‌ها، اول تلاش شود وضعیت نیمه‌تمام به‌درستی کامل شود.

2. باقی ماندن فایل‌های lock

مدیرهای بسته از lock استفاده می‌کنند تا چند عملیات هم‌زمان اجرا نشود. اگر هنوز یک فرایند دیگر در حال اجرا باشد، یا بعد از crash فقط فایل lock باقی مانده باشد، سیستم اعلام می‌کند که مدیر بسته در حال استفاده است.

اما نباید فایل‌های lock را کورکورانه حذف کرد. ابتدا باید مطمئن شد که واقعاً هیچ فرایند مرتبطی دیگر فعال نیست.

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

3. خراب شدن تنظیمات repository

repositoryهای شخص ثالث، PPAهای قدیمی، mirrorهای نامعتبر یا باقی‌مانده تنظیمات بعد از ارتقای توزیع می‌توانند منابع بسته را نامعتبر کنند. نشانه‌های معمول این مشکل، خطای 404، نبودن Release file یا خطا در دریافت metadata است.

4. مشکلات کلید GPG و امضا

repositoryها معمولاً به‌صورت رمزنگاری‌شده تأیید می‌شوند. اگر کلید منقضی شده باشد، وارد نشده باشد، روش مدیریت کلید تغییر کرده باشد یا keyring محلی خراب شده باشد، مدیر بسته به دلایل امنیتی متوقف می‌شود.

5. وابستگی‌های خراب

وابستگی‌ها معمولاً زمانی خراب می‌شوند که نسخه‌های ناسازگار به‌زور نصب شوند، چند repository با هم مخلوط شوند، partial update انجام شود یا کتابخانه‌های سیستم به‌صورت دستی جایگزین شوند. این موضوع در سیستم‌های مبتنی بر pacman بسیار حساس است، اما apt و dnf نیز در صورت مخلوط شدن بی‌قاعده منابع به‌سرعت ناپایدار می‌شوند.

6. خراب شدن cache یا metadata

بسته‌هایی که ناقص دانلود شده‌اند، metadata قدیمی یا پایگاه‌های همگام‌سازی آسیب‌دیده می‌توانند مانع خواندن درست فهرست بسته‌ها شوند و نصب را با شکست مواجه کنند.

7. کمبود فضای دیسک

یک علت رایج اما کمتر مورد توجه، کمبود فضای آزاد است. اگر پارتیشن‌هایی مثل /var یا /boot پر باشند، باز کردن و نوشتن فایل‌ها ممکن است در میانه راه متوقف شود و سیستم بسته‌ها را در حالت ناسازگار باقی بگذارد.

df -h
du -sh /var/cache/* 2>/dev/null

وقتی apt خراب است چه باید بررسی شود

در سیستم‌های Debian / Ubuntu مهم است که فقط به apt نگاه نکنیم، بلکه وضعیت dpkg در لایه پایین‌تر را هم بررسی کنیم.

اصلاح بسته‌های نیمه‌پیکربندی‌شده

sudo dpkg --configure -a
sudo apt --fix-broken install

پس از یک به‌روزرسانی ناقص، این دو دستور معمولاً مهم‌ترین نقطه شروع هستند.

بارگیری دوباره فهرست بسته‌ها

sudo apt update

اگر در این مرحله خطاهای 404، امضا یا Release file دیده شود، باید /etc/apt/sources.list و محتوای /etc/apt/sources.list.d/ بررسی شود.

پاک کردن cache

sudo apt clean
sudo apt autoclean

اگر مشکل از cache خراب یا قدیمی باشد، این کار می‌تواند کمک کند.

وقتی dnf خراب است چه باید بررسی شود

در سیستم‌های Fedora / RHEL باید بیشتر روی metadata، تاریخچه تراکنش‌ها و تنظیمات repository تمرکز کرد.

بازسازی metadata

sudo dnf clean all
sudo dnf makecache

اگر اطلاعات mirror یا metadata آسیب دیده باشد، این معمولاً گام اول مفیدی است.

بررسی وابستگی‌ها و سازگاری سیستم

sudo dnf check
sudo dnf distro-sync

این کمک می‌کند مشخص شود که آیا سیستم هنوز با وضعیت مورد انتظار بسته‌های توزیع سازگار است یا نه.

مشاهده تاریخچه

sudo dnf history
sudo dnf history info last

تاریخچه معمولاً نشان می‌دهد که پس از کدام به‌روزرسانی مشکلات شروع شده‌اند.

وقتی pacman خراب است چه باید بررسی شود

در Arch Linux باید به‌طور ویژه پایگاه‌های همگام‌سازی، کلیدها، mirrorها و وجود partial update بررسی شود.

همگام‌سازی دوباره پایگاه‌داده‌ها

sudo pacman -Syy

اگر پایگاه همگام‌سازی محلی دیگر با repository هم‌خوانی ندارد، این معمولاً اولین گام است.

انجام به‌روزرسانی کامل

sudo pacman -Syu

در Arch باید از partial update پرهیز کرد. به‌روزرسانی بعضی بسته‌ها و قدیمی ماندن بقیه، یکی از کلاسیک‌ترین راه‌های ناسازگاری سیستم است.

بررسی مشکلات کلیدها

sudo pacman-key --init
sudo pacman-key --populate

اگر مشکل در امضاها یا keyring باشد، ممکن است لازم باشد دوباره مقداردهی اولیه شود.

لاگ‌ها بسیار مهم هستند

در خطاهای مدیر بسته، نگاه کردن فقط به آخرین خط معمولاً کافی نیست. فقط لاگ‌ها و خروجی دقیق نشان می‌دهند که مشکل در امضا، وابستگی، شبکه یا پایگاه‌داده است.

apt / dpkg

sudo tail -n 100 /var/log/apt/history.log
sudo tail -n 100 /var/log/dpkg.log

dnf

sudo dnf history
sudo journalctl -xe --no-pager | tail -n 100

pacman

sudo tail -n 100 /var/log/pacman.log

ترتیب عملی بررسی

مرحله 1: شبکه و DNS را بررسی کنید

ping -c 4 8.8.8.8
ping -c 4 google.com

مرحله 2: فضای آزاد دیسک را بررسی کنید

df -h

مرحله 3: فرایندها و فایل‌های lock را بررسی کنید

ps aux | grep -E 'apt|dpkg|dnf|yum|pacman'

مرحله 4: لاگ‌ها را بخوانید

اول باید مشخص شود که آخرین عملیات مشخصی که واقعاً شکست خورده کدام بوده است.

مرحله 5: از دستورهای بازیابی مناسب توزیع استفاده کنید

در apt معمولاً با dpkg --configure -a شروع می‌شود، در dnf با پاک‌سازی metadata و در pacman با همگام‌سازی کامل و بررسی کلیدها.

چه کارهایی نباید انجام داد

  • حذف فایل‌های lock بدون درک علت
  • نصب فایل‌های .deb / .rpm / یا بسته‌های دیگر از منابع نامطمئن
  • انجام مکرر partial update در Arch
  • مخلوط کردن بی‌قاعده apt با dpkg، dnf با rpm یا pacman با تغییرات دستی فایل‌ها
  • غیرفعال کردن بررسی امضا بدون درک خطا

چطور از تکرار مشکل جلوگیری کنیم

  • هنگام به‌روزرسانی از قطع برق و توقف اجباری جلوگیری کنید
  • repositoryهای شخص ثالث بیش از حد اضافه نکنید
  • پیش از به‌روزرسانی‌های بزرگ snapshot یا backup تهیه کنید
  • روش به‌روزرسانی توصیه‌شده توزیع را دنبال کنید
  • به‌ویژه در Arch از partial update پرهیز کنید

جمع‌بندی

حتی اگر به نظر برسد که خود apt یا dnf یا pacman خراب شده، علت واقعی اغلب در شبکه، lockها، امضاها، وابستگی‌ها، cache، فضای آزاد یا تنظیمات repository است. مهم‌ترین کار این است که فوراً دست به حذف یا نصب مجدد تصادفی نزنید، بلکه ابتدا با کمک لاگ‌ها بفهمید مشکل دقیقاً در چه لایه‌ای رخ داده است. بعد از آن باید از روش درست استفاده شود: تعمیر dpkg برای apt، بررسی metadata و history برای dnf، و همگام‌سازی کامل همراه با بررسی کلیدها برای pacman.

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *