كيفية إنشاء حزمة دبيان

Debian Package Creation Howto



1. مقدمة

أن تكون مسؤولاً عن آلة يعني الاهتمام بالأجهزة بالإضافة إلى مكونات البرنامج. كما رأينا في الحياة اليومية كمسؤول عن النظام ، من الأفضل تثبيت البرنامج كحزمة برامج بدلاً من مجموعة من الملفات المصدر. هذا يقلل من تكاليف صيانة النظام بشكل صحيح.

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







يعتمد تنسيق الحزمة على توزيع Linux الخاص بك. التنسيقات المحددة هي التالية:



deb

الحزم المستخدمة في: دبيان جنو / لينكس و أوبونتو و أرمبيان و لينكس النعناع و كنوبيكس



rpm

الحزم المستخدمة في: قبعة حمراء و فيدورا و CentOS و OpenSuse





tgz and txz

الحزم المستخدمة في: سلاكوير

tar.xz

الحزم المستخدمة في: قوس لينكس



يشرح هذا المستند باختصار كيفية إنشاء حزمة لـ Debian GNU / Linux. للحصول على معلومات مفصلة حول تنسيق حزمة دبيان والأدوات اللازمة للحفاظ على نظام لينكس مبني على `deb` ، يمكنك إلقاء نظرة على كتاب إدارة الحزم دبيان [dpmb] لإنشاء حزم لـ Debian GNU / Linux ، هذه المستندات ضرورية:

الحزمة التي سنعمل معها تسمى 'helloworld' ولها رقم الإصدار 0.1. لأغراض العرض ، يحتوي ببساطة على نص Python النصي الذي يُخرج الرسالة الشهيرة Hello، world !:

#!/usr/bin/python print ('Hello, world!') 

2. المتطلبات

2.1. مفتاح GPG

كخطوة 1 ، اجعل مفتاح GPG الخاص بك متاحًا. في وقت لاحق ، ستكون هناك حاجة إلى المفتاح لتوقيع الحزمة. ضع في اعتبارك أن الحزم غير الموقعة غير جديرة بالثقة ولا يمكن أن تكون جزءًا من عالم دبيان.

في حال لم يكن لديك مفتاح GPG ، قم بإنشاء واحد. يمكنك اتباع الخطوات الثلاث أدناه. يُنشئ الأمر الأول مفتاحًا جديدًا ، بينما يقوم الأمر الثاني بتصدير مفتاحك الجديد إلى ملف منفصل ، ويضيف الأمر الثالث المفتاح إلى حلقة مفاتيحك الشخصية.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/YOUR_NAME.gpg --export 'YOUR NAME' $ gpg --import ~/.gnupg/YOUR_NAME.gpg 

أثناء الإنشاء تأكد من صحة الاسم المعطى _YOUR NAME_. من الشائع استخدام مزيج من الاسم الأول واسم العائلة. يجب أن يكون هذا الاسم هو نفسه تمامًا في الحزمة ، ثم عند إنشاء ملف `control` لحزمة دبيان. لمزيد من المعلومات حول GPG ، ألق نظرة على دليل خصوصية GNU [gph].

2.2. سلسلة أدوات التغليف

لإنشاء حزمة دبيان بشفرة المصدر ، يلزم وجود حزم البرامج التالية على نظامك:

  • بناء أساسي
  • autoconf
  • أوتومايك
  • أوتوتولس ديف
  • dh- جعل
  • ديبهيلبير
  • devscripts
  • fakeroot
  • xutils
  • لينتيان
  • بناء

بصفتك مستخدم 'root' ، يمكنك تثبيت هذه باستخدام الأمر التالي:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3 تحضير البرنامج ليتم تعبئته

علينا إعداد دليل لبناء الحزمة. أنشئ دليلًا لإعداد البيئة التي سنبني فيها الحزمة:

$ mkdir -p ~./build/helloworld/0.1 

انسخ أرشيف `tar.gz` المضغوط في الدليل:

$ cp helloworld-0.1.tar.gz ~./build/helloworld/0.1 

غيّر إلى الدليل ، واستخرج الحزمة:

$ cd ~./build/helloworld/0.1 ~/build/helloworld/0.1$ tar -xzf helloworld-0.1.tar.gz 

الآن ، يحتوي الدليل على كل من الكود المصدري في دليل منفصل ، والأرشيف المضغوط:

~/build/helloworld/0.1$ ls helloworld-0.1 helloworld-0.1.tar.gz 

3. Debianization

