كثير من القادمين الجدد إلى نظام لينكس تجدهم يسألون “كيف أثبت كذا وكذا” يبحثون في غوغل ويدخل مواقع تزعم أنها نزودهم بطريقة لتثبيت كذا وينزل ملفات من هنا وهناك لا نعلم ماذا تحتوي ولا ماذا تؤثر على نظامه. مثلا كما يعلم الجميع أن نظام لينكس هو حرف ال L في LAMP (أي Linux Apache MySQL PHP) ومستخدمي ويندوز معتادون على جلب هذه الأشياء من خلال تنزيل برامج معينة تجمع وتسهل وتعد هذه الأشياء لويندوز مثل WAMP و XAMP المضحك المبكي أن هناك من يبحث عنها في لينكس متناسين أنها ساكن طبيعي في لينكس. لنتذكر أن توزيعات لينكس ما صنعت إلا لتجميع هذه المكونات وأشباهها وتيسير تثبيتها بطريقة مضمونة ومجربة وميسرة. لتثبيت مثلا لتثبيت أي من الحزم السابقة Apache أو MySQL أو PHP في توزيعتك المفضلة ما عليك إلا طلبها من مدير الحزم فيها وليس البحث عن توزيعة تضعها داخل توزيعتك. أيضا قبل أن تبحث عن برنامج بعينه مثلا برنامج
إن مدير الحزم في التوزيعة هو أهم مكون في التوزيعة وهو الذي يعطيها هويتها وعليك تعلم استعماله وسؤاله حتى ربما قبل سؤال غوغل.
الحزمة عبارة عن أرشيف يحتوي الملفات المطلوب توصيلها ومعها بيانات فوقية (تسمى ميتا) مثل رقم الإصدار والمزايا الموجودة فيها ومتطلبات التثبيت (الاعتماديات) والعلاقات بين الحزم كالتوافقية والإحلال والتعارض وماذا يشغل قبل وبعد التثبيت (سكربتات) …إلخ.
في توزيعات لينكس المختلفة لا يتم تناقل ملفات الحزم ثم ثتبيتها بل توضع هذه الملفات في مستودعات وعندما يطلب المستخدم حزمة معينة يتم جلب الحزمة تلقائيا من أحد مرايا المستودعات التي يثق بها المستخدم. والمرايا هي مواقع يكرر رفع حزم المستودع عليها (أي غالبا نفس الحزمة تكون مرفوعة بشكل مكرر على مئات الاستضافات). يتحكم المستخدم في المستودعات التي يريد أن يثق فيها وغالبا في التوزيعات الكبيرة مثل فيدورا وديبيان تحتوي مستودعات التوزيعة الرسمية عشرات الآلاف من الحزم البرمجية بحيث تغنيك عن الحاجة لإضافة مستودعات.
مدير الحزم يمكنه أن يساعدك على:
*memcache*
حزم rpm وهو نظام الحزم الذي بدأ من شركة ريدهات وتوزيعاتها وانتشر إلى توزيعات أخرى (مثل سوزة وماندريفا وغيرها) ثم أصبح المعيار الوحيد المعتمد من مؤسسة لينكس لإدارة الحزم وأصبح متاحا حتى في التوزيعات الأخرى التي لا تعتمده من باب التوافقية.
بعكس deb فإن حزم rpm تخرج إعداد الحزمة إلى مستوى آخر وتكتفي بتوصيلها دون إعدادها ولا تشغيلها لكنها قد تحمل معها إعدادات جاهزة للتشغيل. ملف rpm عبارة عن أرشيف cpio قياسي ذي حمولة مضغوطة حيث تدعم أكثر من خوارزمية. يتم إنتاج حزم rpm من ملف واحد يصف عملية البناء اسمه spec file.
وكما قلنا أنه عليك التعامل مع المستودعات وليس مع ملفات الحزم لذا عليك استعمال الأدوات الخاصة بذلك. الإصدارات الجديدة من فيدورا تستخدم dnf والقديمة و RHEL وسنتوس لا تزال تستخدم yum. أما سوزة فتستخدم zypper.
يمكن استعلام قاعدة بيانات الحزم المثبتة rpm db من خلال q أو query مثلا
rpm -q kernel rpm -q gnome-shell
يمكن عرض كل الحزم المثبتة من خلال a أي all متبوعة بنمط اختياري
rpm -qa rpm -qa 'py*doc*'
يمكن تخصيص طريقة العرض من خلال qf أي query format مثلا لطباعة حجم الحزمة ثم اسمها دون الإصدار ثم الإصدار وهكذا بالطريقة التي تريدها مما يسهل عليك مثلا ترتيب الحزم المثبتة حسب حجمها. مثلا الأمر التالي يطبع أكبر الحزم حجما
rpm --qf '%{size} %{name} %{version}-%{release}\n' -qa | sort -rn | head
وأنا غالبا ما آخذ نسخة من أسماء الحزمة دون إصداراتها وأحتفظ بها عندما أنتقل لنظام جديد
rpm --qf '%{name}\n' -qa | sort > rpms.txt
وعلى النظام الجديد انفذ نفس الآمر ثم أقارن بين الملفين (حزم النظام القديم وحزم النظام الجديد) من خلال meld أو diff -bu
تحتوي الحزم على معلومات فوقية تبين موقع البرنامج الرسمي ومن قام بعملية البناء ومتى وما هي رخصة البرنامج …إلخ وماذا يفعل البرنامج؟ كل هذا من خلال الاستعلام i أي information
$ rpm -qi eog Name : eog Version : 3.16.3 Release : 1.fc22 Architecture: x86_64 Install Date: Sun 06 Sep 2015 06:07:18 PM EEST Group : User Interface/Desktops Size : 9091882 License : GPLv2+ and GFDL Signature : RSA/SHA256, Fri 21 Aug 2015 07:36:06 PM EEST, Key ID 11adc0948e1431d5 Source RPM : eog-3.16.3-1.fc22.src.rpm Build Date : Mon 17 Aug 2015 11:53:54 PM EEST Build Host : buildvm-05.phx2.fedoraproject.org Relocations : (not relocatable) Packager : Fedora Project Vendor : Fedora Project URL : https://wiki.gnome.org/Apps/EyeOfGnome Summary : Eye of GNOME image viewer Description : The Eye of GNOME image viewer (eog) is the official image viewer for the GNOME desktop. It can view single image files in a variety of formats, as well as large image collections. eog is extensible through a plugin system.
يمكن عرض الملفات الموجودة في الحزمة من خلال l أي list أو من وثائق d أي documents أو من ملفات إعدادات c أي configurations أو ماذا تقدم من مزايا provides أو ماذا تتطلب من اعتماديات R أي Requires
rpm -ql httpd rpm -qc httpd rpm -qd httpd rpm --provides -q httpd rpm -R -q httpd
إذا كان ملف rpm موجود عندك لكنه غير مثبت يمكن استخلاص أي معلومة تريدها بإضافة p أو package file وهذا ينطبق على جميع الأوامر مثل استعلام المزايا المقدم أو المطلوبة أو الملفات الموجودة وليس على i فقط.
$ rpm -qip ~/Downloads/google-chrome-stable_current_x86_64.rpm Name : google-chrome-stable Version : 43.0.2357.125 Release : 1 Architecture: x86_64 Install Date: (not installed) Group : Applications/Internet Size : 187123138 License : Multiple, see https://chrome.google.com/ Signature : DSA/SHA1, Thu 11 Jun 2015 01:21:42 AM EEST, Key ID a040830f7fac5991 Source RPM : google-chrome-stable-43.0.2357.125-1.src.rpm Build Date : Thu 11 Jun 2015 12:54:47 AM EEST Build Host : precise64build1.chrome.corp.google.com Relocations : /opt Packager : Chrome Linux Team <chromium-dev@chromium.org> Vendor : Google Inc. URL : https://chrome.google.com/ Summary : Google Chrome Description : The web browser from Google Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier. $ rpm --provides -qp google-chrome-stable_current_x86_64.rpm google-chrome = 43.0.2357.125 google-chrome-stable = 43.0.2357.125-1 google-chrome-stable(x86-64) = 43.0.2357.125-1 $ rpm -R -qp google-chrome-stable_current_x86_64.rpm | grep -i gdk libgdk_pixbuf-2.0.so.0()(64bit) libgdk-x11-2.0.so.0()(64bit)
يمكن استعراض ماذا تغير على الحزمة (من ومتى وماذا)
$ rpm --changelog -q httpd | head * Wed Jul 15 2015 Jan Kaluza <jkaluza@redhat.com> - 2.4.12-4 - update to 2.4.16 * Tue Jul 07 2015 Joe Orton <jorton@redhat.com> - 2.4.12-3 - mod_ssl: use "localhost" in the dummy SSL cert if len(FQDN) > 59 chars * Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 2.4.12-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Fri Mar 27 2015 Jan Kaluza <jkaluza@redhat.com> - 2.4.12-1
ما هي الحزمة المثبتة التي توفر كذا؟
rpm -q --whatprovides system-release rpm -q --whatprovides 'mimehandler(application/illustrator)'
ما هي الحزمة المثبتة التي جاء منها الملف الفلاني أو البرنامج الفلاني؟
$ rpm -qf /etc/system-release fedora-release-22-1.noarch $ rpm -qf `which netstat` net-tools-2.0-0.31.20141124git.fc22.x86_64
فيدورا أعادت كتابة الجيل الجديد من yum واسمه dnf ليستعمل أفضل مزايا zypper وهي libsolv لكن الأجمل من ذلك هو أنها لم تغير شيء من الأوامر فقط ضع dnf مكان yum.
تثبيت حزمة ما أو ميزة ما تكون بمجرد كتابة yum أو dnf ثم مسافة ثم install ثم مسافة ثم أسماء الحزم أو المزايا المطلوب تثبيتها. كذلك إزالتها بنفس الطريقة لكن remove مكان install هكذا
yum install my-package yum install my-feature yum remove my-package
يمكن تمرير الخيار y لتجنب السؤال هل أنت متأكد معتبرا الجواب ضمنيا نعم.
يمكن تحديث النظام (كل الحزم المثبتة) بالأمر update ويمكن تحديد عدد من الحزم التي تريد تحديثها بعينها ويمكن استعمال الأنماط أيضا كأن تقول التي تبدأ بكذا فقط ويمكن استخدام الخيار x لاستثناء حزم بعينها من التحديث كما في هذه الأمثلة:
yum update -y yum update -y kernel akmod* yum update -y -x google-chrome-stable
يمكنك أيضا عرض تقرير عن التحديثات دون تطبيقها من خلال updateinfo summary
# yum updateinfo summary Loaded plugins: fastestmirror, langpacks, refresh-packagekit Updates Information Summary: available 8 Security notice(s) 21 Bugfix notice(s) 5 Enhancement notice(s) updateinfo summary done
إذا كنت تستخدم dnf تأكد من أن الخيار انتقاء أسرع وأقرب المرايا مفعل fastestmirror في dnf.conf الموجود في /etc/dnf/dnf.conf
بحيث يكون شكل الملف هكذا
[main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=true fastestmirror=1 keepcache=1
لاحظ أنني أيضا فعلت الاحتفاظ بالحزم التي ينزلها keepcache وذلك لأنه عند عمل ذلك سيتابع التنزيل حيث توقف في حال حدوث مشكلة (لكن عليك حذف ملفات الحزم من فترة لأخرى)
إذا كنت تستخدم yum تأكد من أن yum-fastestmirror مثبت
yum install yum-fastestmirror
repodata/repomd.xml
يشير هذا الملف للمعلومات الفوقية الموقعة حيث أن اسم الملف يحتوي بصمة checksum مثل sha256 بحيث يتغير اسم الملف بتغير محتواه مما يمنع المرايا الخبيثة من العبث بالمعلومات الفوقية كذلك يضمن لك أن تحصل على المعلومات الفوقية من أحدث المرايا (بعض المرايا أحدث من غيرها).
تأكد من تثبيت deltarpm حيث تمكنك من جلب الفروقات عوضا عن جلب حزم كاملة وبهذا توفر وقت التنزيل الطويل للحزم الكبيرة. عيب هذه الميزة أنها تزيد من استخدام المعالج عند إعادة بناء الحزمة من الفرق وإعادة البناء أيضا تستغرق وقت. إذا كان عندك إنترنت غير محدود وسرعة إنترنت عالية جدا جدا فلعلك تفضل إزالتها وليس تفعليها.
هل لديك حزمة (سواء مثبتة أو غير مثبتة) ولا تعرف ماذا تفعل؟ ما إصدارها؟ من أي موقع جلبت؟ ما حجمها؟ هل تريد وصف مطول لما تفعله؟ يمكنك سؤال مدير الحزم من خلال info ويمكنك استعمال الخيار C للعمل دون إنترنت لأجل السرعة.
# yum -C info screen Loaded plugins: fastestmirror, langpacks, refresh-packagekit Installed Packages Name : screen Arch : x86_64 Version : 4.1.0 Release : 0.18.20120314git3c2946.fc20 Size : 926 k Repo : installed From repo : updates Summary : A screen manager that supports multiple logins on one terminal URL : http://www.gnu.org/software/screen License : GPLv2+ Description : The screen utility allows you to have multiple logins on just one : terminal. Screen is useful for users who telnet into a machine or are : connected via a dumb terminal, but want to use more than just one : login. : : Install the screen package if you need a screen manager that can : support multiple logins on one terminal.
إذا لم تكن تعرف اسم الحزمة بالضبط هناك اكثير من الطرق للبحث عنها منها
يمكن سرد الحزم التي تطابق نمط معين من خلال الأمر list
مثلا الحزم التي يبدأ اسمها ب python-doc
# yum -C list 'python-doc*' Loaded plugins: fastestmirror, langpacks, refresh-packagekit Installed Packages python-docutils.noarch 0.11-1.fc20 @fedora Available Packages python-docker-py.x86_64 0.5.3-2.fc20 updates python-docker-registry-core.noarch 2.0.1-2.fc20 updates python-docopt.noarch 0.6.1-3.fc20 updates python-docs.noarch 2.7.5-6.fc20 updates python-docs-info.noarch 2.7.5-6.fc20 updates
يمكن البحث عن كلمات مفتاحية في وصف الحزم من خلال الامر search
مثلا للبحث عن كلمتي io و benchmark أو كلمتي python pdf
yum -C search io benchmark yum -C search python pdf
فيدورا وريدهات وسنتوس وغيرها تحتوي ميزات مثل حزمة system-release الافتراضية والتي في فيدورا تكون fedora-release وفي سنتوس تكون centos-release يمكنك السؤال عنها.
في لغة بيرل هناك مكتبة اسمها XML::Parser::Expat يمكنك سؤال مدير الحزم ما هي الحزمة التي توفر هذه المكتبة؟
في لغة nodejs يوجد حزمة npm اسمها less غير حزمة less في التوزيعة يمكنك أن تسأل مدير الحزم ما هي حزمة rpm التي تحتوي حزمة npm التي اسمها less؟
ما هي الحزمة التي يمكنها فتح ملفات برنامج الأوتوكاد؟ ما هي الحزمة التي يمكنها فتح ملفات adobe illustrator؟
طيب ما هي الحزمة التي تحتوي الأمر killall أو الأمر nc؟ ما هي الحزمة التي تحتوي مكتبة libz.so.1؟
في كل هذه الحالات نحن لا نبحث عن اسم الحزمة ولا عن وصفها بل عن ميزة أو ملف موجود داخلها في مثل هذه الحالات نستخدم الأمر whatprovides
وهذه هي الأوامر التي تقوم بذلك
yum -C whatprovides system-release yum -C whatprovides 'perl(XML::Parser::Expat)' yum -C whatprovides 'npm(less)' yum -C whatprovides 'mimehandler(image/vnd.dxf)' yum -C whatprovides 'mimehandler(application/illustrator)' yum -C whatprovides '*bin/killall' yum -C whatprovides '*bin/nc' yum -C whatprovides '*libz.so.1'
ديبيان (وبالتالي أوبنتو) يستخدم ملفات حزم خاصة به اسمها deb وهي عبارة عن أرشيف ar. يتم تحضيرها من خلال سكربتات متعددة ومتداخلة ومعقدة وغير موحدة توضع في مجلد اسمه debian إن لم يكن موجودا في كود الحزمة يتم حقنه فيها من خلال ملف الرقاع. ويتوفر برنامج alien كوسيلة لنقل حزم rpm القياسية المعتمدة من مؤسسة لينكس إلى النظام كوسيلة لاجتياز التوافقية مع معايير LSB.
إلى جانب أرشيف الملفات والمعلومات الفوقية تحتوي توزيعة ديبيان أداة لإعداد الحزمة بعد تثبيت ملفاتها اسمها debconf.
الأدوات المرتبطة بحزم ديبيان هي
مع الاسف إن كنت تحاول أتمتت تثبيت الخوادم دون متابعة unattended فإنك ستواجه مشكلة مع debconf حيث أنه أداة تفاعلية (رسومية إن شئت) لا يتم تثبيت الحزم إلا بأن تكون قائما عليها تتابعها وتتجاوب معها. للتخلص منه يمكنك وضعه في الطور غير التفاعلي من خلال DEBIAN_FRONTEND
DEBIAN_FRONTEND='noninteractive' apt-get install -y postfix
للبحث في الحزم المثبتة (تقريبا)
dpkg -l 'python-doc*' dpkg -l | grep -v '^ii'
لمعرفة معنى ii و un و rc انظر هذه الوثيقة
لمعرفة الملفات الموجودة في حزمة مثبتة مثل apache2
dpkg -L apache2
للقيام بالبحث النصي في وصف الحزم المثبتة
dpkg -S benchmark
البحث عن الحزمة المثبتة التي تمتلك ملف معين نعمل بحث نصي
dpkg -S /etc/lsb-release
لعرض معلومات عن حزمة مثبتة نستخدم الخيار p ثم اسم الحزمة
dpkg -p base-files
أما إذا كان معك ملف الحزمة فتستخدم أداة أخرى بخيار آخر
dpkg -I my-file.deb
لتثبيت حزمة ما نستخدم i ولأن غالبا ذلك يتطلب اعتماديات غير متوفرة نكرهه على ذلك ثم نصلحه
dpkg --force-all -i ~/Downloads/myfile.deb apt-get install -y -f
بعكس yum لا يقوم apt بتحديث معلوماته مع كل عملية بمعنى قد يبدأ بجلب حزم وبعد تنزيل أغلب الملفات وفي وسط العملية يكتشف بأن هذا الملف أصبح يتضارب مع ذاك أو أن هناك إصدار أحدث من كذا وتفشل العملية. لذا وقبل كل عملية عليك تحديث المعلومات الفوقية بالأمر
apt-get update
لتثبيت حزمة مثل خادم أباتشي استخدم install لكن كن مستعدا للإجابة على debconf الذي قد يعمل ويستجوبك هل تريد كذا أم كذا أم لا تعلم؟
apt-get install apache2
يمكن تمرير الخيار y لتجنب السؤال هل أنت متأكد معتبرا الجواب ضمنيا نعم. وبما أن المعلومات الفوقية قد تكون غير سليمة يفضل أن تكتب
apt-get update && apt-get install -y apache2
وحتى هذه لا تعمل دائما كما يجب وتتطلب بعض الحظ حيث أن عدد ملفات المعلومات الفوقية كبير جدا وموزع على خوادم مختلفة مما يعني أنها قد تختلف أثناء تنفيذ الأمر نفسه. إذا لم يحالفك الحظ حاول مرة أخرى لعل وعسى.
هناك نوعان من حذف الحزم حذف الحزم مع الإبقاء على إعداداتها وهذا يسمى remove وحذفها مع كل متعلقاتها من إعدادات وهذا يسمى purge.
apt-get purge apache2
يسمى تحديث الحزم في ديبيان وأوبنتو بالترقية upgrade وذلك لتمزيه عن تحديث المعلومات الفوقية update. وهو يقسم إلى نوعين أيضا upgrade و distupgrade وهذا الأخير اسمه غير موفق فهو لن يرقي إصدار التوزيعة بل فقط سيرقي الحزم المثبتة فيها. لتحديث جميع الحزم الموجودة عندك يمكنك أن تكتب
apt-get update && apt-get upgrade -y && -get upgrade distupgrade -y
ربما عليك تنفيذ الأمر السابق عدة مرات حتى تكون متأكد.
أحيانا ولأسباب مجهولة يتوقف apt عن العمل أو يكون عندك اعتماديات غير متحققة ونظام غير سليم يمكنك إصلاح ذلك بالأمر
apt-get install -y -f
في أحيان أخرى يكون عليك كتابة الأمر التالي لإصلاح الحزم المثبتة كي يعود apt للعمل
dpkg-reconfigure --force -a