एपीटी रिपॉजिटरी कैसे स्थापित करें?


52

मैं एक सर्वर पर एक एपीटी रिपॉजिटरी स्थापित करना चाहूंगा जो कुछ पैकेज प्रदान करेगा।

क्या सर्वर पर कोई सॉफ़्टवेयर स्थापित किए बिना एक सेट करने का एक तरीका है ?

फ़ाइलों को कैसे व्यवस्थित करना है?


संपादित करें: मुझे कुछ गलत करना चाहिए ... क्या कोई कृपया मेरी मदद कर सकता है? मेरे पास http://quickmediasolutions.com/apt/dists पर भंडार है

मुझे यकीन नहीं है कि कहां या क्या, लेकिन कुछ गलत है। मेरे पास वर्तमान में केवल एक पैकेज है और यह सभी आर्किटेक्चर के लिए है।

यहाँ मेरे लिए क्या जोड़ा गया है /etc/apt/sources.list:

deb http://quickmediasolutions.com/apt stable main

क्या आप अपने द्वारा डाउनलोड किए गए एप्लिकेशन को किस प्रकार के लाइसेंस में संपादित और जोड़ सकते हैं? क्या यह निजी उपयोग के लिए है या आप उन्हें वितरित करने की योजना बनाते हैं, आदि?
जॉर्ज कास्त्रो

@ जॉर्ज: तुम्हारा क्या मतलब है? क्या अनुप्रयोगों?
नाथन उस्मान

1
मैं यह निर्धारित करने की कोशिश कर रहा था कि क्या पैकेज ओएसएस था आप केवल लॉन्चपैड का उपयोग कर सकते हैं।
जॉर्ज कास्त्रो

@ जॉर्ज: नहीं, यह ओएसएस नहीं है। (वास्तव में, यह बहुत ही एकमात्र ऐप है जो मैंने नहीं लिखा है।)
नाथन उस्मान

जवाबों:


26

Dpkg-scanpackages का उपयोग करके एक तुच्छ भंडार स्थापित करना बहुत आसान है। यह पृष्ठ बताता है कि एक तुच्छ रिपो को कैसे सेट किया जाए, और यह कैसे उपयोग करता है (उदाहरण 4 पर स्क्रॉल करें)।


काम करने में थोड़ी परेशानी हो रही है। कृपया प्रश्न के लिए मेरा अपडेट देखें।
नाथन उस्मान

1
ऐसा लगता है कि आप "स्वचालित" रेपो स्थापित करने का प्रयास कर रहे हैं। एक (या सिर्फ कई) पैकेज के लिए, आप एक मामूली रेपो का उपयोग करके बहुत बेहतर होंगे। अपने Package.gz को स्थानांतरित करने का प्रयास करें और quickmediasolutions.com/apt/binary तक सभी तरह से बहस करें । तब तुम्हारा स्रोत होगा deb http://quickmediasolutions.com/apt binary/
माइकल Crenshaw

2
तुच्छ रेपो, पिन करते समय समस्याएं पेश करते हैं, लेकिन हां, वे सिर्फ कुछ पैकेजों के लिए रेपो स्थापित करने का सबसे तेज / आसान तरीका है। यह मूर्खतापूर्ण प्रतीत होगा कि केवल 2 - 3 पैकेजों के लिए एक पूलित रेपो स्थापित किया जाएगा।
टिम पोस्ट

जॉर्ज, क्या आप कभी यह काम करने में सक्षम थे?
माइकल क्रेंशॉ

@ एमएसी: ठीक है .... मेरे पास अभी तक इसे आज़माने का समय नहीं है :) मैंने एक पीपीए के लिए सब कुछ अपलोड कर दिया।
नाथन उस्मान

40

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

कुछ हस्ताक्षर कुंजी उत्पन्न करें

पहले आपको gpgसंकुल और अपने भंडार के लिए एक हस्ताक्षर कुंजी बनाने की आवश्यकता है। इसे एक (4) RSA साइनिंग कुंजी, कोई पासवर्ड न बनाएं, और $KEYNAMEमांगे जाने पर इसे एक अद्वितीय दें । (आगे के उदाहरण मान dpkg1लेते हैं कि " " कीनाम के रूप में है।)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

