المدوّنة · الخوادم ولينكس

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

· 7 دقائق قراءة

دليل 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 يحذف النوى القديمة ويُبقي الحالية والتي قبلها.

المصادر#

التعليقات

كن أول من يشارك رأيه أو تجربته.

أضف تعليقاً أو سؤالاً

سجّل الدخول لتعجب بالتعليقات المفيدة وترفعها لأعلى النقاش. سجّل الدخول

لا يُنشر، ولا نرسل إليه شيئاً.

يظهر التعليق بعد مراجعته. الروابط لا تُفعَّل.

تبني موقعاً عربياً؟

سكربتات وقوالب وإضافات وخوادم — مصمّمة للمواقع العربية.

تصفّح المنتجات