دیر یا زود apt update روی VPS Linux Infrawire شما با انبوهی از متن قرمز شکست میخورد: کلید GPG گمشده، مخزنی که دیگر وجود ندارد، یا قفلی که برطرف نمیشود. هر خطا دلیل روشن و راهحل کوتاهی دارد.
این راهنما رایجترین مشکلات Ubuntu 24.04 و Debian 12 را از کمدخالتترین راهحل تا سنگینترین مرور میکند.
📋 پیشنیازها
- یک VPS با Ubuntu 24.04 یا Debian 12
- دسترسی SSH با کاربر root (آیپی و رمز root را در پنل کاربری خود مییابید)
- آشنایی پایه با خط فرمان
1. ابتدا منابع را پیدا کنید
پیش از رفع هر مشکل، بدانید مخازن شما کجا تعریف شدهاند:
Bashcat /etc/os-release cat /etc/apt/sources.list ls -l /etc/apt/sources.list.d/ apt update 2>&1 | grep -E '^(Err|W:|E:)'
در Ubuntu 24.04 مخازن اصلی در /etc/apt/sources.list.d/ubuntu.sources و با قالب deb822 (فایلهای .sources) قرار دارند. Debian 12 هنوز قالب کلاسیک تکخطی را در /etc/apt/sources.list به کار میبرد و هر دو قالب کنار هم کار میکنند.
Bash# نمونهای از یک ورودی deb822 (Ubuntu 24.04) Types: deb URIs: http://archive.ubuntu.com/ubuntu/ Suites: noble noble-updates noble-backports Components: main restricted universe multiverse Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
2. خطاهای قفل و dpkg ناتمام
پیام Could not get lock /var/lib/dpkg/lock-frontend یعنی فرایند دیگری از apt استفاده میکند؛ اغلب unattended-upgrades درست پس از بوت. پیش از هر کاری بررسی کنید:
Bashps aux | grep -E 'apt|dpkg|unattended' | grep -v grep lsof /var/lib/dpkg/lock-frontend
اگر فرایندی در حال اجراست چند دقیقه صبر کنید. فایل قفل را فقط وقتی حذف کنید که هیچ چیز آن را نگه نداشته باشد (اگر اشتباه کنید خطرناک است) و سپس وضعیت ناتمام را ترمیم کنید:
Bashrm -f /var/lib/dpkg/lock-frontend /var/lib/dpkg/lock /var/cache/apt/archives/lock dpkg --configure -a apt --fix-broken install
پیام dpkg was interrupted, you must manually run 'dpkg --configure -a' دقیقاً با اولین دستور بالا حل میشود.
3. NO_PUBKEY و کلیدهای GPG گمشده
خطای The following signatures couldn't be verified because the public key is not available: NO_PUBKEY ABCD1234 یعنی یک مخزن شخص ثالث کلید مورد اعتماد ندارد. از apt-key منسوخ استفاده نکنید: کلید را در /etc/apt/keyrings/ بگذارید و با signed-by به آن ارجاع دهید.
Bashinstall -d -m 0755 /etc/apt/keyrings curl -fsSL https://example.com/repo/key.gpg | gpg --dearmor -o /etc/apt/keyrings/example.gpg chmod 644 /etc/apt/keyrings/example.gpg echo 'deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/repo stable main' > /etc/apt/sources.list.d/example.list apt update
نشانی کلید را از مستندات رسمی نرمافزار بردارید و اگر curl gnupg نصب نیست ابتدا آنها را نصب کنید. اگر خطا به خود آرشیو Ubuntu یا Debian مربوط است، بسته کلیدها را دوباره نصب کنید: apt install --reinstall ubuntu-keyring یا debian-archive-keyring.
4. مخازن شخص ثالث خراب
خطای 404 Not Found یا does not have a Release file روی یک PPA یا مخزن سازنده معمولاً یعنی دیگر از نسخه شما پشتیبانی نمیکند. بهجای حذف، آن را غیرفعال کنید:
Bash# فایل .list کلاسیک: نامش را عوض کنید mv /etc/apt/sources.list.d/broken.list /etc/apt/sources.list.d/broken.list.disabled # فایل .sources با قالب deb822: این خط را داخل بلوک اضافه کنید Enabled: no
سپس دوباره apt update را اجرا کنید. خطا از بین میرود و بستههای نصبشده به کار خود ادامه میدهند.
5. خطای ساعت: Release file not valid yet
Release file for ... is not valid yet (invalid for another 3h 12min) یعنی ساعت سیستم از مهر زمانی مخزن عقب است. بررسی و همگامسازی مجدد کنید:
Bashtimedatectl timedatectl set-ntp true systemctl restart systemd-timesyncd
اگر systemd-timesyncd نصب نیست (برخی ایمیجهای حداقلی Debian)، بهجای آن apt install -y chrony را به کار ببرید.
6. نسخههای پایانیافته (EOL)
وقتی پشتیبانی یک نسخه تمام میشود، بستههای آن جابهجا میشوند و apt update خطای 404 یا no longer has a Release file برمیگرداند. برای نسخهای از Ubuntu که LTS نیست، منابع را به آرشیو نسخههای قدیمی هدایت کنید:
Bashsed -i 's|http://archive.ubuntu.com/ubuntu|http://old-releases.ubuntu.com/ubuntu|g; s|http://security.ubuntu.com/ubuntu|http://old-releases.ubuntu.com/ubuntu|g' /etc/apt/sources.list /etc/apt/sources.list.d/*.sources 2>/dev/null apt update
برای Debian قدیمی از http://archive.debian.org/debian استفاده کنید و خط security را حذف کنید. سیستم EOL را فقط راهحل موقت بدانید: دیگر وصله امنیتی نمیگیرد، پس ارتقا به یک نسخه پشتیبانیشده را برنامهریزی کنید.
7. بررسی نهایی
Bashapt update apt upgrade --dry-run apt-get check
apt update باید بدون خط Err یا E: تمام شود و apt-get check نباید چیزی چاپ کند.
🛠️ عیبیابی
قفل در هر تلاش برمیگردد: احتمالاً unattended-upgrades در حال اجراست. systemctl status unattended-upgrades را ببینید و منتظر پایان آن بمانید.
Conflicting values set for option Signed-By: یک مخزن دوبار با کلیدهای متفاوت تعریف شده است. با grep -r example.com /etc/apt/ آن را بیابید و فقط یک ورودی نگه دارید.
apt --fix-broken install روی اسکریپت یک بسته شکست میخورد: خطوط آخر خطا را بخوانید، سپس dpkg --remove --force-remove-reinstreq PACKAGE را امتحان و بعد نصب مجدد عادی را انجام دهید.
✅ مدیر بسته شما دوباره سالم است: بهروزرسانی و نصب بدون خطا انجام میشود!