मैंने कहा कोई पासवर्ड नहीं, क्योंकि आपके वेबसर्वर के पास बार-बार टाइप करने के लिए कोई बिलियन बन्दर नहीं है। और हस्ताक्षरित पैकेज और रिपॉजिटरी केवल उस बारे में अद्यतन-प्रबंधकों की शिकायतों को पूरा करने के लिए हैं। बस नया करने के लिए दोनों कुंजी अपलोड /apt/अपने वेबसर्वर पर भंडार निर्देशिका, लेकिन हटाना secret.gpgकुंजी के बाद प्रारंभ।

CGI स्क्रिप्ट को अपडेट करें

यह इसके लिए सरल अद्यतन शेल / CGI स्क्रिप्ट है:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

तीन gpgलाइनों को केवल एक बार निष्पादित करने की आवश्यकता है, कुछ निर्देशिका में जीपीजी सेटअप को शुरू करने के लिए $GNUPGHOME(दस्तावेज़ रूट के ऊपर)। secret.gpgसफलता के बाद ही डिलीट करें ।

इस छोटे से खोल स्क्रिप्ट से एक अनूठी विशेषता यह है कि यह किसी भी स्वीकार करता है *.deb(आवश्यकताओं .htaccess फ़ाइलों को छोड़, लेकिन यह भी रिकर्सिवली खोज दूसरों के लिए (एक स्तर ऊपर से शुरू), और उन में सिमलिंक। Options FollowSymLinksअंत में।)

आप इस स्क्रिप्ट को CGI या प्रति क्रोन-जॉब के रूप में मैन्युअल रूप से निष्पादित कर सकते हैं। लेकिन इसे छिपाएं, या बेहतर अभी तक इसे दस्तावेज़ रूट से बाहर ले जाएं।

क्योंकि यह एक "तुच्छ" उपयुक्त भंडार है, जिसे निम्नलिखित apt-sources.listप्रविष्टि की आवश्यकता है :

deb http://example.org/deb/  ./    # Simple signed repo

यह एकल-आर्किटेक्चर रिपॉजिटरी के लिए उपयुक्त है, और यदि आप सैकड़ों पैकेजों की अपेक्षा नहीं करते हैं।

पैकेज पर हस्ताक्षर

एक बार अपने gpg कुंजियाँ सेट करने के बाद, अपने व्यक्तिगत पैकेजों पर हस्ताक्षर करना भी मामूली है:

dpkg-sig -k dpkg1 -s builder *.deb

(यह वर्कस्टेशन पर किया जाना चाहिए जहां पैकेज बनाए जाते हैं, रिपॉजिटरी वेबसर्वर पर नहीं।)

निरुपित भंडार

यदि आपको हस्ताक्षरित पैकेजों की आवश्यकता नहीं है, तो आप अपडेट स्क्रिप्ट को नीचे गिरा सकते हैं:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

जिसका उपयोग अभी भी औसत उपयोगकर्ताओं द्वारा किया जा सकता है, लेकिन इसके लिए कस्टम ध्वज की आवश्यकता है apt.sources:

deb [trusted=yes] http://apt.example.org/deb/ ./

लेकिन कृपया trusted=yesफ्लैग का उपयोग आदतन हर चीज के लिए न करें , या यदि आप वास्तव में पैकेज की उत्पत्ति के बारे में निश्चित नहीं हैं।

प्रयोज्य के लिए

अंत उपयोगकर्ताओं के लिए, बस HEADER.htmlरिपॉजिटरी डायरेक्टरी में ड्रॉप करें । अपाचे mod_auto_indexउस नोट को प्रस्तुत करेंगे:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>

वैकल्पिक

इन दिनों भंडार प्रबंधन को स्वचालित करने के लिए कुछ उपकरण हैं। और यहां तक ​​कि रिपॉजिटरी ऑनलाइन होस्टर्स और पैकेज बिल्ड सर्विसेज ( जेमफ्यूरी , पैकेजक्लाउड , बिंट्रे आदि) भी हैं।

  • बल्कि एक सुविधाजनक विकल्प प्रम है । यह एक रूबी स्क्रिप्ट है, जो जटिल APT और YUM रेपो बनाता है। (लेकिन चलो बस आशा करते हैं कि आरपीएम अंत में जल्द ही कुछ देर में मर जाता है ..) - यह सबसे अच्छा प्रति स्थापित है gem install prm

  • और मैंने इसे समान रूप से स्वचालित करने के लिए एक छोटी सी स्क्रिप्ट भी लिखी है: http://apt.include-once.org/apt-phparchive - कृपया ऐसा न करें कि यह अत्यधिक मजबूत न हो और PHP में लिखा हो (एक बार के लिए, यह संयोग है) और मूल रूप से DEB और RPM-over-APT और Phar बंडलों के लिए था।

