Yum-3.2.29-81, curl / libcurl 7.19.7-53 ile CentOS6.x kullanıyorum ve aynı sorunu var. Bir güvenlik duvarı arkasında yum sunucuları var ve ssh kullanarak bir SOCKS5 proxy kurulumu üzerinde yum kullanmak istiyorum. İdeal olarak, bunu tsocks, proxychain veya başka bir "çoraplaştırma" yardımcı programına ihtiyaç duymadan yapmak istiyorum.
SOCKS5 bağlantısını aşağıdakileri kullanarak kurdum:
ssh -D 40000 dmz-server
Yum python kaynaklarına baktım ve libcurl'u saran pycurl kullandıklarını gördüm (ayrıca tüm proxy ortam değişkenlerinin - http_proxy, HTTP_PROXY, all_proxy, ALL_PROXY, vb. - başlangıçta tanımsız olduğunu lütfen unutmayın). Ayrıca, ~ / .curlrc'nin boş olduğunu doğruladım, bu yüzden test sonuçlarımı lekelemedi.
Çorap5 proxy üzerinden konuşmak için kıvırmak alabilir miyim görmek istedim:
curl --socks5 127.0.0.1:40000 http://some-server/some-url
libcurl gösteren - başarıyla iyi bir işaret oldu uzak web sayfası, döndürülen olabilir SOCKS5 yakınlık kullanın. Ancak, bir ortam değişkeninin tanımlanması
http_proxy=socks5://127.0.0.1:40000
yeterli değildi:
http_proxy=socks5://127.0.0.1:40000 curl http://some-server/some-url
başarısız oldu.
Bu noktada, bir Python test programı test.py kullanmaya geçtim :
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()
Şimdi koşuyor
./test.py
getirilemiyor, ancak çalışıyor
http_proxy=socks5://127.0.0.1:40000 ./test.py
http: // some-server / some-url dosyasını başarıyla getirecek . Bana öyle geliyor ki CentOS6 ile birlikte gelen bu (kuşkusuz eski) yum / libcurl kombinasyonu, libcurl içinde proxy türünü doğru şekilde ayarlamıyor. Ben oluyor ne olduğunu PROXYTYPE varsayılan http_proxy ortam değişkeninde belirtilen URL içinde socks5: // düzeni tanımlamak yerine standart bir HTTP proxy için olmasıdır .
Her halükarda, /usr/lib/python2.6/site-packages/urlgrabber/grabber.py için aşağıdaki yama, bir SOCKS5 proxy'si aracılığıyla http: // yum depolarına erişmeme izin vermek için çalıştı. PyCurlFileObject # _set_opts (self, opts = {}) içinde şunu ekleyin:
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 civarında, hemen önce
# ssl options
if self.scheme == 'https':
Bu değişiklikle,
http_proxy=socks5://127.0.0.1:40000 yum install <package_name>
SOCKS5 ssh proxy'si aracılığıyla güvenlik duvarının diğer tarafındaki tüm http: // yum depolarıma başarıyla bağlanır.
Tabii ki, her yum çağrılmasından önce belirtmekten kaçınmak için http_proxy ortam değişkenini kabuğunun içine aktarabilirsiniz .