डेबियन पैकेज निर्माण HowTo

Debian Package Creation Howto



1. प्रस्तावना

मशीन के लिए जिम्मेदार होने का अर्थ है हार्डवेयर के साथ-साथ सॉफ्टवेयर घटकों का भी ध्यान रखना। जैसा कि एक सिस्टम एडमिनिस्ट्रेटर के रूप में हर दिन के जीवन में देखा जाता है, सॉफ्टवेयर को सॉफ्टवेयर पैकेज के रूप में स्थापित करना बेहतर होता है, न कि सोर्स फाइलों के एक समूह के रूप में। यह सिस्टम को ठीक से बनाए रखने के लिए लागत को कम करता है।

आपके पसंदीदा वितरक से उपलब्ध पैकेज पैकेज रखरखाव द्वारा मान्य और निरीक्षण किए जाते हैं। उन्होंने सॉफ्टवेयर का परीक्षण किया, और आश्वासन दिया कि यह वितरण में उपलब्ध अन्य सॉफ्टवेयर पैकेजों के लिए उपयुक्त है। इसके अलावा, पैकेज को पैकेज मेंटेनर से GPG कुंजी के साथ हस्ताक्षरित किया जाता है। यह पैकेज की अखंडता की गारंटी देता है और आपको दिखाता है कि पैकेज एक विश्वसनीय स्रोत से है।







पैकेज प्रारूप आपके लिनक्स वितरण पर निर्भर करता है। चयनित प्रारूप निम्नलिखित हैं:



deb

पैकेज में इस्तेमाल किया: डेबियन जीएनयू/लिनक्स , उबंटू , आर्मबियन , लिनक्स टकसाल , नोप्पिक्स



rpm

पैकेज में इस्तेमाल किया: लाल टोपी , फेडोरा , Centos , ओपनस्यूज





tgz and txz

पैकेज में इस्तेमाल किया: स्लैकवेयर

tar.xz

पैकेज में इस्तेमाल किया: आर्क लिनक्स



यह दस्तावेज़ बताता है कि डेबियन जीएनयू/लिनक्स के लिए संक्षेप में पैकेज कैसे बनाया जाए। डेबियन पैकेज प्रारूप और `डेब` आधारित लिनक्स सिस्टम को बनाए रखने के लिए उपकरणों के बारे में विस्तृत जानकारी के लिए आप डेबियन पैकेज मैनेजमेंट बुक पर एक नज़र डाल सकते हैं। [डीपीएमबी] डेबियन जीएनयू/लिनक्स के लिए पैकेज बनाने के लिए ये दस्तावेज आवश्यक हैं:

हम जिस पैकेज के साथ काम करेंगे उसका नाम 'helloworld' है और इसका वर्जन नंबर 0.1 है। प्रदर्शन उद्देश्यों के लिए इसमें केवल एक पायथन लिपि शामिल है जो प्रसिद्ध संदेश हैलो, वर्ल्ड !:

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

2. आवश्यकताएँ

२.१. जीपीजी कुंजी

चरण 1 के रूप में, अपनी GPG कुंजी उपलब्ध रखें। बाद में, पैकेज पर हस्ताक्षर करने के लिए कुंजी की आवश्यकता होगी। ध्यान रखें कि अहस्ताक्षरित पैकेज अविश्वसनीय हैं और डेबियन ब्रह्मांड का हिस्सा नहीं हो सकते हैं।

यदि आपके पास अभी तक GPG कुंजी नहीं है तो एक बना लें। आप नीचे दिए गए तीन चरणों का पालन कर सकते हैं। पहला कमांड एक नई कुंजी उत्पन्न करता है, दूसरा आपकी नई कुंजी को एक अलग फ़ाइल में निर्यात करता है, और तीसरा आपकी व्यक्तिगत कीरिंग में कुंजी जोड़ता है।

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