चूंकि यह मूल प्रश्न से निकटता से संबंधित है, इसलिए डेबियन पैकेजों को अधिक आसानी से बनाने के लिए उपकरण भी हैं। कुछ हद तक पुरानी: EPM । बहुत अधिक समकालीन: एफपीएम । और मेरा व्यक्तिगत कांटा: XPM (पैकेजिंग स्क्रिप्टिंग लैंग्वेज ऐप्स के लिए अधिक आलसी दृष्टिकोण)।


1
जब मैं उस रेपो का उपयोग करना चाहता हूं तो मैं gpg कुंजी कैसे जोड़ूं?
ब्रूस सन

1
आमतौर पर कुछ इस तरहwget …/public.gpg -O- | apt-key add -
mario

यदि मुझे कई आर्किटेक्चर का समर्थन करना है तो मुझे क्या बदलना होगा?
स्टारबाइमरनबोलाब्स

1
@starbeamrainbowlabs पूरी तरह से निश्चित नहीं है, लेकिन मुझे लगता है dpkg-scanpackages -mकि पर्याप्त हो सकता है। यह अभी भी एक ही रिलीज़ फ़ाइल में सभी आर्किटेक्चर को सूचीबद्ध करेगा। लेकिन जब तक प्रत्येक .deb का एक अद्वितीय नाम होता है / या उसे अलग-अलग उपखंडों में संग्रहित किया जाता है (amd64 /, all /) उसे काम करना चाहिए। और अधिक जटिल रिपॉजिटरी टूल में से एक के लिए जाना।
मारियो

7

हाँ। तुम यह केर सकते हो। आपको बस फाइलों को सही तरीके से व्यवस्थित करने और सूचकांक फ़ाइलों को बनाने की आवश्यकता है। यदि आप निर्देशिका संरचना को अपने वेब सर्वर के दस्तावेज़ रूट के अंदर रखते हैं तो संकुल को वेब सर्वर के माध्यम से एक्सेस किया जा सकता है।

यहां एक विस्तृत विवरण दिया गया है कि फाइलों को कैसे व्यवस्थित किया जाना चाहिए और सूचकांक फाइलें कैसे बनाई जाती हैं।

यदि आप उस एक पैकेज को स्थापित करने के इच्छुक हैं, तो आप रिप्रप्रो नामक टूल का भी उपयोग कर सकते हैं । इससे प्रशासन को थोड़ी और सुविधा होगी।


@txwikinger: कारण जो मैं पैकेज नहीं स्थापित कर सकता क्योंकि सर्वर सेंटो चल रहा है :)
नाथन उस्मान

कुंआ। आपको जरूरत नहीं है आप एक अलग कंप्यूटर पर सब कुछ बना सकते हैं और सिर्फ पूरे पेड़ को
सेंटोस

हाँ, मैं निश्चित रूप से रिप्रेप्रो का उपयोग करूँगा। यह आपके जीवन को इतना आसान बना देगा। किसी अन्य कंप्यूटर पर रेपो बनाना भी एक विशेषता हो सकती है, यदि यह आपको अपने हस्ताक्षर कुंजी को बेहतर तरीके से संरक्षित करने की अनुमति देता है।
औरोल

@andol & @txwikinger: मैं कोशिश कर रहा हूं लेकिन समस्याओं में चल रहा हूं। कृपया मेरा अद्यतन प्रश्न देखें।
नाथन उस्मान

आपकी डिस्ट्स फ़ाइल के लिए आपको अभी भी आवश्यकता होगी। / binary-<specific arch>।
औरोल


0

Mario के उत्तर का अनुसरण करने के बाद किसी को भी इस त्रुटि का सामना करना पड़ रहा है:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

निम्न कार्य करें:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

मैंने अपनी *.debफाइलें debsफ़ोल्डर में डाल दीं।

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