स्क्रिप्ट या बायनेरिज़ से -deb पैकेज बनाएँ


73

मैंने उन चीजों के लिए .deb संकुल बनाने का एक सरल तरीका खोजा, जिसमें संकलन करने के लिए कोई स्रोत कोड नहीं है (कॉन्फ़िगरेशन, शेलस्क्रिप्ट, मालिकाना सॉफ्टवेयर)। यह काफी समस्या थी क्योंकि अधिकांश पैकेज ट्यूटोरियल मान रहे हैं कि आपके पास एक स्रोत टारबॉल है जिसे आप संकलित करना चाहते हैं। तब मुझे यह छोटा ट्यूटोरियल (जर्मन) मिला।

बाद में, मैंने एक साधारण रिपॉजिटरी बनाने के लिए एक छोटी स्क्रिप्ट बनाई। ऐशे ही:

rm /export/my-repository/repository/*
cd /home/tdeutsch/deb-pkg
for i in $(ls | grep my); do dpkg -b ./$i /export/my-repository/repository/$i.deb; done
cd /export/avanon-repository/repository
gpg --armor --export "My Package Signing Key" > PublicKey
apt-ftparchive packages ./ | gzip > Packages.gz
apt-ftparchive packages ./ > Packages
apt-ftparchive release ./ > /tmp/Release.tmp; mv /tmp/Release.tmp Release
gpg --output Release.gpg -ba Release

मैंने apt कीरिंग की कुंजी जोड़ी और स्रोत को इस तरह शामिल किया:

deb http://my.default.com/my-repository/ ./

ऐसा लगता है कि रेपो स्वयं ही अच्छी तरह से काम कर रहा है (मैं कुछ समस्याओं में भाग गया, उन्हें ठीक करने के लिए मुझे पैकेजों को दो बार जोड़ने और रिलीज़ फ़ाइल के लिए अस्थायी फ़ाइल समाधान बनाने की आवश्यकता थी)। मैंने कुछ डाउनलोड किए गए .deb को भी रेपो में रखा, ऐसा लगता है कि वे भी बिना किसी समस्या के काम कर रहे हैं। लेकिन मेरे स्वयं के बनाए गए पैकेज नहीं थे ... मैं ऐसा नहीं कर सकता sudo apt-get update, वे इस तरह से त्रुटियां पैदा कर रहे हैं:

E: Problem parsing dependency Depends
E: Error occurred while processing my-printerconf (NewVersion2)
E: Problem with MergeList /var/lib/apt/lists/my.default.com_my-repository_._Packages
E: The package lists or status file could not be parsed or opened.

क्या किसी ने सोचा है कि मैंने क्या गलत किया है?

अद्यतन 2012-03-06: बस एक अन्य व्यक्ति जो DEBs बनाने के लिए एक आसान तरीका के लिए खोज रहा है के लिए एक संकेत: FPM पर एक नज़र डालें ।


क्या आपने पैकेज में DEBIAN / नियंत्रण फ़ाइल जोड़ी है, जिसमें फ़ील्ड निर्भर है:?
बिलाल अख्तर

5
Btw। अब मैं अपनी पैकेजिंग जरूरतों के लिए FPM का उपयोग कर रहा हूं: github.com/jordansissel/fpm
थॉमस Deutsch

एफडब्ल्यूआईडब्ल्यू, मुझे एक पैकेज पर वही त्रुटि संदेश मिला जो मैंने बनाया था क्योंकि मैंने निर्भरता में से एक को गलत तरीके से निर्दिष्ट किया था। मैंने "फू> = 2.1" लिखा था, जब इसे "फू (> = 2.1)" होना चाहिए। मैंने त्रुटि के अंतिम आधे हिस्से को देखने से पहले एक घंटे का समय बिताया जब मुझे महसूस हुआ कि त्रुटि का पहला आधा हिस्सा मुझे बता रहा है कि वास्तव में क्या गलत था ... (PS: FPM रॉक्स। आप Aptly को भी देखें।)
मार्क ई। हासे

2
मैं दृढ़ता से सहमत होना चाहता हूं कि किसी चीज़ की पैकेजिंग के लिए कोई ट्यूटोरियल या गाइड नहीं है जो कि मेक फाइल्स आदि के साथ टार बॉल से नहीं आती है। यह कैसे करना है यह काम करना बहुत मुश्किल है। हमें जावा डेवलपर्स जैसे लोगों के लिए ऐसे मार्गदर्शक की आवश्यकता है जो कुछ लिपियों और शायद लिबास के साथ एक युद्ध वितरित करना चाहते हैं, लेकिन डेबियन एसआईएस व्यवस्थापक या डेबियन अनुचर नहीं हैं। एफपीएम इस मामले में मदद नहीं करता है, क्योंकि यह भी आवश्यक है कि आप पहले से ही जानते हैं कि यह कैसे पैकेज बना सकता है।
जॉन लिटिल

1
Fpm के बारे में जानकारी साझा करने के लिए बहुत बहुत धन्यवाद। यह आकर्षण की तरह काम करता है!
डेमियन नाडेल्स

जवाबों:


70

आपके द्वारा लिंक किया गया ट्यूटोरियल पैकेज बनाने के लिए निम्न स्तर के दृष्टिकोण का उपयोग करता है। इस तरह के दृष्टिकोण की आमतौर पर सिफारिश नहीं की जाती है और ध्यान से नहीं किए जाने पर सभी प्रकार के मुद्दे हो सकते हैं।

पैकेजिंग की मूल बातें समझने के बाद एक स्क्रिप्ट के लिए -deb बनाना बहुत सरल है। संक्षेप में:

# Configure your paths and filenames
SOURCEBINPATH=~
SOURCEBIN=myscript.sh
DEBFOLDER=~/somescripts
DEBVERSION=0.1

DEBFOLDERNAME=$DEBFOLDER-$DEBVERSION

# Create your scripts source dir
mkdir $DEBFOLDERNAME

# Copy your script to the source dir
cp $SOURCEBINPATH/$SOURCEBIN $DEBFOLDERNAME 
cd $DEBFOLDERNAME

# Create the packaging skeleton (debian/*)
dh_make -s --indep --createorig 

# Remove make calls
grep -v makefile debian/rules > debian/rules.new 
mv debian/rules.new debian/rules 

# debian/install must contain the list of scripts to install 
# as well as the target directory
echo $SOURCEBIN usr/bin > debian/install 

# Remove the example files
rm debian/*.ex

# Build the package.
# You  will get a lot of warnings and ../somescripts_0.1-1_i386.deb
debuild

अधिक स्क्रिप्ट जोड़ने से उन्हें निर्देशिका में कॉपी करने और डेबियन / इंस्टॉल फ़ाइल में जोड़ने की आवश्यकता होती है - फिर बस डिब्यूल्ड फिर से चलाएं। आपको आवश्यकतानुसार डेबियन / * फाइलों को भी जांचना और अपडेट करना चाहिए।

आप के लिए आदमी पृष्ठों को पढ़ना चाहिए: dh_make, dh_install, औरdebuild


3
डेबियन / नियंत्रण, "आर्किटेक्चर: किसी भी" को "आर्किटेक्चर: सभी" में बदलना होगा। उत्तर के रूप में प्रश्न सेट करना न भूलें;)
जोओ पिंटो

3
निर्देशिका को अद्यतन करने और डेबियन / चेंगलॉग को अपडेट करने के अलावा आपको .orig संग्रह को नए संस्करण के अनुरूप बनाना होगा, यह एक संग्रह है जो स्रोत निर्देशिका सामग्री (डेबियन / सहित बिना) है।
जोहो पिंटो

1
निर्देशिका में शामिल हैं, जो मैं आमतौर पर करता हूं वह कुछ इस तरह है: cp sourcedir sourcedir.orig && rm -rf sourcedir.orig / debian && tar czvf filename.orig.tar .gz sourcedir.orig
João Pinto

1
पैकेज --indepको जोड़ने के लिए ध्वज को dh_make"आर्किटेक्चर: सभी" बनाया जाएगा, साथ ही -bध्वज 11.04 और इसके बाद के संस्करण में मौजूद नहीं है।
andrewsomething

1
.Deb पैकेज बनाने के बाद, आपको त्रुटियों और संवर्द्धन के लिए जाँच करनी चाहिए lintian somescripts_0.1-1_i386.debया lintian package-source.changes- देखें: पैकेजिंग
.ubuntu.com
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.