निर्माण के दौरान सुनिश्चित करें कि दिया गया नाम _Your NAME_ सही है। प्रथम नाम और अंतिम नाम के संयोजन का उपयोग करना आम बात है। डेबियन पैकेज की `कंट्रोल` फाइल बनाते समय, यह नाम पैकेज में बिल्कुल वैसा ही होना चाहिए। GPG के बारे में अधिक जानकारी के लिए GNU गोपनीयता पुस्तिका [gph] देखें।

२.२. पैकेजिंग उपकरण श्रृंखला

स्रोत कोड के साथ डेबियन पैकेज बनाने के लिए आपके सिस्टम पर निम्नलिखित सॉफ्टवेयर पैकेज की आवश्यकता है:

  • निर्माण आवश्यक
  • ऑटोकॉन्फ़
  • ऑटोमेक
  • ऑटोटूलस-देव
  • डीएच-मेक
  • देभल्पर
  • देवलिपि
  • फ़ेकरूट
  • xutils
  • लिंटियन
  • बिल्डर

उपयोगकर्ता `रूट` के रूप में आप निम्न आदेश का उपयोग करके इन्हें स्थापित कर सकते हैं:

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

२.३. पैक करने के लिए सॉफ्टवेयर तैयार करें

हमें पैकेज बनाने के लिए एक निर्देशिका तैयार करनी होगी। उस वातावरण को तैयार करने के लिए एक निर्देशिका बनाएँ जिसमें हम पैकेज का निर्माण करेंगे:

$ 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_ नाम दिया गया है। यह कई एकल चरणों में किया जाता है।

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` दिए गए पते का उपयोग `डेबियन/कंट्रोल` फ़ाइल के `रखरखाव` फ़ील्ड में ईमेल पते के रूप में करता है। पैकेज बनाने के बजाय, अपने स्वयं के ईमेल पते का उपयोग करें। ध्यान रखें कि उसी ईमेल पते का उपयोग करें जो आपकी 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 / . 

इसका परिणाम `डेबियन` नामक निर्देशिका में होता है:

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

इस निर्देशिका में सभी पैकेज-विशिष्ट फ़ाइलें हैं।

३.२. नियंत्रण फ़ाइल समायोजित करें

फ़ाइल `डेबियन/कंट्रोल` उन निर्भरताओं को रखती है जिनकी जरूरत है _to build_ पैकेज। कमांड `dpkg-depcheck -d ./configure` का उपयोग करके आपको सभी आवश्यक पैकेजों के साथ एक सूची प्राप्त होती है। हमारे मामले में आगे किसी पैकेज की आवश्यकता नहीं है क्योंकि पायथन एक व्याख्या की गई भाषा है।

इसके बाद, हमें फ़ाइल `डेबियन/कंट्रोल` को संपादित करना होगा और पैकेज-विशिष्ट मान जोड़ना होगा। हमारे उदाहरण के लिए यह इस प्रकार दिखता है:

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 

३.३. कॉपीराइट फ़ाइल समायोजित करें

फ़ाइल `डेबियन/कॉपीराइट` में सॉफ़्टवेयर पैकेज के लिए लाइसेंस जानकारी है। इसे GNU पब्लिक लाइसेंस 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'. 

३.४. चैंज फ़ाइल को समायोजित करें

कॉपीराइट जानकारी के बाद फ़ाइल `डेबियन/चेंजलॉग` को समायोजित करना होगा। हमारे उदाहरण में हम प्रारंभिक रिलीज की जानकारी जोड़ते हैं।

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 

४.१. पैकेज का सत्यापन

बधाई हो - आप डेबियन पैकेज बनाने में सफल रहे - हाँ! अब, पैकेज पर करीब से नज़र डालते हैं। यहाँ, `लिंटियन` चलन में आता है। डेबियन पैकेजों को पूरा करने वाले सख्त नियमों के उल्लंघन का पता लगाने के लिए यह उपकरण आपके पैकेज की पुष्टि करता है।

परीक्षण चलाने के लिए निम्न आदेश में टाइप करें:

lintian helloworld_0.1-1_amd64.deb 

टूल को नियम उल्लंघन नहीं बल्कि वर्तनी की त्रुटियां और गलत वर्ण भी मिलते हैं। स्विच `-पेडेंटिक` `लिंटियन` को सामान्य से अधिक महत्वपूर्ण होने के लिए कहता है। जैसा कि आप नीचे देख सकते हैं `लिंटियन` थोड़ा क्रोधी है और उसने तीन चेतावनियों और एक त्रुटि की खोज की है।

पहली चेतावनी को छोड़कर हम आसानी से `लिंटियन` को खुश कर सकते हैं और नियम सेट के अनुसार पैकेज सामग्री को समायोजित कर सकते हैं। चेतावनी `नया-पैकेज-चाहिए-बंद-आईटीपी-बग` का अर्थ है कि आईटीपी पैकेज के खिलाफ कोई बग रिपोर्ट नहीं है (आईटीपी का अर्थ है _पैकेज के लिए इरादा_)। एक नियमित डेबियन पैकेज के लिए एक बग रिपोर्ट बगट्रैकर को पैकेज आईटीपी के लिए भेजी जानी चाहिए ताकि दूसरों को सूचित किया जा सके कि आप इस सॉफ़्टवेयर की पैकेजिंग शुरू करने का इरादा रखते हैं।

४.२. चेतावनी: `रीडमे-डेबियन-कंटेन्स-डेबमेक-टेम्पलेट

