मैं yum-3.2.29-81, curl / libcurl 7.19.7-53 के साथ CentOS6.x का उपयोग कर रहा हूं और यही मुद्दा है। मैं एक फ़ायरवॉल के पीछे yum सर्वर है और ssh का उपयोग कर एक SOCKS5 प्रॉक्सी सेटअप पर yum का उपयोग करना चाहता हूं। आदर्श रूप से, मैं इसे बिना टॉक्स, प्रॉक्साइहांस या किसी अन्य "मोज़ा" उपयोगिताओं की आवश्यकता के बिना करना चाहता हूं।
मैंने SOCKS5 कनेक्शन का उपयोग करके सेटअप किया:
ssh -D 40000 dmz-server
मैंने yum python स्रोतों में घूमकर देखा और उन्होंने pycurl का उपयोग किया, जो libcurl को लपेटता है (कृपया यह भी ध्यान दें कि सभी प्रॉक्सी वातावरण चर - http_proxy, HTTP_PROXY, all_proxy, ALL -PROXY, आदि ।-- शुरू में अपरिभाषित थे)। इसके अलावा, मैंने सत्यापित किया कि ~ / .cllrc खाली था, इसलिए इसने मेरे परीक्षा परिणाम को प्रभावित नहीं किया।
मैं देखना चाहता था कि क्या मुझे मोज़े के माध्यम से बात करने के लिए कर्ल मिल सकता है। 5 प्रॉक्सी:
curl --socks5 127.0.0.1:40000 http://some-server/some-url
सफलतापूर्वक दूरस्थ वेब पेज लौटाया, इसलिए यह एक अच्छा संकेत था - लिबस्कुरल दिखाना SOCKS5 प्रॉक्सी का उपयोग कर सकता है । हालांकि, एक पर्यावरण चर को परिभाषित करना
http_proxy=socks5://127.0.0.1:40000
पर्याप्त नहीं था:
http_proxy=socks5://127.0.0.1:40000 curl http://some-server/some-url
अनुत्तीर्ण होना।
इस बिंदु पर, मैंने पायथन टेस्ट प्रोग्राम टेस्टोस्टेरोन का उपयोग करने के लिए स्विच किया :
import pycurl
import sys
sys.stderr.write("Testing %s\n" % pycurl.version)
c = pycurl.Curl()
c.setopt(c.URL, 'http://some-server/some-url')
c.setopt(c.WRITEFUNCTION, sys.stdout.write)
c.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
c.perform()
c.close()
अब चल रहा है
./test.py
लाने में विफल रहेगा, लेकिन चल रहा है
http_proxy=socks5://127.0.0.1:40000 ./test.py
होगा सफलतापूर्वक लाने http: // कुछ-सर्वर / कुछ-यूआरएल । तो मुझे ऐसा लगता है कि यह (वास्तव में प्राचीन) yum / libcurl संयोजन है कि CentOS6 वाले जहाज ठीक से libcurl के भीतर प्रॉक्सी प्रकार सेट नहीं कर रहे हैं। मुझे लगता है कि यह क्या हो रहा है कि PROXYTYPE मोजे_5: // योजना के बजाय HTTP_proxy वातावरण चर में निर्दिष्ट URL के भीतर एक मानक HTTP प्रॉक्सी को डिफ़ॉल्ट कर रहा है ।
किसी भी स्थिति में, /usr/lib/python2.6/site-packages/urlgrabber/grabber.py को निम्न पैच ने मुझे SOCKSS प्रॉक्सी के माध्यम से http: // yum रिपॉजिटरी तक पहुंचने की अनुमति देने के लिए काम किया। PyCurlFileObject के भीतर # _set_opts (स्वयं, opts = {}) जोड़ें,:
if self.scheme == 'http':
proxy = os.getenv('http_proxy') or os.getenv('HTTP_PROXY') or os.getenv('all_proxy') or os.getenv('ALL_PROXY')
if proxy and proxy.find("socks5://") != -1:
self.curl_obj.setopt(pycurl.PROXYTYPE, pycurl.PROXYTYPE_SOCKS5)
1205 के आसपास, ठीक पहले
# ssl options
if self.scheme == 'https':
इस परिवर्तन के साथ,
http_proxy=socks5://127.0.0.1:40000 yum install <package_name>
सफलतापूर्वक मेरे सभी http: // yum रिपॉजिटरी को फ़ायरवॉल के दूसरी तरफ SOCKS5 ssh प्रॉक्सी के माध्यम से जोड़ता है।
बेशक, कोई भी यम के प्रत्येक आह्वान से पहले इसे निर्दिष्ट करने से बचने के लिए एक शेल के भीतर http_proxy पर्यावरण चर निर्यात कर सकता है ।