যদি না পাওয়া যায় তবে আমি কীভাবে একটি প্রক্সি উপেক্ষা করব?


15

ল্যান এপ্ট ডাউনলোডগুলি ক্যাশে করার সর্বোত্তম উপায়ে নির্দেশাবলী অনুসরণ করছেন ? , আমি আমার স্থানীয় নেটওয়ার্কে একটি ক্যাশিং প্রক্সি স্থাপন করেছি। যেহেতু সেই মেশিনটি সর্বদা আপ থাকে না, তাই অনুপলব্ধ থাকলে আমি প্রক্সিটি ব্যবহার না করে উত্সের তালিকাটি রিফ্রেশ করতে এবং প্যাকেজ ইনস্টল করতে সক্ষম হতে চাই।

আমি এর ম্যানুয়াল পৃষ্ঠায় ইতিমধ্যে অ্যাকুইয়ার গ্রুপ বিভাগটি পড়েছি apt.conf(5), তবে আমি "নিরব-ব্যর্থ" এর মতো বিকল্প খুঁজে পাইনি।

এই মুহুর্তে sudo apt-get updateএবং সম্পর্কিত আদেশগুলি ব্যর্থ হয়েছে কারণ কোনও সংযোগ স্থাপন করা যায়নি। সুতরাং আমি কীভাবে ক্লায়েন্টকে কনফিগার করব যাতে প্রক্সিটি উপলভ্য না হলে তা এড়ানো যায়?


আপনি কি জিরোকনফ আবিষ্কারটি ব্যবহার করছেন বা আপনি প্রতিটি ক্লায়েন্টকে ম্যানুয়ালি প্রক্সি সেট করেছেন?
হোর্হে কাস্ত্রো

সম্ভাব্য ফায়ারওয়াল / অক্ষম সম্প্রচারের কারণে আমি ম্যানুয়ালি প্রক্সি সেট করছি।
লেকেনস্টেইন

উত্তর:


20

