बस एक वेबसर्वर पर एक सरल लेकिन हस्ताक्षरित भंडार स्थापित करें । क्योंकि अधिकांश अन्य ट्यूटोरियल कुछ दिनांकित या बोझिल हैं, मैं यहां प्रक्रिया को दोहराने की कोशिश करूंगा। प्रारंभिक कॉन्फ़िगरेशन में थोड़ा प्रयास लगता है, लेकिन सरल बिल्ड स्क्रिप्ट इसे प्रबंधित करना आसान बनाता है। और आप सिर्फ नई *.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 (पैकेजिंग स्क्रिप्टिंग लैंग्वेज ऐप्स के लिए अधिक आलसी दृष्टिकोण)।