एक लैन पर एप डाउनलोड को कैश करने का सबसे अच्छा तरीका?


152

मेरे पास घर पर कई उबंटू मशीनें हैं और बहुत धीमी गति से इंटरनेट कनेक्शन है, और कभी-कभी कई मशीनों को एक बार में अपडेट करने की आवश्यकता होती है (विशेषकर नए उबंटू रिलीज के दौरान)।

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

जवाबों:


129

मैंने समाधानों के एक समूह में कुछ शोध किया और कुछ उबंटू डेवलपर्स 10.04 और बाद के लिए प्रॉक्सी कॉन्फ़िगरेशन (स्क्वीड पर आधारित) के साथ आए। इसे कहते हैं squid-deb-proxy। इसे केवल सर्वर के रूप में कार्य करने के लिए मशीन की आवश्यकता होती है। बड़े संगठन आमतौर पर अपना पूरा दर्पण चलाते हैं लेकिन अधिकांश लोगों के लिए ऑन मिररिंग पर्याप्त है।

विद्रूप-वाद-विवाद क्यों?

  • क्लाइंट साइड पर फ़ाइलों का कोई संपादन नहीं।
  • Zeroconf का उपयोग करें ताकि ग्राहक "शून्य कॉन्फिगर" हों
  • एक नया उपकरण लिखने के बजाय एक मौजूदा, ठोस प्रॉक्सी समाधान का उपयोग करें।
  • एक विशिष्ट लिनक्स व्यवस्थापक के लिए सेट करना आसान है।

सर्वर कॉन्फ़िगरेशन

जिस मशीन पर आप सर्वर के रूप में कार्य करना चाहते हैं, उसके साथ उपकरण स्थापित करें:

sudo apt-get install squid-deb-proxy avahi-utils

अब सेवा बिट्स शुरू करें:

 sudo start squid-deb-proxy

और अवही बिट्स (आपको इसकी आवश्यकता नहीं है यदि आप 12.04+ पर हैं):

 sudo start squid-deb-proxy-avahi

यह प्रॉक्सी सर्वर (जो डिफ़ॉल्ट रूप से 8000 को पोर्ट करने के लिए सुनता है) और सर्वर के लिए जरुरी उपकरण आपके नेटवर्क पर zeroconf के माध्यम से विज्ञापन करने के लिए आवश्यक होगा।

ग्राहक विन्यास

पर कंप्यूटर के प्रत्येक है कि आप (इसलिए यह भी कैश का उपयोग कर सकते ग्राहकों, और सर्वर पर ही) कैश का उपयोग करना चाहते, तो आप यहां क्लिक कि चलो स्वचालित रूप से सर्वर के लिए के लिए उपयुक्त नज़र ग्राहक के पक्ष उपकरण स्थापित करने की आवश्यकता है, उन्हें है :

सॉफ्टवेयर केंद्र के माध्यम से स्थापित करें

या कमांड लाइन के माध्यम से:

sudo apt-get install squid-deb-proxy-client

वैकल्पिक : अधिकतम दक्षता के लिए आपको स्वचालित रूप से अपडेट डाउनलोड करने के लिए एक मशीन सेट करनी चाहिए, ताकि जब आपकी अन्य मशीनों को इसकी आवश्यकता हो तो यह पहले से ही कैश में हो। आप इसे सिस्टम-> प्रशासन-> अपडेट मैनेजर पर जाकर कर सकते हैं, फिर "सेटिंग ..." बटन पर क्लिक करें, अपडेट टैब में इसे सभी अपडेट को स्वचालित रूप से डाउनलोड करने के लिए सेट करें।

वैकल्पिक शब्द

कैशिंग 3 पार्टी स्रोत

डिफ़ॉल्ट रूप से कैश को केवल कैश ऑफिशियल उबंटू रिपॉजिटरी में सेट किया जाता है। अधिक जोड़ने के लिए आपको उन्हें स्रोतों की सूची में जोड़ना होगा /etc/squid-deb-proxy/mirror-dstdomain.acl। यह वह जगह है जहाँ आप ppa.launchpad.net, या अन्य सेवाओं को जोड़ सकते हैं जिनका आप उपयोग कर सकते हैं। इस फ़ाइल में परिवर्तन करने के बाद, sudo restart squid-deb-proxyपरिवर्तनों को प्रभावी बनाने के लिए आपको चलना चाहिए ।

मैनुअल कॉन्फ़िगरेशन