একটি অনির্ধারিত সেটিং আছে Acquire::http::ProxyAutoDetect,। এই সেটিংটিতে বাইনারিটির পুরো পথ থাকা উচিত এবং এতে যুক্তি থাকতে পারে না। কমান্ডটি ব্যবহার করার জন্য প্রক্সি আউটপুট করা উচিত (উদাহরণ http://10.0.0.1:8000:)।

উপরোক্ত তথ্য দেওয়া, একটি স্ক্রিপ্ট তৈরি করা যেতে পারে যা সেট করার আগে একটি প্রক্সি চেষ্টা করে। যদি কোনও প্রক্সি উপলব্ধ না হয় তবে একটি সরাসরি সংযোগ ব্যবহার করা উচিত।

নীচে এমন একটি প্রক্সি সনাক্তকরণ স্ক্রিপ্ট চেষ্টা করে http://10.0.0.1:8000/এবং http://10.0.0.2:8000প্রক্সি।

কোডটি এতে রাখুন /etc/apt/detect-http-proxy:

#!/bin/bash
# detect-http-proxy - Returns a HTTP proxy which is available for use

# Author: Lekensteyn <lekensteyn@gmail.com>

# Supported since APT 0.7.25.3ubuntu1 (Lucid) and 0.7.26~exp1 (Debian Squeeze)
# Unsupported: Ubuntu Karmic and before, Debian Lenny and before

# Put this file in /etc/apt/detect-http-proxy and create and add the below
# configuration in /etc/apt/apt.conf.d/30detectproxy
#    Acquire::http::ProxyAutoDetect "/etc/apt/detect-http-proxy";

# APT calls this script for each host that should be connected to. Therefore
# you may see the proxy messages multiple times (LP 814130). If you find this
# annoying and wish to disable these messages, set show_proxy_messages to 0
show_proxy_messages=1

# on or more proxies can be specified. Note that each will introduce a routing
# delay and therefore its recommended to put the proxy which is most likely to
# be available on the top. If no proxy is available, a direct connection will
# be used
try_proxies=(
10.0.0.1:8000
10.0.0.2:8000
)

print_msg() {
    # \x0d clears the line so [Working] is hidden
    [ "$show_proxy_messages" = 1 ] && printf '\x0d%s\n' "$1" >&2
}

for proxy in "${try_proxies[@]}"; do
    # if the host machine / proxy is reachable...
    if nc -z ${proxy/:/ }; then
        proxy=http://$proxy
        print_msg "Proxy that will be used: $proxy"
        echo "$proxy"
        exit
    fi
done
print_msg "No proxy will be used"

# Workaround for Launchpad bug 654393 so it works with Debian Squeeze (<0.8.11)
echo DIRECT

উপরের প্রক্সি সনাক্তকরণ স্ক্রিপ্টটি ব্যবহার করতে এখন, এপিটি অবশ্যই কনফিগার করা উচিত, সুতরাং নিম্নলিখিত কোডটি এতে প্রবেশ করুন /etc/apt/apt.conf.d/30detectproxy:

# Fail immediately if a file could not be retrieved. Comment if you have a bad
# Internet connection
Acquire::Retries 0;

# undocumented feature which was found in the source. It should be an absolute
# path to the program, no arguments are allowed. stdout contains the proxy
# server, stderr is shown (in stderr) but ignored by APT
Acquire::http::ProxyAutoDetect "/etc/apt/detect-http-proxy";

কিছু হোস্টকে প্রক্সাইড হতে বাধা দিতে আমি ফাইলটিতে পরবর্তী কোডটিও রেখেছি।

# Override the default proxy, DIRECT causes a direct connection to be used
Acquire::http::Proxy {
    deb.opera.com DIRECT;
    dl.google.com DIRECT;
};

ডিফল্টরূপে, স্ক্রিপ্টটি কোনও প্রক্সি ব্যবহৃত হয়েছে কিনা তা আউটপুট করে। এটি অক্ষম করতে, সম্পাদনা করুন /etc/apt/detect-http-proxyএবং এতে পরিবর্তন show_proxy_messages=1করুন show_proxy_messages=0


লেকেনস্টেইন, আমি কি আপনার বিকল্প হিসাবে পপেট-এপ-ক্যাচার -এনজি তে পেস্ট করার অনুমতি পেতে apt-cacher-ng::clientপারি?
গার্থ কিড

1
অনুমতি দেওয়া হয়েছে, আপনি যা
খুশি

2
আমি খুব খুশি হলাম যখন আমি কিছুক্ষণ পিছনে এপিটি-ক্যাচার-এনজিও সেট আপ করেছি তখন আমি এই উত্তরটি পেয়েছি। আমি আমার হোম-কম্পিউটারগুলির একটিতে (192.168.0.2) এপ্ট-ক্যাচার-এনজি ইনস্টল করেছি। স্ক্রিপ্ট, আমার ক্ষেত্রে জন্য আরেকটু Overkill অনুভূত তাই আমি একটি সরলীকৃত সনাক্ত-HTTP-প্রক্সি লিখেছিলেন: if nc -w1 -z 192.168.0.2 3142; then printf http://192.168.0.2:3142; else printf DIRECT; fi। আসুন আশা করি
অনির্ধারিত

2
আমি আপনার সুবিধার জন্য স্ক্রিপ্টটি ব্যাপকভাবে নথিভুক্ত করেছি, আপনি যদি আকারের বিষয়ে চিন্তা করেন তবে এটিকে আরও খাটো করে তুলতে পারেন i=192.168.0.2;nc -zw1 $i 3142&&echo http://$i:3142/||echo DIRECT: পি
লেকেনস্টেইন

3

বিকল্পটি ব্যবহার করে - Acquire::http::Proxy-Auto-Detect( apt.confম্যান পৃষ্ঠাটি দেখুন) - এটি করার জন্য এখন আনুষ্ঠানিকভাবে সমর্থিত একটি উপায় রয়েছে । আচরণটি পুরনো অননুমোদিত Acquire::http::ProxyAutoDetect(নতুন / পুরানো কনফিগারেশন বিকল্পগুলিতে হাইফেনের উপস্থিতি / নোটের নোট) নোটের মতো , এটি মূলত পশ্চাদপদভাবে সামঞ্জস্যপূর্ণ তবে প্রসারিত হয়েছে ...

ডকুমেন্টেশনটি উন্নত করার জন্য আমি এপটি রক্ষণাবেক্ষণকারীদের কাছে একটি প্যাচ জমা দেওয়ার প্রক্রিয়াধীন, তবে যেহেতু এটি এপটির একটি সংস্করণে রূপান্তরিত হওয়ার সম্ভাবনা নেই যা বেশ কিছু সময়ের জন্য ডিস্ট্রো রিলিজ সহ জাহাজগুলি পাঠায়, আমি এর পাঠ্যটি অন্তর্ভুক্ত করব প্রস্তাবিত প্যাচ এখানে:

Acquire::http::Proxy-Auto-Detectব্যবহারের জন্য http প্রক্সি আবিষ্কার করার জন্য একটি বাহ্যিক কমান্ড নির্দিষ্ট করতে ব্যবহার করা যেতে পারে। এপিটি কমান্ডটি একাধিকবার ডাকতে পারে এবং কমান্ডটিতে প্রথম এবং একমাত্র পরামিতি হিসাবে একটি ইউআরআই পাস করবে। এপিটি প্রক্সির আউটপুট দেওয়ার কমান্ডটি প্রত্যাশা করে যা স্টাইলের একক লাইন হিসাবে প্রশ্নে ইউআরআইয়ের সাথে যোগাযোগ করতে ব্যবহার করা হবে http://proxy:port/, বা DIRECTকোনও প্রক্সি ব্যবহার করা উচিত নয় শব্দটি ব্যবহার করতে হবে। কোনও আউটপুট নির্দেশ করে না যে জেনেরিক প্রক্সি সেটিংস ব্যবহার করা উচিত should

মনে রাখবেন যে হোস্ট-নির্দিষ্ট প্রক্সি কনফিগারেশন ইতিমধ্যে সেট করা থাকলে কোনও হোস্টের জন্য স্বতঃ-সনাক্তকরণ ব্যবহার করা হবে না Acquire::http::Proxy::HOST

বাহ্যিক কমান্ডের সাথে মিথস্ক্রিয়া সনাক্ত করতে, সেট করুন Debug::Acquire::http=yesএবং / অথবা Debug::Acquire::https=yesউদাহরণস্বরূপ -oকমান্ড লাইন প্যারামিটার ব্যবহার করে ।

লক্ষ্য করুন কার্যক্ষম, সংস্করণ একটি প্রাক রিলিজ সংস্করণ ব্যবহার করা হয় 1.3 ~ exp2 1.3 তাহলে একটি বাগ (সম্ভবত 1.3.1 দ্বারা নির্ধারিত) যা বিশ্লেষণ করতে কার্যক্ষম ঘটায় আছে দ্বারা stderr stdout- এ সহ বহিরাগত কমান্ডের।


1

/etc/apt/apt.conf.d/02proxy:

Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect.sh";

/usr/local/bin/apt-proxy-detect.sh:

#!/bin/bash
IP=192.168.88.1
PORT=3142
if nc -w1 -z $IP $PORT; then
    echo -n "http://${IP}:${PORT}"
else
    echo -n "DIRECT"
fi

কমান্ড লাইন

  • অনুপস্থিত থাকলে এটি nc( sudo apt-get install netcat) কাজ করা দরকার ।
  • নিশ্চিত হও chmod +x /usr/local/bin/apt-proxy-detect.sh
  • স্ক্রিপ্ট নির্দিষ্ট করার সময় পুরো পথটি ব্যবহার করুন।

কিভাবে এটা কাজ করে

যদি এটি কোনও প্রক্সিতে সংযোগ করতে পারে তবে এটি প্রক্সি প্রিন্ট করে এটিপি এটি ব্যবহার করে। যদি এটি না করতে পারে তবে এটি DIRECT এবং এপিটি চিগগুলি সাধারণত প্রিন্ট করে।

সস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.