طريقة انشاء حزمة ديبيان (الجزء الأول)
كتب بواسطة مسلم عادل بتاريخ 2008/09/12
يوجد عدة طرق لانشاء حزمة (package) خاصة بتوزيعة ديبيان او احد ابنائه، وبسبب تعدد الطرق، قررت أن أقسم هذا الموضوع الى جزئين، الأول هو انشاء حزمة ديبيان بطريقة بسيطة سهلة بدون الحاجة الى المعرفة في كيفية بناء البرامج من مصادرها وكيفية تحديد المستلزمات الخ…. والجزء الثاني سيحتوي على الشرح التفصيلي لبناء حزمة ديبيان بطريقة محترفة كما يفعلها الـ Maintainers
قبل أن تبدأ بالقراءة، أريد أن انبهك الى ملاحظة مهمة وهي:
طريقة انشاء الحزمة المتبعة في هذا الجزء طريقة غير رسمية وغير محترفة بالمرة، لذا لا تفكر حتى بأن تنشيء حزمة باستخدام هذه الطريقة وترسلها الى أحد مطوري ديبيان أو أوبونتو لانهم سيرمون الحزمة في وجهك (وانا كمان راح ارميها في وجهك اذا ارسلتي حزمة مبنية بهذه الطريقة
)
هذه الطريقة مذكورة فقط للاشخاص المبتدئين في لينوكس لانها طريقة سهلة، كما أنها تسهل عليهم تناقل البرامج بين بعضهم البعض.
ما هي حزمة ديبيان؟
حزمة ديبيان عبارة عن ملف مضغوط باستخدام برنامج اسمه ar.
لو احضرت اي حزمة ديبيان ونفذت الامر (ساستخدم حزمة ufw_0.16.2.3_all.deb كمثال):
arabian@laptop:~$ ar -x ufw_0.16.2.3_all.debسينتج ظهور 3 ملفات هي: control.tar.gz و data.tar.gz و debian-binary
- debian-binary يحتوي على اصدار debhelper الذي استخدم وقت بناء الحزمة وهو لا يهمنا.
- control.tar.gz يتحكم في الحزمة كان يحدد اسم الحزمة والمستلزمات واذا كان يجب تنفيذ شيء معين قبل تركيب الحزمة او بعد التركيب او عند ازالة الحزمة او قبل ازالتها.
- data.tar.gz ويحتوي هذا الملف على البرنامج المراد تركيبه
احدى الطرق الغير رسمية لانشاء حزمة ديبيان هي عبر انشاء الارشيفات الثلاثة السابقة الذكر واعادة ضغطها من جديد باستخدام ar. ولكن لن نتبع هذه الطريقة لانك في الحقيقة تقوم بانشاء الارشيف 4 مرات !! وفي حال احببت التعديل سيكون عليك فك ضغط كل شيء من جديد والتعديل (من الاخر، قصة طويلة عريضة مملة)
لهذا السبب ساستخدم طريقة ثانية في انشاء الحزمة (وهي أيضا غير رسمية).
سافترض اني مبرمج عظيم وقمت بعمل برنامج روعة اسمه helloworld! واريد توزيع البرنامج على الناس بصورة حزمة وليس بالكود المصدري.
لذا قبل أن ابدا بعمل الحزمة علي ان اعرف أين سيتم تثبيت البرنامج helloworld، وهل للبرنامج اضافات؟ (مثل ملفات مساعدة، ملفات اعداد، الخ…).
اذا لنلقي نظرة على البرنامج العظيم helloworld!
helloworld.conf عبارة عن ملف يحتوي على اعدادات البرنامج
helloworld.sh عبارة عن البرنامج العظيم نفسه (الذي يطبع hello world
)
helloworld.5 عبارة عن ملف المساعدة (man page) الخاصة بالبرنامج.
readme.txt عبارة عن ملف مساعدة عادي.
لمن يعرف كيف يعمل نظام ملفات اللينوكس (filesystem hierarchy) سيكون بامكانه اخباري عن اماكن هذه الملفات مباشرة، ومن لا يعرف، انصحه ان يترك هذا المقال الان وان يذهب ويقرا هذا الشيء لانه من الاساسيات ولن تستطيع المضي قدما في نظام التشغيل لينوكس اذا لم تكن تعرف ابسط شيء فيه.
على العموم وحتى ازيل الشك ممن دخل في نفسه الشك ساقول (امري لله ايش اعمل):
الملف helloworld.conf سيذهب الى /etc لانه عبارة عن ملف اعداد.
الملف helloworld.sh سيذهب الى /usr/bin لانه عبارة عن برنامج خاص بالمستخدم العادي وليس برنامج لادارة النظام.
اما الملف helloworld.5 فسيذهب الى /usr/share/man/man5 لأنه المكان الصحيح لهذا الملف المساعد.
واما الملف الاخير readme.txt فسيذهب الى مجلد التوثيق وهو /usr/share/doc
اذا بناء على هذه المعلومات نبدا العمل في انشاء الحزمة. قم بانشاء مجلد للعمل اسمه deb-devel (نفذ الاوامر القادمة)
arabian@laptop:~$ mkdir deb-devel
arabian@laptop:~$ cd deb-devel
arabian@laptop:~/deb-devel$ mkdir -p {DEBIAN,etc,usr/{bin,share/{doc,man/man5}}}
اعرف ان البعض سيسال عن هذا الامر العجيب mkdir -p {DEBIAN,etc,usr/{bin,share/{doc,man/man5}}}
الأمر mkdir اعتقد انه معروف للجميع، ولكني قمت باستخدامه بطريقة مختلفة قليلا حتى انشيء كل المجلدات مرة واحدة بدل ان اضطر كتابتها مرات عديدة، والامر السابق يكافيء:
mkdir DEBIAN
mkdir etc
mkdir usr
cd usr
mkdir bin
mkdir share
cd share
mkdir doc
mkdir man
cd man
mkdir man5
انظروا كم مرة كنت ساضطر ان اكرر الامر لو لم استخدمه بالطريقة السابقة.
الان تأكد ان البناء هو كما في الصورة ادناه:

