स्रोत से डेबियन / उबंटू पैकेज कैसे बनाएं?


116

मेरे पास एक कार्यक्रम (cvs / svn / git / ... से लिया गया) का स्रोत है और मैं इसके लिए एक डेबियन / उबंटू पैकेज बनाना चाहूंगा। पैकेज रिपॉजिटरी में मौजूद है, लेकिन:

  • यह एक पुराना संस्करण है (मुझे जिन विशेषताओं की आवश्यकता है)
  • मुझे डिफ़ॉल्ट की तुलना में थोड़ा अलग संकलन विकल्प चाहिए।

इसे करने का सबसे आसान तरीका क्या है? मैं कुछ चीजों के बारे में चिंतित हूं

  • अगर मैं सभी निर्भरताओं को सही ढंग से सूचीबद्ध करूं तो मैं कैसे जांच कर सकता हूं? (पुराने संस्करण के निर्भरता को देखते हुए मैं कुछ संकेत प्राप्त कर सकता हूं, लेकिन नई निर्भरताएं जोड़ी जा सकती हैं।)
  • मैं अपडेट में रेपो में पुराने संस्करण को स्थापित करने वाले अपडेट सिस्टम को कैसे रोक सकता हूं?
  • मैं अपने कस्टम पैकेज को ओवरराइट करते हुए सिस्टम को नए संस्करण (जब इसके बाहर) को कैसे रोक सकता हूं?

जवाबों:


78

आप उन सभी पैकेजों के लिए विशेष पैकेज "जांच-सूची" का उपयोग कर सकते हैं जो अभी तक डेबियन / ubuntu में भी नहीं हैं।

apt-get install devscriptsमौजूदा डेबियन स्रोतों से पैकेज बनाने के लिए आप "यूपडेट" ( ) का उपयोग कर सकते हैं :

Libdrm2 के लिए उदाहरण:

apt-get build-dep libdrm2
apt-get source libdrm2
cd libdrm-2.3.1
uupdate ~/Downloads/libdrm-2.4.1.tar.gz
cd ../libdrm-2.4.1
dpkg-buildpackage -us -uc -nc

धन्यवाद! मैंने इसका उपयोग केवल एक 1.6 में Ubuntu स्थापित करने के लिए सबवर्सन को पोर्ट करने के लिए किया है, जिसका केवल 1.6.5 ही इसके नवीनतम उपलब्ध संस्करण के रूप में है, और इसने त्रुटिपूर्ण रूप से काम किया है। मुझे कुछ घंटों की छेड़छाड़ से बचाया! :)
कार्लोस विलेला

क्या आप इन आदेशों के बारे में थोड़ा और संदर्भ दे सकते हैं? आखिर कहाँ है libdrm-2.3.1? यह भी कहां libdrm-2.4.1.tar.gzसे आया (मेरी प्रारंभिक धारणा यह है कि एप्लिकेशन का संकलित बाइनरी है जिसे हम एक डिब में पैकेज करना चाहते हैं, लेकिन मौजूदा संस्करण की जगह, क्या यह सही है?)
व्हीलर

यदि आपको त्रुटि मिलती है You must put some 'source' URIs in your sources.list, तो /etc/apt/sources.list
क्रिश्चियन

27

सबसे पहले, शीर्षक प्रश्न: मान लिया गया कि डेबियन निर्देशिका पहले से ही है, स्रोत निर्देशिका (डेबियन निर्देशिका युक्त निर्देशिका) में हो और dpkg-buildpackage आह्वान करें। मैं इसे इन विकल्पों के साथ चलाना पसंद करता हूं:

dpkg-buildpackage -us -uc -nc

जिसका अर्थ है कि परिणाम पर हस्ताक्षर न करें और सफाई न करें।

अगर मैं सभी निर्भरताओं को सही ढंग से सूचीबद्ध करूं तो मैं कैसे जांच कर सकता हूं?

निर्भरता प्राप्त करना एक काली कला है। बिल्ड की जाँच करने के लिए "आधिकारिक" तरीका निर्भर करता है कि क्या पैकेज केवल आधार प्रणाली, "बिल्ड-एसेंशियल" पैकेजों के साथ बनाता है, और आपके द्वारा निर्दिष्ट बिल्ड निर्भरताएं। नियमित रूप से निर्भरता के लिए एक सामान्य जवाब नहीं जानते, बस में उतारा :)

मैं अपडेट में रेपो में पुराने संस्करण को स्थापित करने वाले अपडेट सिस्टम को कैसे रोक सकता हूं? मैं अपने कस्टम पैकेज को ओवरराइट करते हुए सिस्टम को नए संस्करण (जब इसके बाहर) को कैसे रोक सकता हूं?

मेरा ज्ञान इस तारीख से पुराना हो सकता है, लेकिन दोनों को संबोधित करने के लिए: dpkg --set-selections का उपयोग करें। अशक्त मान लेना कि आप जिस पैकेज में रहना चाहते हैं, उसे रूट के रूप में चलाएं

echo 'nullidentd hold' | dpkg --set-selections

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

nullidentd (99:1.0-4) unstable; urgency=low

