मैं प्रॉक्सी के पीछे PPA रिपॉजिटरी नहीं जोड़ सकता


14

मैं निम्नलिखित कमांड के साथ ppa रिपॉजिटरी (रूट के रूप में) जोड़ने की कोशिश कर रहा हूं:

export HTTP_PROXY="http://firstname.surname@xxx.com:my_pass@165.x.x.232:8080"
add-apt-repository ppa:nilarimogard/webupd8


Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 125, in <module>
    ppa_info = get_ppa_info_from_lp(user, ppa_name)
  File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 84, in get_ppa_info_from_lp
    curl.perform()
pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

दुर्भाग्य से यह काम नहीं करता है। ऐसा लगता है कि कर्ल प्रॉक्सी से जुड़ रहा है, लेकिन प्रॉक्सी कहता है कि प्रमाणीकरण आवश्यक है। मैंने इसके बजाय .curlrc, http_proxy env के साथ प्रयास किया है, लेकिन यह काम नहीं करता है।

strace -e network,write -s1000 add-apt-repository ppa:nilarimogard/webupd8
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 4
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("165.x.x.232")}, 16) = -1 EINPROGRESS (Operation now in progress)
getsockopt(4, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
getpeername(4, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("165.x.x.232")}, [16]) = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(46025), sin_addr=inet_addr("161.20.75.220")}, [16]) = 0
sendto(4, "CONNECT launchpad.net:443 HTTP/1.1\r\nHost: launchpad.net:443\r\nUser-Agent: PycURL/7.22.0\r\nProxy-Connection: Keep-Alive\r\nAccept: application/json\r\n\r\n", 146, MSG_NOSIGNAL, NULL, 0) = 146
recvfrom(4, "HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: BASIC realm=\"proxy\"\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/html; charset=utf-8\r\nProxy-Connection: close\r\nSet-Cookie: BCSI-CS-91b9906520151dad=2; Path=/\r\nConnection: close\

शायद यह इसलिए है क्योंकि उपयोगकर्ता नाम में @ चिह्न है? विगो ठीक प्रॉक्सी के साथ काम करता है।

संबंधित: मैं प्रॉक्सी के पीछे से रिपॉजिटरी कैसे जोड़ सकता हूं?

वातावरण

उबुन्टु 12.04

कर्ल 7.22.0 (x86_64-pc-linux-gnu) libcurl / 7.22.0 ओपनएसएसएल / 1.0.1 zlib / 1.2.3.4 लिबिडन / 1.23 लाइब्रेटम्प / 2.3

कर्ल की विशेषताएं: GSS-Negotiate IDN IPv6 लार्जफाइल NTLM NTLM_WB एसएसएल लिबास TLS-SRP

अपडेट करें

जब क्रेडेंशियल्स को .curlrc में जोड़ा जाता है

cat ~/.curlrc 
proxy = 165.x.x.232:8080
proxy-user = name.surname@xxx.com:mypass0

यह सादे कर्ल के लिए काम करने लगता है ।

curl www.google.com | head

* Proxy auth using Basic with user 'name.surname@xxx.com'
GET HTTP://www.google.com HTTP/1.1
Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
HTTP/1.1 302 Found

इसके अलावा HTTPS:

curl -v https://www.google.com | head
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'name.surname@xxx.com'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
    > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1     zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Proxy-Connection: Keep-Alive
< HTTP/1.1 200 Connection established
* Proxy replied OK to CONNECT request
* successfully set certificate verify locations

लेकिन अभी भी ppa सर्टिफिकेट जोड़ते समय काम नहीं करता है।

pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

CURL हेडर्स

हेडर भेजे गए:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
Proxy-Authorization: Basic cGVvcGxlcmVhbGx5c2hvdWxkQHNhbml0aXplcG9zdHM=
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Proxy-Connection: Keep-Alive

जवाब दे दो:

HTTP/1.1 200 Connection established

प्यारेलाल हेडर्स

हेडर भेजे गए:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
User-Agent: PycURL/7.22.0
Proxy-Connection: Keep-Alive
Accept: application/json

जवाब दे दो:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: BASIC realm="proxy"

ऐसा लगता है कि PyCURL अनुरोध किए जाने पर किसी भी प्राधिकरण को फिर से नहीं भेजता है।


धन्यवाद, मैंने कोशिश की है, लेकिन यह मदद नहीं करता है। यह सुनिश्चित करने के लिए कि यह मामला नहीं है, मैंने अपने क्रेडेंशियल्स को .curlrc में शामिल किया है (भागने के बिना @ मानक कर्ल कमांड के लिए काम करने लगता है), लेकिन pycurl के लिए नहीं। अद्यतन अनुभाग देखें।
kenorb

धन्यवाद, मैंने सोचा कि मैं कुछ याद किया। मैंने यहाँ बग की सूचना दी है: Bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb

क्या आपने https_proxy भी सेट किया है? बग Bugs.launchpad.net/ubuntu/+ource/software-properties/+bug/…
popey

हो सकता है कि यह सत्र और पर्यावरण से संबंधित समस्या है। आप http_proxy और https_proxy को / etc / प्रोफाइल में निर्यात करने का प्रयास कर सकते हैं, फिर मशीन को रिबूट (यदि संभव हो) और फिर से कोशिश करें।
jap1968

मेरे ऊपर जो जाप 1968 कह रहा है, उससे संबंधित, मैंने यह सुनिश्चित किया है कि http_proxy और HTTP_PROXY दोनों सेट हैं (और https_proxy और HTTPS_PROXY)। लिनक्स के केस-सेंसिटिविटी के लिए धन्यवाद, वे वास्तव में दो अलग-अलग चर हैं - और, सबसे अच्छा, सभी प्रोग्राम एक या दूसरे का उपयोग नहीं करेंगे। दी, यह एक समस्या की तरह लगता है कि उपयोगकर्ता नाम / पासवर्ड संयोजन कैसे भेजा जा रहा है ('@' के कारण), लेकिन यह वैसे भी शॉट के लायक है।
येलोएप्पल

जवाबों:


10

apt-getप्रॉक्सी के पीछे काम करने पर वर्कअराउंड

  • मैन्युअल रूप से स्रोतों को जोड़ें /etc/apt/sources.list
  • gpg कुंजी जोड़ें

स्रोतों को मैन्युअल रूप से जोड़ना

मुझे लगता है कि launchpad.net पर हर ppa में अभी भी एक छोटा विवरण है कि मैन्युअल रूप से स्रोतों को कैसे जोड़ा जाए। अपने उल्लेख किया पीपीए के लिए लॉन्चपैड साइट ppa:nilarimogard/webupd8है https://launchpad.net/~nilarimogard/+archive/webupd8 । यदि आप नीचे स्क्रॉल करते हैं तो आपको इस पीपीए के बारे में एक विस्तार योग्य लेबल तकनीकी विवरण दिखाई देता है । यदि आप इसका विस्तार करते हैं, तो आप विवरण को मैन्युअल रूप से जोड़ने के तरीके का वर्णन करते हैं। उल्लिखित निम्न पंक्तियों को जोड़ें/etc/apt/sources.list

deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu quantal main 
deb-src http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu quantal main 

निश्चित रूप से आपको क्वांटल को समायोजित करना होगा कि आप वर्तमान में जो भी संस्करण उपयोग कर रहे हैं।

हस्ताक्षर कुंजी जोड़ना

विवरण में एक हस्ताक्षर कुंजी भी है । यह महत्वपूर्ण है, ताकि आपका सिस्टम हमेशा यह सत्यापित कर सके कि आप वास्तव में एक भरोसेमंद ppa- पता तक पहुँच सकते हैं। आपके ppa के मामले में 1024R/4C9D234C( जो कि इस PPA के बारे में तकनीकी विवरण के तहत पाया जा सकता है ), जहां स्लैश के पीछे की संख्या महत्वपूर्ण है। आप apt-keyप्रोग्राम के माध्यम से फिंगरप्रिंट जोड़ सकते हैं । आमतौर पर आप निम्न कमांड निष्पादित करेंगे

 sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4C9D234C

यदि apt-keyप्रॉक्सी के माध्यम से काम नहीं करता है तो जोड़ना

चूंकि आपको पहले से ही समस्या थी add-apt-repository इस कार्यक्रम में यह काम नहीं कर सकता है। तो इसके बजाय आप 1024 बिट कुंजी को मैन्युअल रूप से डाउनलोड और जोड़ सकते हैं। अगर wgetकाम करता है तो आप एक कदम में कर सकते हैं।

wget "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C" -O out && sudo apt-key add out && rm out

अन्यथा सुरक्षित ” http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C " जैसे /path/keyऔर sudo apt-key add /path/keyइसे जोड़ने के लिए उपयोग करें।

सामान्य के साथ बंद करें

बाद में आपको रिपॉजिटरी जानकारी को अपडेट apt-get updateकरना होगा और फिर आपको पैकेज डाउनलोड करने में सक्षम होना चाहिए।

साधन

पैकेजिंग तंत्र (जर्मन में दुख की बात) का उपयोग करने के बारे में मेरा व्यक्तिगत पसंदीदा: http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

लॉन्चपैड संस्करण में सभी महत्वपूर्ण बिंदुओं का भी उल्लेख है: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

चूंकि यह वर्णित तरीके से उपयुक्त-कुंजी का उपयोग करने के लिए अनैतिक है, इसलिए मुझे केवल मैन पेजों में जानकारी मिली, man apt-key

संबंधित उत्तर जो बहुत ज्यादा ppa के मैन्युअल रूप से स्थापित करने के मानक तरीके का वर्णन करता है: /ubuntu//a/38029/128349


@kenorb नहीं जानता कि अगर आपको मेरी पोस्ट को संपादित करने पर कोई सूचना मिलती है, तो: पिंग: "संभव वर्कअराउंड"
लियोआर

यदि आपकी समस्या यह है कि आपके कॉर्पोरेट फ़ायरवॉल में पोर्ट 11371 अवरुद्ध है, तो आप अब इसके बजाय पोर्ट 80 का उपयोग कर सकते हैं: "sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv- कीज़ 4C9D234C "
leszek.hanusz

7

वास्तव में यह पहले से पोस्ट किए गए उत्तर की तुलना में बहुत आसान लगता है। आपको यह जानने के लिए बस "सुडो" की आवश्यकता है कि आप एक प्रॉक्सी के पीछे हैं और यह सहजता से काम करेगा। ऐसा करने के लिए, आप के लिए आपके प्रॉक्सी निर्यात करने के लिए की जरूरत है httpऔर httpsजिस तरह से आप आमतौर पर करते हैं:

export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/

और फिर फ़ाइल के Defaults env_keep="https_proxy"अंत में जोड़ें /etc/sudoers। इसके बाद आपको कमांड का उपयोग करके ppa जोड़ने में सक्षम होना चाहिए:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

या उपयोग करें

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

यदि आप /etc/sudoersफ़ाइल को संशोधित नहीं करना चाहते हैं । -Eविकल्प sudo उपयोगकर्ता के लिए वातावरण चर निर्यात करता है।

मैंने अपने ब्लॉग पर यहाँ इसके बारे में विस्तृत विवरण दिया है ।


1

सुनिश्चित करें कि उपयुक्त प्रॉक्सी नीचे की तरह सेट है

sudo vi /etc/apt/apt.conf

निम्नलिखित प्रॉक्सी सेटिंग्स जोड़ें और फ़ाइल को सहेजें

Acquire::http::proxy "http ://proxy.company.com:port/";
Acquire::https::proxy "https ://proxy.company.com:port/";
Acquire::ftp::proxy "ftp://proxy.company.com:port/";

इसके अलावा टर्मिनल में निम्नलिखित निर्यात करने से पहले आप कमांड चलाते हैं

export http_proxy=http ://proxy.company.com:port/
export https_proxy=https ://proxy.company.com:port/

यह काम करना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.