यदि किसी कारण से आप zeroconf (नेटवर्क कारणों या जो कुछ भी) का उपयोग नहीं करना चाहते हैं, तो आप मैन्युअल रूप /etc/apt/apt.confसे निम्नलिखित श्लोक को संपादित और जोड़कर प्रॉक्सी का उपयोग करने के लिए एक क्लाइंट सेट कर सकते हैं , (0.0.0.0 को सर्वर के आईपी पते से बदलें) ):

 Acquire { 
   Retries "0"; 
   HTTP { Proxy "http://0.0.0.0:8000"; };
 };

फ़ायरवॉल

यदि आप फ़ायरवॉल का उपयोग कर रहे हैं, तो अवधी 224.0.0.0/4 पते पर 5353 का उपयोग करता है और इस तरह के नियम की आवश्यकता होती है:

# Specifically port 5353 which avahi uses
-A INPUT -i eth2 -d 224.0.0.0/4 --dport 5353 -j ACCEPT

# OR

# Wide open so all local broadcasting works
-A INPUT -i eth2 -d 224.0.0.0/4 -j ACCEPT

अगला, आपको प्रॉक्सी के माध्यम से वास्तविक संचार के लिए टीसीपी पोर्ट 8000 खोलने की आवश्यकता है। इस तरह से कम या ज्यादा:

-A INPUT -i eth2 -p tcp -m tcp --dport 8000 -d 192.168.0.1 -s 192.168.0.0/24 --syn -j ACCEPT

ये नियम सिर्फ आपकी मदद करने के लिए हैं। वे शायद आपके सेटअप से एक से मेल नहीं खाते। (यानी गलत इंटरफ़ेस, गलत निजी नेटवर्क आईपी पते, आदि)

इसकी पुष्टि करता है

पहले सर्वर पर लॉग को पूंछें ताकि आप इसे देख सकें: tail -F /var/log/squid-deb-proxy/access.logऔर फिर किसी भी मशीन पर एक अपडेट चलाएं जिसमें क्लाइंट स्थापित है; लॉग को इस तरह प्रविष्टियों के साथ स्क्रॉल करना शुरू करना चाहिए:

1307310795.647     32 192.168.1.106 TCP_MISS/302 768 GET http://us.archive.ubuntu.com/ubuntu/dists/natty-proposed/universe/i18n/Translation-en.xz - DIRECT/141.210.26.10 text/html
1307310795.683     34 192.168.1.106 TCP_MISS/302 752 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.716     32 192.168.1.106 TCP_MISS/302 746 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/main/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.750     32 192.168.1.106 TCP_MISS/302 764 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en_US.lzma - DIRECT/141.210.26.10 text/html
1307310795.784     32 192.168.1.106 TCP_MISS/302 758 GET http://us.archive.ubuntu.com/ubuntu/dists/natty/multiverse/i18n/Translation-en.lzma - DIRECT/141.210.26.10 text/html
1307310795.817     32 192.168.1.106 TCP_MISS/404 657 GET http://us.archive.ubuntu.com/dists/natty-proposed/multiverse/i18n/Translation-en_US.xz - DIRECT/141.210.26.10 text/html

जिसका अर्थ है कि ग्राहक कैश देखते हैं, लेकिन उसे याद नहीं कर रहे हैं, जो कि उम्मीद है क्योंकि यह अभी तक कुछ भी कैश नहीं है। प्रत्येक बाद के रन को TCP_HIT के रूप में दिखाना चाहिए। आप स्वयं स्क्वीड कैश फ़ाइलों को पा सकते हैं /var/cache/squid-deb-proxy

उसका इस्तेमाल कर रहे हैं

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

करने के लिए

हमें अभी भी बॉक्स से बाहर नेटवर्क पर केवल एक विज्ञापित कैश का उपयोग करने में सक्षम करने की आवश्यकता है और डिफ़ॉल्ट रूप से इसलिए आपको क्लाइंट टुकड़ा स्थापित करने की आवश्यकता नहीं है। हमें बग को ठीक करने की भी आवश्यकता है कि 403 की डिबेट मिरर सूची में नहीं है।


2014/01/21 14: 56: 31 | त्रुटि: / var / cache / squid-deb -xy / 03: (2) ऐसी कोई फ़ाइल या निर्देशिका नहीं है: स्वैप निर्देशिकाओं में से एक को सत्यापित करने में विफल, विवरण के लिए cache.log की जाँच करें। जरूरत पड़ने पर स्वैप निर्देशिका बनाने के लिए 'स्क्वीड -z' चलाएं, या पहली बार स्क्वीड चलाएं। स्क्वीड कैश (संस्करण 3.3.8): असामान्य रूप से समाप्त कर दिया गया।
थंपर

