عاجلًا أم آجلًا سيفشل apt update على VPS Linux Infrawire بجدار من النص الأحمر: مفتاح GPG مفقود، أو مستودع لم يعد موجودًا، أو قفل لا يزول. لكل خطأ سبب واضح وحل قصير.
يستعرض هذا الدليل أكثر المشكلات تكرارًا على Ubuntu 24.04 وDebian 12، من الإصلاح الأقل تدخلًا إلى الأكثر.
📋 المتطلبات
- خادم VPS يعمل بنظام Ubuntu 24.04 أو Debian 12
- وصول SSH بصلاحية root (تجد عنوان IP وكلمة مرور 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. الإصدارات المنتهية الدعم
عندما ينتهي دعم إصدار تُنقل حزمه ويعيد 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. اعتبر النظام المنتهي الدعم حلًا مؤقتًا: فهو لا يتلقى إصلاحات أمنية، لذا خطط للترقية إلى إصدار مدعوم.
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 متبوعًا بإعادة تثبيت عادية.
✅ عاد مدير الحزم إلى عافيته: التحديثات والتثبيتات تعمل بلا أخطاء!