دليل APT — تثبيت وتحديث وحذف البرامج في Linux

على Ubuntu وDebian لا تنزّل البرامج من مواقعها كما في Windows. تطلبها من APT، مدير الحزم. يجلب APT البرنامج من مستودعات التوزيعة الموثوقة، مع كل ما يحتاجه ليعمل، ويحدّثه لاحقاً مع بقية النظام. عشرة أوامر تكفي لأغلب العمل، وبعض رسائل الخطأ تحتاج أن تعرف ما وراءها.
قبل البدء#
- أوامر التثبيت والحذف تحتاج صلاحية الإدارة. إن دخلت بمستخدم عادي فابدأها بـ
sudo. وإن دخلت بـroot فالأوامر تعمل بلاsudo، ولا يضرّ وجودها. - أوامر البحث والعرض، مثل
apt searchوapt show، لا تحتاج صلاحية.
apt أم apt-get؟#
الأمران يستعملان النظام نفسه. apt أحدث وأسهل للاستعمال اليدوي: يعرض شريط تقدّم، ويجمع أوامر كانت متفرّقة. أما في السكربتات فاستعمل apt-get. توثيق apt نفسه ينبّه إلى أن واجهته قد تتغيّر بين الإصدارات، بينما apt-get ثابت.
حدّث قائمة الحزم قبل أيّ شيء#
sudo apt update
هذا الأمر لا يثبّت شيئاً ولا يحدّث برنامجاً. يجلب من المستودعات قائمة بأحدث الإصدارات المتاحة فقط. وفي آخر ناتجه يخبرك كم حزمة لها تحديث. شغّله قبل أيّ تثبيت، وإلا فقد يبحث APT عن إصدار لم يعد موجوداً في المستودع.
تثبيت التحديثات#
sudo apt upgrade
يعرض ما سيحدّثه، والمساحة التي سيأخذها، ثم ينتظر موافقتك. اكتب Y واضغط Enter. وفي السكربتات أضف -y ليوافق وحده.
وupgrade لا يحذف حزمة أبداً. إن احتاج تحديث ما إلى حذف حزمة أو تثبيت حزمة جديدة، فإنه يؤجّله، وهذه «الحزم المحجوزة» الموضّحة في المشاكل أدناه. أما full-upgrade فيسمح بذلك:
sudo apt full-upgrade
اقرأ قائمة ما سيحذفه full-upgrade قبل أن توافق، خصوصاً على خادم يخدم موقعاً. إن ظهرت فيها حزمة تعرف أنها أساسية لعملك فتوقّف واسأل قبل المتابعة.
هل يحتاج الخادم إعادة تشغيل؟#
تحديث النواة وبعض المكتبات الأساسية لا يعمل حتى تعيد تشغيل الخادم. يترك Ubuntu علامة حين يلزم ذلك:
cat /var/run/reboot-required 2>/dev/null || echo "لا حاجة لإعادة التشغيل"
تثبيت برنامج#
sudo apt install nginx
وأكثر من برنامج في أمر واحد:
sudo apt install git curl unzip htop
ولتعرف الإصدارات المتاحة لحزمة، والمثبّت منها:
apt-cache policy nginx
وتثبيت إصدار بعينه يكون بالاسم ثم = ثم رقم الإصدار، منسوخاً حرفياً من ناتج الأمر السابق:
sudo apt install nginx=رقم-الإصدار-كما-ظهر
تأكّد أن البرنامج مثبّت#
apt list --installed nginx
dpkg -l nginx
nginx -v
apt list --installed: يعرض الحزمة وإصدارها إن كانت مثبّتة.dpkg -l: يبدأ سطرها بـiiحين تكون مثبّتة سليمة.- الأمر الثالث: يسأل البرنامج نفسه عن إصداره. أغلب البرامج تجيب على
-vأو--version.
حذف برنامج#
# يحذف البرنامج ويُبقي ملفات إعداده
sudo apt remove nginx
# يحذف البرنامج وملفات إعداده في /etc
sudo apt purge nginx
استعمل remove إن كنت قد تعيد تثبيته وتريد إعداداتك كما هي، وpurge للتخلّص منه نهائياً.
purge يحذف ملفات الإعداد التي عدّلتها بنفسك، كإعدادات مواقع nginx مثلاً. خذ نسخة من مجلّد إعداد البرنامج في /etc قبله. أما بيانات المواقع وقواعد البيانات فلا يحذفها، لكن تأكّد من ذلك في رسالة الحزمة نفسها.
تنظيف ما لم يعد مستعملاً#
حين تحذف برنامجاً تبقى الحزم التي ثُبّتت من أجله. هذا الأمر يعرضها ويحذفها:
sudo apt autoremove
وتجربة تعرض ما سيُحذف دون أن تحذفه:
sudo apt autoremove --dry-run
والحزم المنزّلة تتراكم في /var/cache/apt/archives/:
apt autoclean: يحذف منها ما لم يعد متاحاً في المستودعات.apt clean: يحذفها كلها. هذا آمن، فهي نسخ تُنزّل من جديد عند الحاجة.
du -sh /var/cache/apt/archives/
sudo apt clean
البحث عن حزمة ومعرفة ما فيها#
apt search redis # بحث في الأسماء والأوصاف
apt show redis-server # الوصف والإصدار والاعتماديات
dpkg -L redis-server # الملفات التي ثبّتتها حزمة مثبّتة
dpkg -S /usr/bin/redis-cli # أيّ حزمة جاء منها هذا الملف
التحديثات الأمنية تلقائياً#
الخادم الذي لا يُحدَّث إلا حين تتذكّره يبقى مكشوفاً أياماً بعد إعلان كل ثغرة. الحزمة unattended-upgrades تثبّت التحديثات الأمنية وحدها. وهي مثبّتة افتراضياً في كثير من صور Ubuntu. تأكّد منها، وفعّلها:
sudo apt install unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades
أجب Yes على السؤال. ولتعرف ماذا فعلت، انظر في سجلّاتها في /var/log/unattended-upgrades/.
مستودع خارجي (PPA)#
أحياناً تحتاج إصداراً أحدث مما في مستودعات التوزيعة، كإصدار أحدث من PHP. على Ubuntu تُضاف لذلك مستودعات PPA:
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install php8.3
المستودع الخارجي يستطيع أن يثبّت على خادمك أيّ شيء بصلاحية root. أضف فقط ما تعرف القائمين عليه. ppa:ondrej/php معروف وواسع الاستعمال، ويديره أحد مطوّري حزم PHP في Debian. وتذكّر أن PPA لـUbuntu تحديداً. على Debian يوفّر الشخص نفسه مستودعاً مختلفاً، له تعليماته الخاصة.
منع حزمة من التحديث#
إن كان تحديث حزمة ما يكسر شيئاً عندك، فجمّدها حتى تجد حلّاً:
sudo apt-mark hold nginx # جمّد
apt-mark showhold # اعرض المجمّدة
sudo apt-mark unhold nginx # أعدها
لا تنسَ الحزمة المجمّدة. هي لا تتلقّى التحديثات الأمنية أيضاً.
جدول مرجعي#
| الأمر | ما يفعله |
|---|---|
sudo apt update | يجلب قائمة الإصدارات المتاحة |
sudo apt upgrade | يثبّت التحديثات دون حذف شيء |
sudo apt full-upgrade | يثبّت التحديثات ويحذف ما يلزم لها |
sudo apt install X | يثبّت برنامجاً |
sudo apt remove X | يحذفه ويُبقي إعداداته |
sudo apt purge X | يحذفه مع إعداداته |
sudo apt autoremove | يحذف الاعتماديات التي لم تعد مستعملة |
apt search X / apt show X | يبحث عن حزمة / يعرض تفاصيلها |
apt list --installed | يسرد المثبّت |
sudo apt-mark hold X | يمنع تحديث حزمة |
مشاكل شائعة وحلولها#
«Could not get lock /var/lib/dpkg/lock-frontend»#
عملية أخرى تستعمل APT الآن، وغالباً التحديثات التلقائية التي تعمل بعد إقلاع الخادم بقليل. انتظر حتى تنتهي، وتعرف ما يعمل بهذا الأمر:
ps aux | grep -E 'apt|dpkg|unattended' | grep -v grep
لا تحذف ملفات القفل لتتجاوز الرسالة. إن عملت عمليتا تثبيت في الوقت نفسه فقد تفسدان قاعدة بيانات الحزم، ويصير إصلاحها أصعب بكثير من الانتظار.
«E: Unable to locate package»#
- لم تشغّل
apt updateبعد: وهذا يحدث كثيراً على خادم جديد. - اسم الحزمة غير الذي كتبته: ابحث عنه بـ
apt search. - الحزمة في مستودع غير مفعّل: على Ubuntu، كثير من البرامج في مستودع
universe. فعّله هكذا:
sudo add-apt-repository universe
sudo apt update
«The following packages have been kept back»#
هذه حزم يحتاج تحديثها إلى تثبيت حزم جديدة أو حذف أخرى، فتركها upgrade. وأحياناً يؤجّلها Ubuntu عمداً، ليوزّع التحديث على الخوادم تدريجياً. حدّثها باسمها، وراجع ما سيتغيّر قبل أن توافق:
sudo apt install اسم-الحزمة-المحجوزة
«dpkg was interrupted, you must manually run 'dpkg --configure -a'»#
تثبيت سابق انقطع في منتصفه، لانقطاع الاتصال مثلاً. أكمله، ثم أصلح الاعتماديات الناقصة:
sudo dpkg --configure -a
sudo apt install -f
ولتجنّب هذا في المرّات القادمة، شغّل التحديثات الطويلة داخل tmux أو screen. عندها لا يقطعها انقطاع SSH.
«NO_PUBKEY» أو «The following signatures couldn't be verified»#
مستودع خارجي أضفته لا يجد APT مفتاح توقيعه، فيرفض الوثوق به. الحلّ في تعليمات صاحب المستودع نفسه: كل مستودع يشرح أين يوضع مفتاحه. الطريقة الحديثة ملف مفتاح في /etc/apt/keyrings/ يُشار إليه في سطر المستودع بـsigned-by. أما الأمر القديم apt-key فمتروك في الإصدارات الحديثة. وإن لم تعد تحتاج المستودع، فاحذف ملفّه من /etc/apt/sources.list.d/.
«No space left on device» أثناء التحديث#
القرص ممتلئ، أو القسم /boot ممتلئ بنوى قديمة. انظر المساحة بـdf -h، ثم نظّف:
sudo apt clean
sudo apt autoremove
autoremove يحذف النوى القديمة ويُبقي الحالية والتي قبلها.



التعليقات