Product SiteDocumentation Site

فصل 15. إنشاء حزمة دبيان

15.1. إعادة بناء حزمة من المصدر
15.1.1. الحصول على المصادر
15.1.2. إجراء التغييرات
15.1.3. بدء إعادة البناء
15.2. بناء حزمتك الأولى
15.2.1. الحزم الفوقية أو الحزم الزائفة
15.2.2. أرشيف ملفات بسيط
15.3. إنشاء مستودع حزم للأداة APT
15.4. كيف تصبح مشرف حزم
15.4.1. تعلم إنشاء الحزم
15.4.2. عملية القبول
من الشائع جداً، بين مديري النظم الذين يتعاملون مع حزم دبيان بشكل منتظم، أن يصلوا إلى مرحلة يحتاجون فيها لإنشاء حزم خاصة بهم، أو لتعديل حزمة سابقة. يهدف هذا الفصل للإجابة عن أكثر الأسئلة شيوعاً في هذا المجال، وتقديم العناصر اللازمة للاستفادة من بنية دبيان التحتية بأفضل طريقة ممكنة. ومع بعض الحظ، قد تشعر ‒بعد تجربة مهاراتك في الحزم المحلية‒ بالحاجة للغوص أكثر من ذلك وتنضم لمشروع دبيان نفسه!

15.1. إعادة بناء حزمة من المصدر

تحتاج إعادة بناء حزمة ثنائية في عدد من الظروف. في بعض الحالات، يحتاج مدير النظام ميزة برمجية تتطلب ترجمة البرنامج من المصدر، مع استخدام خيار ترجمة معين؛ وفي حالات أخرى، لا يكون البرنامج المُحزَّم في النسخة المُبّتة من دبيان حديثاً بما يكفي. في الحالة الأخيرة، سيعمد مدير النظام عادة لبناء حزمة جديدة مأخوذة من نسخة دبيان أحدث — مثل الاختبارية أو حتى غير المستقرة — بحيث تعمل هذه الحزمة الجديدة في توزيعته المستقرة؛ تدعى هذه العملية ”بالنقل الخلفي“ (backporting). كالعادة، عليك الانتباه، قبل أن تجري هذه المهمة، إلى التحقق من أن أحداً لم يسبقك إليها — نظرة سريعة على صفحة متتبع حزم دبيان الخاصة بتلك الحزمة ستعطيك هذه المعلومة.

15.1.1. الحصول على المصادر

تبدأ إعادة بناء حزمة دبيان بالحصول على الشفرة المصدرية. أسهل طريقة هي استخدام الأمر apt-get source source-package-name. يحتاج هذا الأمر لإضافة سطر deb-src في الملف /etc/apt/sources.list، وتحديث ملف الفهارس (عبر apt-get update). يجب أن تكون هذه الشروط محققة مسبقاً إذا اتبعت التعليمات من الفصل الذي يتحدث عن إعدادات APT (انظر قسم 6.1, “تعبئة الملف sources.list). لكن لاحظ أنك سوف تنزّل الحزم المصدرية من نسخة دبيان المحددة في سطر deb-src. إذا كنت تريد الحصول عليها من نسخة دبيان أخرى، قد تضطر لتنزيلها يدوياً من مرآة دبيان أو من موقع الوب. هذا يعني تنزيل ملفين أو ثلاثة (امتداداتها *.dsc — أي Debian Source Control — و *.tar.comp وأحياناً *.diff.gz أو *.debian.tar.comp — حيث تأخذ comp إحدى القيم gz، ‏bz2 أو xz حسب أداة الضغط المستخدمة)، بعدها استدعاء الأمر dpkg-source -x file.dsc. إذا كان الوصول للملف *.dsc ممكناً بشكل مباشر من عنوان URL، فيمكنك استخدام طريقة أبسط من هذه للحصول على جميع الملفات، وهي استخدام الأمر dget URL. يجلب هذا الأمر (الذي تجده في الحزمة devscripts) ملف *.dsc من العنوان المحدد، بعدها يحلل محتوياته، ويحضر الملف أو الملفات التي يشار إليها فيه. بعد تنزيل كل شيء، سوف يفك الضغط عن الحزمة المصدرية (ما لم تستخدم الخيار -d أو --download-only).

15.1.2. إجراء التغييرات

