يناير 17، 2011

طرق تجميد اصدارات الحزم على دبيان

بحكم اقتراب صدور دبيان غنو/لينوكس (Debian GNU/Linux) و دبيان غنو/كي.فري.بي.إس.دي (Debian GNU/kFreeBSD) أردت الحصول على آخر التحديثات و كانت ضمنها تحديثات تصحيحية (بمعنى بسيطة) لأبون أوفس الحزمة المكتبية؛ رغم ذلك عليك تحميل كل حزمها؛ العملية مزعجة بالنسبة لي لثلاثة أسباب:
1. تحميل ما يزيد عن 65ميجيا لأكثر من مرة (لاستخدامي لعدد من الألات الافتراضية الدبيانية)
2. تثبيتها يأخد دقيقتين أو ثلاثة و نشاط كبير للقرص الصلب. (في غنو/لينوكس تعودنا السرعة و الفعالية)
3. لن أستخدمها على الإطلاق.

تحميل الفوارق متاح على دبيان مثل فيدورا لكن لا أريد أن أشتك فيها إن ظهرت أية علل في النظام لأنه ما زال قيد التطوير و التصحيح.

الحل الذي أستخدمه دائما هو تحديد كل الحزم للترقية باستثناء تلك التي لها علاقة بأوبن أوفيس، العملية يدويا و بواسطة برنامج مدير الحزم الرسومي Synaptic. اليوم أردت أن أقوم بشيء مختلف هو تجميد الإصدار كي لا يحضى بالترقية إلى بعد صدور دبيان 6. هذه التجرية كلفني بحث و تجارب لقرابة الساعتين.

سأبد بالخلاصة. هناك ثلاثة أدوات يمكن استخدماها لتسيير الحزمة (تثبيتها، حدفها،...) على دبيان و هي:
  • apt-get : الأداة الإفتراضية تعمل من على سطر الأوامر.
  • aptitude : أيضا مثبتة بشكل افتراضي على دبيان. كانت افتراضية على أبونتو أيضا، لكن تمت إزالتها. هذه الأداة أذكى من apt-get و هي تعمل من على سطر الأوامر أيضا.
  • synaptic : أداة بواجهة رسومية لمن يخاف سطر الأوامر. سيتم الاستغناء عنها لاحقا في اصدارات مقبلة لأبونتو و ستعوض بـ"مركز برمجيات أبونتو"

من خلال تجربتي مع دبيان و أبونتو، النقطتين الوحيدتين المترسختين في ذهني بخصوص تلك الأدوات هي:

الآن كيف يمكن تجميد اصدار حزمة ما كي تمنع ترقيتها على دبيان؟

أولا، سأفترض أننا نريد تجميد حزمة python-uno إحدى اعتمادات أوبن أوفيس.
ثانيا، هناك ثلاثة طرق تختلف حسب الأداة المستخدمة:


1. تجميد الحزم باستخدام أداة dpkg (تقابل أداة rpm على فيدورا)

echo "python-uno hold" | dpkg --set-selections

كي نتأكد أنها فعلا أصبحت متجمدة سنجرب:
dpkg --get-selections | grep python-uno

و ستكون النتيجة كما يلي:
python-uno                                  hold

الآن، عندما سنقوم بالترقية مستقبلا باستخدام الأداة apt-get (مثال: apt-get upgrade) سيظهر في مخرجاتها:
xx upgraded, xx newly installed, xx to remove and xx not upgraded

xx يستبدل بعدد الحزم.

الآن، للرجوع عن التجميد سنستخدم:
echo "python-uno install" | dpkg --set-selections

و لنتأكد أنها فعلا أصبحت قابلة للترقية:
dpkg --get-selections | grep python-uno

و ستكون النتيجة كما يلي:

python-uno                                  install


2. تجميد الحزم باستخدام أداة aptitude

aptitude hold python-uno

 كي نتأكد أن عملية التجميد أصبحت مفعلة سنجرب:
aptitude search python-uno

و ستكون النتيجة كما يلي:
ih     python-uno                               -   Python-UNO bridge

حرفي ih يدلان على أن الحزمة مثبتة Installed و مجمدة/محبوسة Hold.

للرجوع عن التجميد سننفذ:
aptitude unhold python-uno

مستقبلا عند الترقية باستخدام aptitude upgrade مثلا، فإنها ستراعي حالة التجميد/عدم التجميد لكل الحزم. (هي تفعل ذلك دائما، كي لا يفهم العكس)


3. تجميد الحزم باستخدام الأداة الرسومية synaptic
من على synaptic و بعد تحديد الحزم(ـة) نختار Lock Version من على القائمة Package كما في الصورة أدناه.


هذا كل شيء في ما يخص تجميد الإصدارات. و للتذكير مرة ثانية، هذه الأدوات - إن لم يتم تصحيح تصرفها دون أن أعلم بذلك أو لخطأ مني - لا تكترث لتجميدات بعضها البعض.


معلومات إضافية للمتقدمين:

Synaptic عند تجميد حزمة ما، تنشئ ملف preferences على /var/lib/synaptic/ و تضع فيه معلومات تلك الحزمة على شكل:
Package: python-uno
Pin: version 1:3.2.1-10
Pin-Priority: 1001

المعلومات الملونة تتغير حسب الحزمة. و يمكن ملء ذلك الملف يدويا إذا أردنا على هذه الشاكلة:

dpkg-query -W -f='Package: ${Package}\nPin: version ${Version}\nPin-Priority: 1001\n\n' python-uno >> /var/lib/synaptic/preferences



أيضا للحصول على كل الحزمة المثبتة التي تبدأ بكلمة openoffice سننفذ:
dpkg --get-selections | grep -i openoffice

و لتنضيف المخرجات أكثر سننفذ:
dpkg --get-selections | grep -i openoffice | cut -f1

الطريقة الثانية للحصول على قائمة الحزم تلك (من بين طرق أخرى ربما أفضل) هي:
dpkg -l "openoffice*" | grep ^ii
أو
dpkg -l | grep -i openoffice | grep ^ii


أيضا:
كل معلومات الحزم (الاسم، الاصدار، الوصف، الاعتمادات،...) مخزنة على ملف نصي يدعى status متواجد داخل /var/lib/dpkg
مثال:
cat /var/lib/dpkg/status | less

المزيد من التفاصيل على صفحات التوثيق:

مصادر أخرى مفيدة:


ليست هناك تعليقات:

إرسال تعليق