1
आपको स्क्वीड भी स्थापित करना होगा।
थंपर

ऐसा लगता है कि मैन्युअल कॉन्फ़िगरेशन अभी मान्य नहीं है। के apt.confतहत कोई फ़ाइल नहीं है /etc/apt। हालाँकि, सेटिंग्स के तहत फ़ाइलों की अधिकता है /etc/apt/apt.conf.d। मुझे लगता है कि हमें अब इसके बजाय एक फ़ाइल बनाना चाहिए?
एलेक्सिस विलके

इसके अलावा, ऐसा लगता है कि TODO को सुलझा लिया गया है। यानी, मुझे कुछ नहीं करना था और कैश का इस्तेमाल पहले किया गया था। हालांकि बग ऐसा नहीं दिखता है क्योंकि इसे अभी तक तय किया गया था।
एलेक्सिस विलके

ज़रूर, अगर apt.conf.d है तो यह कैसे किया जाता है कृपया इस उत्तर को संपादित करें, चीयर्स!
जॉर्ज कास्त्रो

37

apt-cacher-ngमेरे लिए जवाब है - मुझे छोटे वातावरण (लगभग 20 ग्राहकों) में किसी भी समस्या का सामना नहीं करना पड़ा है, इसलिए मुझे लगता है कि मुद्दे @MagicFab उल्लेख वर्तमान संस्करण में हल किए गए थे (Ubuntu 10.04 और 10.10 पर स्थापित)। सर्वर के लिए आवश्यक कोई कॉन्फिगरेशन नहीं है, और आपको केवल अपने क्लाइंट को अपने पैकेज मैनेजर प्रॉक्सी के रूप में सर्वर का उपयोग करने के लिए निर्देश देने की आवश्यकता है।

सर्वर पैकेज को स्थापित करके पूरी तरह से स्थापित और कॉन्फ़िगर किया गया apt-cacher-ngहै।

APT प्रॉक्सी सेट करके क्लाइंट्स को कॉन्फ़िगर करने की आवश्यकता है - फ़ाइल को जोड़कर /etc/apt/apt.conf.d/01proxy, जिसमें यह है (जहाँ "आपका apt-server" आपके सर्वर का नाम या IP पता है):

Acquire::http { Proxy "http://your-apt-server:3142"; };

हो गया - अब पैकेज सर्वर द्वारा कैश किया जाएगा, कोई फर्क नहीं पड़ता कि आप किन स्रोतों का उपयोग करते हैं या आपके पास कौन सा सिस्टम संस्करण है (उदाहरण के लिए 10.04 सर्वर का उपयोग 9.10,10.04 और 11.04 क्लाइंट द्वारा बिना किसी समस्या या विरोध के किया जा सकता है)।


यदि आपके पास क्लाइंट लैपटॉप है जो नेटवर्क के बीच घूमता है, तो यह थोड़ा अधिक जटिल हो जाता है - मैंने एक स्क्रिप्ट बनाई है जो नेटवर्क पते के आधार पर सही प्रॉक्सी सेट करती है; स्क्रिप्ट निष्पादन योग्य और अंदर है /etc/network/if-up.d/apt-proxy। DHCP सर्वर से IPv4 पता प्राप्त करने पर, स्क्रिप्ट संबंधित नेटवर्क के लिए सही apt-cacher सर्वर सेट करेगी:

#!/bin/sh

set -e
# Don't bother when lo is configured.
if [ "$IFACE" = lo ]; then
    exit 0
fi
# Only run from ifup.
if [ "$MODE" != start ]; then
    exit 0
fi
# currently only cares about IPv4
if [ "$ADDRFAM" != inet ] && [ "$ADDRFAM" != NetworkManager ]; then
    exit 0
fi
# only run for DHCP-assigned addresses
if [ "$DHCP4_IP_ADDRESS" = "" ]; then
    exit 0
fi

# we're matching on network *broadcast* address,
#  not the specific IP address we were assigned
case "$DHCP4_BROADCAST_ADDRESS" in
    10.3.141.255)
        PROXY='Acquire::http::Proxy "http://my-home-server:3142";';
        ;;
    192.168.154.255)
        PROXY='Acquire::http::Proxy "http://work-server.foo.bar.example.com:3142";';
        ;;
    # add as needed
    *)
        # unknown, no proxying
        PROXY=""
        ;;
esac

# set the proxy
FNAME="/etc/apt/apt.conf.d/01proxy"
echo -n "$PROXY">$FNAME

exit 0