फ़ाइल `README.Debian` का उद्देश्य इस पैकेज के संबंध में अतिरिक्त नोट्स रखना है। `dh_make` ने हमारे लिए यह फ़ाइल बनाई:

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

हमारे उदाहरण में हमारे पास अतिरिक्त जानकारी नहीं है, इसलिए हम फ़ाइल को हटा सकते हैं।

4.3. चेतावनी: `विवरण-शुरुआत-साथ-अग्रणी-रिक्त स्थान`

यह चेतावनी इसलिए दी गई है क्योंकि `डेबियन/कंट्रोल` फ़ाइल में हमारे पैकेज का लंबा विवरण एक से अधिक स्थान से शुरू होता है। जैसे ही हम एक भी स्थान हटाते हैं, चेतावनी गायब हो जाएगी।

४.४. त्रुटि: `विवरण-सारांश-दोहराव है`

प्रत्येक पैकेज के लिए `डेबियन/कंट्रोल` में संक्षिप्त और लंबे विवरण दोनों की आवश्यकता होती है। यह त्रुटि इसलिए उठाई गई है क्योंकि दोनों विवरण समान हैं। जैसे ही हमने लंबा विवरण बढ़ाया, त्रुटि दूर हो गई।


5. लिंक और संदर्भ

- [डीडीआर] एंड्रियास बार्थ, एडम डि कार्लो, राफेल हर्ट्ज़ोग, लुकास नुसबाम, क्रिश्चियन श्वार्ज़, इयान जैक्सन: डेबियन डेवलपर का संदर्भ
- [डीएनएमजी] जोसिप रोडिन, ओसामु आओकी: डेबियन न्यू मेंटेनर गाइड
- [dpmb] एक्सल बेकर्ट, फ्रैंक हॉफमैन: डेबियन पैकेज मैनेजमेंट बुक
- [डीपीएम] डेबियन नीति मैनुअल
- [कर सकते हैं] डेबियन पैकेजिंग ट्यूटोरियल
- [जीएफ] जीएनयू गोपनीयता पुस्तिका
- [लशपाई पैकेज] एलेक्स लुशपाई: स्रोत से डेबियन पैकेज कैसे बनाएं


6. आभार

लेखक धन्यवाद देना चाहेंगे एक्सल बेकरर्ट तथा गेरोल्ड रूप्प्रेच्ट इस लेख को तैयार करते समय उनके समर्थन और आलोचकों के लिए।