2012-12-07 32 views
38

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

मैं apt-get और apt-cache के साथ खेल रहा हूं, लेकिन मुझे अपने चयन की निर्देशिका में एक झुकाव में पैकेज और निर्भरताओं को डाउनलोड करने का एक तेज़ और आसान तरीका नहीं मिला है। यह मैं कैसे करूंगा? क्या मैं इस समस्या के बारे में सही ढंग से जा रहा हूं? आप ऑफ़लाइन पैकेज कैसे इंस्टॉल करेंगे जिनमें बहुत निर्भरताएं होंगी?

+0

http://superuser.com/questions/876727/how-to-download-deb-package-and-all- निर्भरता | http://askubuntu.com/questions/492435/how-to-download-apt-and-all-its- निर्भरता | http://askubuntu.com/questions/219828/getting-deb-package- निर्भरता-for-an-offline-ubuntu-computer-through- विन्डोज़ | http: // askubuntu।कॉम/प्रश्न/216746/निर्भरता-संतुष्ट नहीं-ऑफ़लाइन-डेब-पैकेज-इंस्टॉल/216755 –

उत्तर

33
# aptitude clean 
# aptitude --download-only install <your_package_here> 
# cp /var/cache/apt/archives/*.deb <your_directory_here> 
+16

यह केवल तभी काम करता है जब आपके पास पैकेज या इसकी निर्भरता स्थानीय रूप से स्थापित न हो। – Kissaki

+8

वास्तविक दुनिया की स्थितियों में यह आपके लिए काम नहीं करता है। ज्यादातर मामलों में निर्भरता पैकेजों में से कई स्थापित किए गए हैं, इसलिए --डाउनलोड केवल उन्हें डाउनलोड नहीं करेगा और उन्हें/var/cache/apt/archive/निर्देशिका में नहीं रखेगा। तो आप अपूर्ण निर्भरता पैकेज के साथ खत्म हो जाते हैं। – Shnd

+0

मुझे लगता है कि यह काम करेगा यदि आप दोनों प्रतिष्ठानों, स्रोत (संभवतः इंटरनेट से जुड़े हुए हैं) और लक्ष्य (बिना इंटरनेट कनेक्शन के) को एक ही आईएसओ से स्थापित कर सकते हैं, उदाहरण के लिए, दोनों मशीनों पर एक ही आईएसओ से उबंटू स्थापित करना और फिर सभी को साफ करना। स्रोत पर डेब, फिर वांछित सामान स्थापित करना, सभी नए डाउनलोड किए गए '.deb की लक्ष्य मशीन को कॉपी करना और फिर 'sudo dpkg -i * .deb' ??? – Mahesha999

1

मुझे लगता है कि आपको एक अच्छा वसा यूएसबी एचडी और नेट से अच्छा कनेक्शन मिला है। आप अनिवार्य रूप से अपना खुद का डेबियन दर्पण बनाने के लिए एपीटी-दर्पण का उपयोग कर सकते हैं।

http://apt-mirror.sourceforge.net/

+1

नहीं, मैं नहीं करता हूं। मैं एपीटी-दर्पण के साथ खेलता हूं लेकिन मेरे पास वसा यूएसबी एचडी या नेट से अच्छा कनेक्शन नहीं है। मैं वास्तव में केवल उन पैकेजों को डाउनलोड करना चाहता हूं जिन्हें मुझे बिल्कुल चाहिए। – Rell3oT

11

aptitude --download-only ... दृष्टिकोण ही काम करता है अगर आप अपने हाथों में इंटरनेट कनेक्शन के साथ एक डेबियन distro है।

आप नहीं करते हैं, मुझे लगता है कि यह कट डेबियन मशीन पर निम्न स्क्रिप्ट चलाने के लिए बेहतर है:,

apt-get --print-uris --yes install <my_package_name> | grep ^\' | cut -d\' -f2 >downloads.list 

कदम एक जुड़ा linux में downloads.list फ़ाइल (या गैर लिनक्स) मशीन और चलाएँ:

wget --input-file myurilist 