बर्नार्ड का लिंक अच्छा है, खासकर यदि आपको स्वयं डेबियन डायरेक्टरी बनानी है - तो डेवलपर्स रेफरेंस और सामान्य संसाधन पृष्ठ भी मददगार होते हैं । एडम का लिंक भी अच्छा लग रहा है लेकिन मैं इससे परिचित नहीं हूं।


1
"dpkg --set-selections" अभी भी काम करता है, लेकिन इन दिनों एक बेहतर तरीका "योग्यता पकड़ शून्य" होगा।
मार्क बेकर

6

आप जो करना चाहते हैं, उसके लिए आप शायद डेबियन स्रोत का उपयोग करना चाहते हैं, इसलिए आपका पैकेज उपयोग किए गए अपस्ट्रीम संस्करण के अलावा आधिकारिक एक के समान है। आप स्रोत को संकुल .debian.org से अलग डाउनलोड कर सकते हैं , या इसे "apt-get source" का उपयोग करके .dsc और मूल स्रोत संग्रह के साथ प्राप्त कर सकते हैं।

तब आप अपस्ट्रीम स्रोत के अपने नए संस्करण को अनपैक करते हैं, उस डायरेक्टरी में बदलाव करते हैं, और आपके द्वारा डाउनलोड किए गए फ़र्क को लागू करते हैं

zcat ~/downloaded.diff.gz | patch -p1
chmod +x debian/rules

फिर उन परिवर्तनों को करें जिन्हें आप विकल्पों को संकलित करना चाहते थे, और पैकेज का निर्माण कर रहे थे

dpkg-buildpackage -rfakeroot -us -uc


3
  • मूल पैकेज से अपने स्रोत निर्देशिका के लिए "डेबियन" निर्देशिका रखो
  • पैकेज के संस्करण को अपडेट करने के लिए " dch " का उपयोग करें
  • पैकेज बनाने के लिए "debuild" का उपयोग करें

2

मेरा मानना ​​है कि यह डेबियन पैकेज 'बाईबल' है।

खैर, यह डेबियन नए अनुचर की मार्गदर्शिका है, इसलिए इसमें से बहुत कुछ लागू नहीं होगा, लेकिन वे कवर करते हैं कि कहां जाता है।



1

यहाँ एक डेबियन पैकेज के निर्माण के लिए एक ट्यूटोरियल है।

मूल रूप से, आपको निम्न करने की आवश्यकता है:

  1. अपनी फ़ोल्डर संरचना सेट करें
  2. एक कंट्रोल फाइल बनाएं
  3. वैकल्पिक रूप से बनाने के postinst या prerm लिपियों
  4. Dpkg-deb चलाएं

मैं आमतौर पर अपने Makefile में यह सब करता हूं इसलिए मैं केवल बाइनरी को थूकने के लिए बना सकता हूं और इसे एक बार में पैकेज कर सकता हूं ।


1

अगर मैं सभी निर्भरताओं को सही ढंग से सूचीबद्ध करूं तो मैं कैसे जांच कर सकता हूं?

pbuilderएक chroot वातावरण के भीतर एक साफ आधार प्रणाली की स्थापना करके निर्माण निर्भरता और निर्भरता दोनों की जाँच के लिए एक उत्कृष्ट उपकरण है। पाइलडर के भीतर पैकेज को संकलित करके, आप आसानी से बिल्ड निर्भरता की जांच कर सकते हैं, और एक पिल्डर वातावरण में परीक्षण करके, आप निर्भरता की जांच कर सकते हैं।


1

यदि आप बिल्ड निर्भरता स्थापित करने का एक त्वरित और गंदा तरीका चाहते हैं, तो उपयोग करें:

apt-get build-dep

यह निर्भरता स्थापित करता है। आपको इसके लिए स्रोतों की सूची चाहिए। इसके लिए:

deb-src http://ftp.nl.debian.org/debian/ squeeze-updates main contrib non-free

यदि आप परीक्षण से लेकर स्थिर तक के पैकेजों की वापसी कर रहे हैं, तो कृपया सलाह दें कि निर्भरताएँ बदल गई होंगी। आपके वर्तमान रिपॉजिटरी में स्रोत पैकेज के लिए कमांड apt-get बिल्ड-डिबेट निर्भरता स्थापित करता है।

लेकिन निश्चित रूप से, dpkg-buildpackage -us -uc आपको कोई भी अनइंस्टाल्ड निर्भरता दिखाएगा।

यदि आप अधिक बार संकलित करना चाहते हैं, तो काउबल्डर का उपयोग करें।

apt-get install cowbuilder

फिर एक बिल्ड-एरिया बनाएं:

सुडो DIST = ARCH = amd64 काउबिल्डर - निचोड़ें

फिर एक स्रोत पैकेज संकलित करें:

apt-get source cowsay

# do your magic editing
dpkg-source -b cowsay-3.03+dfsg1              # build the new source packages
cowbuilder --build cowsay_3.03+dfsg1-2.dsc    # build the packages from source

देखें कि काउलडर परिणामी पैकेज कहां रखता है।

सौभाग्य!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.