apt-cacher-ng भी IPv6 का समर्थन करता है (मुझे याद है कि कुछ अन्य समाधान नहीं थे)।
अज़ेंडेल

11
एक साल बाद, मैं पर चला गया है squid-deb-proxyऔर squid-deb-proxy-client: zeroconf वास्तव में ग्राहकों पर शून्य कॉन्फ़िगरेशन का मतलब है, जो खानाबदोश उपयोगकर्ताओं के लिए बेहद उपयोगी है - और अगर कोई सर्वर जवाब नहीं देता है, तो ग्राहक डायरेक्ट डाउनलोड करने में चूक करता है।
पिस्कवर

apt-cacher-ng बेकार है, यह verry छोटी गाड़ी है, पैकेज डाउनलोड करने पर लटका हुआ है। उदाहरण के लिए मैंने देखा कि यह 150 एमबी सिर्फ 30 एमबी के पैकेज के लिए डाउनलोड किया
plolover

apt-cacher-ng पूरी तरह से काम करता है। आपके सिस्टम में कुछ गड़बड़ है। सटीक स्क्वीड-डिबेट-प्रॉक्सी पर स्क्वीड को स्थापित करना चाहता है। उस पर जोर देता है।
केन शार्प

कैश के साथ काम करने के लिए अब यह सबसे अच्छा उपाय है pbuilder। यह बॉक्स से बाहर काम किया। यह भी लगता है कि zeroconf(2016 में) के लिए समर्थन है , लेकिन मैं (अभी तक) अपने अंत पर काम करने के लिए नहीं मिल सका।
एलेक्सिस विलके जुले


6

मैं debmirrorउपयोगिता का उपयोग करते हुए एक स्थानीय दर्पण स्थापित करना पसंद करता हूं ।

यहाँ एक उदाहरण है।

debmirror --progress --verbose --nosource --method=ftp --passive \
 --host=ftp.osuosl.org --root=pub/ubuntu \
 --dist=lucid,lucid-updates,lucid-security,lucid-backports \
 --section=main,restricted,universe,multiverse --arch=amd64 \
 /d2/ftp/mirror/ubuntu-lucid

मैं इसे सप्ताह में एक बार चलाता हूं, और इसे एक या अधिक "पैचवेल" की स्थापना के आधार के रूप में उपयोग करता हूं। उदाहरण के लिए...

 cd /d2/ftp/mirror/
 cp -al ubuntu-lucid ubuntu-lucid-20100908

यह ट्री की लिंक की गई प्रतिलिपि बनाता है (लगभग शून्य डिस्क स्थान का उपयोग करता है) जिसे मैं अपने प्रत्येक स्थानीय सर्वर को उपयुक्त स्रोतों में सूचीबद्ध कर सकता हूं।


5
आपको ubumirror की जांच करनी चाहिए, यह संग्रह में एक सुविधा पैकेज है जिसमें वह सब है जो पहले से ही आपके लिए सेट है। यह आधिकारिक दर्पण का उपयोग करता है।
जॉर्ज कास्त्रो

2

छोटे नेटवर्क (जैसे घर / छोटे कार्यालय) में, मैंने अच्छे परिणाम के साथ apt-cacher-ng का उपयोग किया है। मैंने नवीनतम संस्करणों की जाँच नहीं की है, लेकिन मुझे पता है कि इसे सर्वर और क्लाइंट दोनों के सावधान सेटअप की आवश्यकता है, और यह उन ग्राहकों के लिए सबसे उपयुक्त है जिन्हें केवल आपके स्थानीय नेटवर्क से अपडेट मिलेगा।

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


1

apt-cacher स्थापित करने के लिए सबसे आसान नहीं था और यह एक डिस्ट-अपग्रेड से नहीं बचेगा।

क्लाइंट पर squid-deb-proxy, सर्वर पर स्थापित करें squid-deb-proxy-client। यह zeroconf Avahi का उपयोग करता है, इसलिए कोई कॉन्फ़िगरेशन आवश्यक नहीं है।

यदि आप सिर्फ डीबीएस से अधिक कैश करना चाहते हैं, तो मैं स्क्विड के साथ परेशान नहीं करूंगा। अपाचे ट्रैफिक सर्वर अगली बड़ी चीज है। http://trafficserver.readthedocs.org


स्क्वीड-डिबेट-प्रॉक्सी प्रॉक्सी स्क्वीड स्थापित करने पर जोर देता है। और apt-cacher लंबा मर चुका है, apt-cacher-ng वह जगह है जहाँ पर है।
केन शार्प
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.