في هذه المرحلة سنضيف الملفات الخاصة بحزمة دبيان. هذا هو سبب تسمية هذه الخطوة _Debianization_ من البرنامج. يتم ذلك في عدة خطوات فردية.

3.1 تحضير هيكل الحزمة

غيّر إلى الدليل الذي يحتفظ بكود مصدر الحزمة بالكامل. في مثالنا ، تحتوي الحزمة على الملف `helloworld.py` ، فقط:

~$ cd build/helloworld/0.1/helloworld-0.1 ~/build/helloworld/0.1/helloworld-0.1$ ls helloworld.py 

دعونا نضيف الملفات الخاصة بحزمة دبيان. يتم تشغيل الأداة 'dh_make'. يستخدم المحول '-e' العنوان المحدد كعنوان البريد الإلكتروني في الحقل 'Maintainer' لملف 'debian / control'. بناء الحزمة استخدم عنوان البريد الإلكتروني الخاص بك ، بدلاً من ذلك. ضع في اعتبارك استخدام نفس عنوان البريد الإلكتروني الذي يتوافق مع مفتاح GPG الخاص بك.

يستخدم المحول '-f' الملف المحدد كأرشيف المصدر الأصلي ، ويتخطى نسخ شجرة البرنامج الحالية إلى 'program.orig'.

~/build/helloworld/0.1/helloworld-0.1$ dh_make -e [email protected] -f ../helloworld-0.1.tar.gz 

في المطالبة ، يُطلب منك تحديد نوع الحزمة التي يجب إنشاؤها. لاختيار ثنائي واحد ، اكتب `s`.

Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch? [s/i/m/l/k/n] s Maintainer name : Frank Hofmann Email-Address : [email protected] Date : Sat, 04 Nov 2017 21:16:13 +0100 Package Name : helloworld Version : 0.1 License : blank Type of Package : Single Hit to confirm: Currently there is no top level Makefile. This may require additional tuning. Done. Please edit the files in the debian/ subdirectory now. You should also check that the helloworld Makefiles install into $DESTDIR and not in / . 

ينتج عن هذا دليل يسمى `debian`:

~/build/helloworld/0.1/helloworld-0.1$ ls debian helloworld.py 

يحتوي هذا الدليل على جميع الملفات الخاصة بالحزمة.

3.2 اضبط ملف التحكم

يحافظ الملف 'debian / control' على التبعيات المطلوبة لبناء_ الحزمة. باستخدام الأمر `dpkg-depcheck -d. / config` تحصل على قائمة بجميع الحزم المطلوبة. في حالتنا لا توجد حزمة أخرى مطلوبة لأن بايثون هي لغة مفسرة.

بعد ذلك ، يتعين علينا تحرير الملف `debian / control` وإضافة قيم خاصة بالحزمة. على سبيل المثال لدينا يبدو كما يلي:

Source: helloworld Section: python Priority: optional Maintainer: Frank Hofmann < [email protected] > Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Homepage: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Package: helloworld Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, python Description: Prints Hello World in Python Prints Hello World in Python 

3.3 اضبط ملف حقوق النشر

يحتوي الملف 'debian / copyright' على معلومات الترخيص لحزمة البرنامج. تم تحضيره للإصدار عبر رخصة جنو العمومية 2 (GPLv2). على سبيل المثال لدينا يبدو كما يلي:

Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: helloworld Source: http://www.efho.de/ Files: debian/* Copyright: 2017 Frank Hofmann < [email protected] > License: GPL-2+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. . This package is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. . You should have received a copy of the GNU General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU General Public License version 2 can be found in '/usr/share/common-licenses/GPL-2'. 

3.4. اضبط ملف التغيير

بعد معلومات حقوق النشر ، يجب تعديل الملف `debian / changelog`. في مثالنا نضيف الإصدار الأولي للمعلومات.

helloworld (0.1-1) unstable; urgency=low * Initial release -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

هذا كل ما نحتاجه حتى الآن - الآن يمكننا بناء الحزمة ، أخيرًا.


4. بناء الحزمة

لإنشاء الحزمة ، يتعين علينا الانتقال إلى دليل واحد وتشغيل الأمر التالي:

~/build/helloworld/0.1/helloworld-0.1$ dpkg-buildpackage -rfakeroot