इस वर्तमान directory.After है कि आप उन्हें एक यूएसबी कुंजी पर कॉपी करें और अपने डिस्कनेक्ट डेबियन मशीन में स्थापित कर सकते हैं में अपने सभी फाइलों को डाउनलोड करता है।

क्रेडिट: http://www.tuxradar.com/answers/517

पुनश्च मैं मूल रूप से ब्लॉग पोस्ट की नकल की है, क्योंकि यह बहुत पठनीय नहीं था, और मामले में पोस्ट गायब हो जाएगा।

+2

एपीटी-प्राप्त दृष्टिकोण केवल तभी काम कर रहा है जब पैकेज स्थापित नहीं किया गया है –

+0

एपीटी-गेट लाइन में '-qq' जोड़ना' grep' (और '--assume-yes' 'की आवश्यकता को हटा देता है – jpaugh

45

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

इससे बचने के लिए और सभी निर्भरता मिलता है, मैं निम्नलिखित का उपयोग कर रहा:

apt-get download $(apt-rdepends <package>|grep -v "^ ") 
+4

मैंने' apt-rdepends' क्योंकि यह * आवश्यक रूप से * आवश्यक संकुल सूचीबद्ध करेगा। हालांकि, दोनों समाधानों में अभी भी (मामूली आईएमओ) समस्या है कि कुछ निर्भरताओं को केवल उन पैकेजों द्वारा प्रदान किया जा सकता है जिन्हें वास्तव में निर्भरता की तरह नामित किया जाता है। कुछ निर्भरताओं को अलग-अलग नामों के संकुल द्वारा हल किया जाता है, लेकिन संबंधित 'प्रदान करता है' टैग होता है। उदाहरण के लिए, मैंने debconf-2.0 अनसुलझे पर एक संदर्भ रखने की समस्या में भाग लिया - मेरा क्लेडी लेकिन बहुत ही व्यावहारिक समाधान पाइप में जोड़े गए 'grep -v' के साथ मैन्युअल रूप से उन (आमतौर पर बहुत कम) पैकेज को फ़िल्टर करना है। – onno

+0

क्या आप निश्चित हैं कि rdpends का मतलब रिकर्सिव निर्भरता है? मुझे लगता है कि यह विपरीत निर्भरता है। –

+2

उपरोक्त मेरी उपरोक्त टिप्पणी के लिए मैं apt-rdepends के साथ "apt-cache rdepends" को भ्रमित कर रहा था। मेरी गलती - आप सही थे और यह शक्तिशाली है। –

3

मैं apt-cache depends packageकिसी भी मामले में सभी आवश्यक संकुल प्राप्त करने के लिए करता है, तो पहले से ही सिस्टम पर स्थापित या नहीं हैं। तो यह हमेशा सही काम करेगा।
क्योंकि एपीटी-कैश कमांड काम करता है, भाषा के आधार पर, आपको अपने सिस्टम पर यह आदेश आज़माएं और कमांड को अनुकूलित करना होगा।

$ apt-cache depends yourpackage 
node 
    Depends: libax25 
    Depends: libc6 


एक जर्मन प्रणाली आपको मिल पर:: apt-कैश yourpackage
आपको मिल निर्भर करता है एक Englisch प्रणाली पर नोड

Hängt ab von: libax25 
    Hängt ab von: libc6 


अवधि के साथ Englisch संस्करण:
" Depends: "
आपको इस आदेश में दो बार अपनी इच्छा के लिए" yourpackage "शब्द बदलना होगा, देखभाल करें इस का!

$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep " Depends:" | sed 's/ Depends://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list 


और अवधि के साथ जर्मन संस्करण:
"Hängt ab von:"
आप इस आदेश में दो बार अपनी इच्छा के शब्द "yourpackage" बदलने के लिए, इस का ख्याल रखना है!
इस पाठ में इस पाठ का दो बार उपयोग किया जाता है, यदि आप इसे अपनी भाषा में अनुकूलित करना चाहते हैं तो इसका ख्याल रखें!

$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "Hängt ab von:" | sed 's/ Hängt ab von://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list 


आप downloads.list
में लिंक की सूची प्राप्त सूची की जाँच करें, अपने फ़ोल्डर में जाने के लिए और सूची चलाएँ:

:

$ cd yourpathToYourFolder 

$ wget --input-file downloads.list 


अपने सभी आवश्यक संकुल में हैं

$ ls yourpathToYourFolder 
+0

फ़ाइलों को प्राप्त करने के बाद, आप यह सुनिश्चित करने के लिए किस आदेश का उपयोग करेंगे कि इन सभी फ़ाइलों का ऑफ़लाइन इंस्टॉलेशन करते समय उपयोग किया जाता है? – dtmland

+0

मुझे लगता है कि यदि आप dpkg -i पैकेज करते हैं .deb package2.deb, dpkg स्थापना के आदेश को समझेंगे – FreeSoftwareServers

+0

यह मेरे लिए काम नहीं करता है क्योंकि मेरी एक निर्भरता थी जिसे एक लाइनर में सही तरीके से संभाला नहीं गया था, लेकिन मुझे यकीन है कि यह कई चीजों के लिए काम करेगा, सामान्य अवधारणा काम करता है, लेकिन मैंने ओज्मा के उत्तर – FreeSoftwareServers

6

कुछ हद तक सरलीकृत (और मेरे लिए क्या काम किया) जिस तरह से मेरे लिए काम किया (सभी के आधार पर इसके बाद के संस्करण)
नोट निर्भरता कि पदानुक्रम एक स्तर तो गहरी जा सकते हैं

अपने पैकेज के निर्भरता हासिल

$ apt-cache depends mongodb | grep Depends: 
    Depends: mongodb-dev 
    Depends: mongodb-server 

यूआरएल प्राप्त करें:

sudo apt-get --print-uris --yes -d --reinstall install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-tools | grep "http://" | awk '{print$1}' | xargs -I'{}' echo {} | tee files.list 
wget --input-file files.list 
+0

इसके लिए बहुत कुछ धन्यवाद। मुझे वास्तव में आश्चर्य है कि एपीटी को निर्भरता डाउनलोड करने और उन्हें/var/cache/apt/archives में कैश करने के लिए कहने का कोई तरीका है। मैं 'texlive-full -install-Recommends' डाउनलोड करना चाहता था और केवल मेरे संग्रह में 'texlive-full' नामक मेटापैकेज के साथ समाप्त हुआ। –

+1

मुझे कैश के बारे में पता नहीं है। आपको इसे स्वयंमाने की आवश्यकता होगी http://askubuntu.com/questions/463380/difference-between-apt-get-d-install-apt-get-download – ozma

5

यह वर्तमान के लिए सभी Debs डाउनलोड करेगा निर्देशिका, और अगर यह उम्मीदवार नहीं मिल पाती है तो असफल नहीं होगी।

भी सुडो चलाने के लिए सूडो की आवश्यकता नहीं है!

nano getdebs.sh && chmod +x getdebs.sh && ./getdebs.sh 

#!/bin/bash 

package=ssmtp 

apt-cache depends "$package" | grep Depends: >> deb.list 

sed -i -e 's/[<>|:]//g' deb.list 

sed -i -e 's/Depends//g' deb.list 

sed -i -e 's/ //g' deb.list 

filename="deb.list" 

while read -r line 
do 
    name="$line" 
    apt-get download "$name" 
done < "$filename" 

apt-get download "$package" 

नोट: क्योंकि मैं वास्तव में SSMTP के लिए deps डीएल कोशिश कर रहा था मैं अपने उदाहरण के रूप में इस का इस्तेमाल किया और यह debconf-2.0 पर विफल रही है, लेकिन इस स्क्रिप्ट मुझे मिल गया है कि मैं क्या जरूरत है! आशा करता हूँ की ये काम करेगा।

+0

यह मेरे लिए बहुत अच्छा काम करता है। हालांकि मुझे प्रीडेपेंड को संभालने के लिए एक और लाइन जोड़ना पड़ा। साझा करने के लिए धन्यवाद! – tay10r

4

एक ही सवाल पहले से ही यहाँ उत्तर दिया: How to list/download the recursive dependencies of a debian package?

कोशिश:

PACKAGES="wget unzip" 
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \ 
    --no-conflicts --no-breaks --no-replaces --no-enhances \ 
    --no-pre-depends ${PACKAGES} | grep "^\w")