وقم بتوزيع ملفات البرنامج helloworld داخله كما ذكرت في السابق.
طريقة تركيب الملفات الان انتهت، بقي علينا فقط تحديد بعض المعلومات الخاصة بالحزمة نفسها.
كما لاحظتم، قمت بانشاء مجلد اضافي اسمه DEBIAN وحاليا هو فارغ ولا يحتوي على شيء.
هذا المجلد هو خاص بمعلومات الحزمة نفسها، وليس له علاقة مباشرة بالبرنامج helloworld.
ادخل الى المجلد DEBIAN وانشيء داخله ملف باسم control وضع فيه الاتي:
Package: helloworld
Version: 0.0.0.0.1
Architecture: all
Maintainer: Muslim Adel
Installed-Size: 204
Depends: bash
Section: admin
Priority: optional
Homepage: http://www.linuxdocs-ar.com
Description: print hello world
Helloworld is a great program that prints a beautiful
message in your screen. This message is “Hello World!”
الشرح:
Package هو اسم الحزمة نفسها وليس اسم البرنامج الموجود بداخل الحزمة، فبعض الحزم تحتوي على مجموعة برامج.
Version هو رقم اصدار الحزمة والبرنامج
Architecture هي المنصة التي سيعمل عليه البرنامج، في هذه الحالة على كل المنصات ولكن اذا كان برنامج محدد باجهزة من نوع i386 استبدله
Maintainer الشخص المسؤول عن الحزمة
Installed-Size حجز ملفات الحزمة بعد تثبيتها، يمكنك استخدام الامر du لمعرفة حجم ملفاتك
Depends الحزم التي يعتمد عليها برنامجك، بما ان برنامجنا عبارة عن شل سكريبت بالتاكيد سيعتمد على وجود bash
Description وصف الحزمة وهذا مكون من جزئين اساسيين.
الجزء الاول وهو السطر الاول، يجب ان يكون قصير وعند انتهائه يجب وضع سطر جديد.
الجزء الثاني وهو السطر الذي يلي الاول يجب ان يبدا بمسافة وليس من اول السطر مباشرة.
انتهينا الان من انتهاء كل شيء، بقي انشاء الحزمة.
arabian@laptop:~$ dpkg-deb -b deb-devel helloworld_0.0.0.0.1-1_all.deb
dpkg-deb: building package `helloworld' in `helloworld_0.0.0.0.1-1_all.deb' . قد تظهر بعض التحذيرات اثناء انشاء الحزمة ولكن لا تلقي لها بال الان.
ايضا تعمدت ترك بعض الامور غير مشروحة مثل القسم Priority و Section وايضا لماذا اضفت -1_all عند انشاء الحزمة.
هذه الامور كلها ستشرح في الجزء الثاني من هذا الموضوع ان شاء الله.
اذا اردت تركيب الحزمة الجديدة نفذ:
root@laptop:~# dpkg -i helloworld_0.0.0.0.1-1_all.deb
(Reading database ... 177483 files and directories currently installed.)
Preparing to replace helloworld 0.0.0.1 (using helloworld_0.0.0.0.1-1_all.deb) ...
Unpacking replacement helloworld ...
Setting up helloworld (0.0.0.1) ...
ولتشاهد بناء الملفات في الجديدة بعد تركيبها نفذ:
root@laptop:~# dpkg -L helloworld
/.
/etc
/etc/heloworld.conf
/usr
/usr/share
/usr/share/doc
/usr/share/doc/readme.txt
/usr/share/man
/usr/share/man/man5
/usr/share/man/man5/helloworld.5.gz
/usr/bin
/usr/bin/helloworld.sh
في النهاية اترككم مع رابط للمجلد deb-devel لتحميله وتجربة انشاء حزمة عليه.
deb-devel.tar.gz
September 16th, 2008 on %H:%M
ممتاز
والله وفرت عليا حاجات كتير وبجد شكرا جدا جدا
February 2nd, 2009 on %H:%M
اين الجزء الثاني من المقال؟
April 1st, 2009 on %H:%M
أين فعلا الجزء الثانى؟
April 20th, 2010 on %H:%M
السلام عليكم
مقال رائع اخي مسلم جزاك الله خيرا
بإنتظار الجزء الثاني بفارغ الصبر
August 27th, 2010 on %H:%M
رااااااااااااااااااااائع لكن يا ليت الجزء الثانى من المقال يظهر سريعا