يسمح الخيار '-rfakeroot' لـ 'dpkg-buildpackage' بتشغيل الأوامر كمستخدم ذي امتياز بمساعدة الأمر 'fakeroot'. يعد ذلك ضروريًا لإعداد الحزمة وإنشاء ملفات وأدلة.
ينتج عن الأمر أعلاه قائمة أطول برسائل الإخراج (معروضة هنا في بيئة اللغة الألمانية):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann < [email protected] > dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Information: Quellformat 3.0 (quilt) wird verwendet dpkg-source: Information: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.orig.tar.gz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.debian.tar.xz gebaut dpkg-source: Information: helloworld wird in helloworld_0.1-1.dsc gebaut debian/rules build dh build dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian/rules binary dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-gencontrol: Warnung: Feld Depends von Paket helloworld: unbekannte Substitutionsvariable ${shlibs:Depends} dh_md5sums dh_builddeb dpkg-deb: Paket helloworld wird in ../helloworld_0.1-1_amd64.deb gebaut. dpkg-genchanges <../helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: 'Frank Hofmann (Hofmann EDV) < [email protected] > ' 4096-Bit RSA Schlüssel, ID D431AC07, erzeugt 2014-09-05 

4.1 التحقق من صحة الحزمة

تهانينا - لقد نجحت في بناء حزمة دبيان - أجل! الآن ، دعونا نلقي نظرة فاحصة على الحزمة. وهنا يأتي دور 'لينتيان'. تقوم هذه الأداة بالتحقق من صحة الحزمة الخاصة بك من أجل اكتشاف الانتهاكات ضد القواعد الصارمة التي يتعين على حزم دبيان الوفاء بها.

لإجراء الاختبارات ، اكتب الأمر التالي:

lintian helloworld_0.1-1_amd64.deb 

لا تعثر الأداة على انتهاكات القواعد ولكن أيضًا الأخطاء الإملائية والأحرف الخاطئة. يطلب مفتاح '– pantic' أن يكون 'lintian' أكثر أهمية من المعتاد. كما ترى أدناه ، فإن 'lintian' غاضب بعض الشيء وقد اكتشف ثلاثة تحذيرات وخطأ واحد.

باستثناء التحذير الأول ، يمكننا بسهولة جعل 'lintian' سعيدًا وتعديل محتوى الحزمة وفقًا لمجموعة القواعد. يعني التحذير 'new-package-should-close-itp-bug' عدم وجود تقرير خطأ ضد حزمة ITP (تعني ITP _intended to package_). بالنسبة لحزمة دبيان العادية ، يجب إرسال تقرير بالأخطاء إلى bugtracker لحزمة ITP لإعلام الآخرين بأنك تنوي البدء في حزم هذا البرنامج.

4.2 تحذير: `readme-debian-contains-debmake-template

الغرض من الملف 'README.Debian' هو الاحتفاظ بملاحظات إضافية بخصوص هذه الحزمة. أنشأ 'dh_make' هذا الملف لنا:

helloworld for Debian --------------------- -- Frank Hofmann < [email protected] > Sat, 04 Nov 2017 21:16:13 +0100 

في مثالنا ليس لدينا معلومات إضافية ، لذا يمكننا حذف الملف.

4.3 تحذير: 'الوصف يبدأ بمسافات بادئة'

تم إطلاق هذا التحذير لأن الوصف الأطول لحزمتنا في الملف 'debian / control' يبدأ بأكثر من مسافة واحدة. بمجرد إزالة مسافة واحدة ، سيختفي التحذير.

4.4 خطأ: 'description-synopsis- مكرر'

تتطلب كل حزمة وصفًا قصيرًا وآخر أطول في 'debian / control'. ظهر هذا الخطأ لأن كلا الأوصاف متطابقة. بمجرد أن قمنا بتمديد الوصف الأطول ، ذهب الخطأ.


5. الروابط والمراجع

- [ddr] أندرياس بارث ، آدم دي كارلو ، رافائيل هيرتزوغ ، لوكاس نوسباوم ، كريستيان شوارتز ، إيان جاكسون: مرجع مطور دبيان
- [Dnmg] جوزيب رودين ، أوسامو أوكي: دليل صيانة دبيان الجديد
- [dpmb] أكسل بيكيرت وفرانك هوفمان: كتاب إدارة حزم دبيان
- [dpm] دليل سياسة دبيان
- [علبة] البرنامج التعليمي لتغليف دبيان
- [gph] دليل خصوصية جنو
- [lushpaiPackage] أليكس لوشباي: كيفية إنشاء حزمة دبيان من المصدر


6. شكر وتقدير

المؤلف يود أن يشكر أكسل بيكيرت و جيرولد روبريخت لدعمهم ، والنقاد أثناء إعداد هذا المقال.