أصبح مصدر الحزمة متوفراً الآن في مجلد اسمه يتألف من اسم الحزمة المصدرية وإصدارها (مثلاً، samba-4.1.17+dfsg)؛ سنجري تعديلاتنا المحلية في هذا المجلد.
أول شيء تفعله هو تغيير رقم إصدار الحزمة، حتى تميّز الحزم المعاد بناؤها عن الحزم الأصلية التي توفرها دبيان. على فرض أن الإصدار الحالي هو 2:4.1.17+dfsg-2، يمكننا إنشاء الإصدار 2:4.1.17+dfsg-2falcot1، الذي يبيّن منشأ الحزمة بوضوح. هذا يجعل رقم إصدار الحزمة أعلى من الإصدار الذي توفره دبيان، بحيث يمكن تثبيت الحزمة بسهولة كتحديث للحزمة الأصلية. أفضل طريقة جراء هذا التغيير هي استخدام الأمر dch‏ (Debian CHangelog) من الحزمة devscripts، عبر استدعائه بالشكل dch --local falcot مثلاً. سيستدعي هذا الأمر محرر نصوص (sensible-editor — يجب أن يكون هذا محررك الافتراضي إذا كان مذكوراً في أحد متغيري البيئة VISUAL أو EDITOR ، وإلا فسوف يستدعى المحرر الافتراضي) ليسمح لك بتوثيق الاختلاف الذي تقدمه هذه الإصدارة. يظهر لنا هذا المحرر أن dch قد غيّر debian/changelog بالفعل.
عندما تحتاج تغيير خيارات البناء، يجب إجراء التغيير في debian/rules، الذي يقود الخطوات المختلفة في عملية بناء الحزمة. في أبسط الحالات، ستجد السطور التي تتعلق بالإعدادات الافتراضية (./configure …) أو عملية البناء الفعلية ($(MAKE) … or make …) بسهولة. إذا لم تُستَدعى هذه الأوامر صراحة، فالأغلب أن هناك أمر صريح آخر يستدعيها، وفي تلك الحالة عليك الرجوع إلى وثائق تلك الأوامر حتى تعرف طريقة تغيير السلوك الافتراضي. قد تحتاج في الحزم التي تستخدم الأمر dh لتعديل سلوك الأمرين dh_auto_configure وdh_auto_build (انظر صفحات الدليل الخاصة بهما لمعرفة طريقة عمل هذا).
قد تحتاج تحديث الملف debian/control أيضاً اعتماداً على طبيعة التغييرات المحلية التي أجريتها على الحزمة، يحوي هذا الملف وصفاً للحزم المولّدة. على وجه الخصوص، يحوي هذا الملف سطور Build-Depends تتحكم بقائمة الاعتماديات التي يجب تلبيتها عند بناء الحزمة. تشير هذه الاعتماديات غالباً إلى نسخ الحزم الموجودة في التوزيعة التي أتت منها الحزمة المصدرية، لكنها قد لا تكون متوفرة في التوزيعة المستخدمة للبناء. لا توجد طريقة مؤتمتة تبيّن هل الاعتمادية حقيقية أم أنها محددة فقط لضمان محاولة البناء باستخدام آخر نسخة من المكتبة — هذه هي الطريقة الوحيدة المتاحة لإجبار البانيات الآلية (autobuilder) على استخدام نسخة معينة من الحزمة أثناء البناء، لذلك يستخدم مشرفو دبيان في كثير من الأحيان اعتماديات لها أرقام محددة.
إذا كنت متأكداً أن هذه الاعتماديات صارمة أكثر من اللازم، يمكنك تخفيفها محلياً. ستساعدك قراءة الملفات التي توثق الطريقة المعيارية لبناء البرنامج — هذه الملفات تدعى INSTALL غالباً — على معرفة الاعتماديات المناسبة. في الحالة المثالية، يجب أن تتمكن من تلبية الاعتماديات ضمن التوزيعة المستخدمة للبناء؛ إذا لم تتمكن من ذلك، ستبدأ عملية تعاودية، حيث يجب نقل الحزم المذكورة في الحقل Build-Depends خلفاً قبل أن تتمكن من نقل الحزمة المستهدفة. قد لا تحتاج بعض الحزم أن تنقلها خلفياً، ويمكن تثبيتها كما هي أثناء عملية البناء (إحدى الأمثلة البارزة هي debhelper). لاحظ أن عملية النقل الخلفي قد تتعقد سريعاً إذا لم تكن حذراً. لذلك، يجب تقليل المنقولات الخلفية إلى أقل ما يمكن.

15.1.3. بدء إعادة البناء

بعد تطبيق كل التغييرات التي تحتاجها إلى الكود المصدري، يمكننا توليد الحزمة الثنائية (ملف .deb). يدير الأمر dpkg-buildpackage العملية كلها.

مثال 15.1. إعادة بناء حزمة

$ dpkg-buildpackage -us -uc
[...]
قد يفشل الأمر السابق إذا لم تُحدَّث حقول Build-Depends، أو إذا لم تُثبَّت الحزم المناسبة. في هذه الحالات، يمكن تجاوز عملية التحقق عبر تمرير الخيار -d إلى dpkg-buildpackage. لكن تجاهل هذه الاعتماديات صراحة يعرضك لخطر إخفاق عملية البناء في مرحلة لاحقة. وأسوأ من ذلك، قد يبدو أن الحزمة تبنى بشكل صحيح لكنها لا تعمل بشكل سليم لاحقاً: فبعض البرامج تعطّل بعض مزاياها آلياً إذا لم تعثر على إحدى المكتبات المطلوبة أثناء البناء.
في معظم الأحيان، يستخدم مطورو دبيان برنامجاً عالي المستوى مثل debuild؛ الذي يستدعي dpkg-buildpackage كالعادة لكنه يضيف أيضاً استدعاءً لبرنامج يجري عدة فحوصات للتحقق من اتفاق الحزم المولّدة مع سياسة دبيان. كما يُنظِّف هذا السكربت البيئة بحيث لا ”تُلوّث“ متغيرات البيئة المحلية عملية بناء الحزمة. الأمر debuild هو أحد الأدوات من المجموعة devscripts، التي تتناسق مع بعضها وتشترك في بعض الإعدادات حتى تسهِّل مهمة مشرف الحزمة.