프록시 뒤에 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')

불행히도 작동하지 않습니다. curl이 프록시에 연결되어있는 것처럼 보이지만 프록시는 인증이 필요하다고 말합니다. .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\

사용자 이름에 @ 기호가 있기 때문일 수 있습니다. Wget은 프록시와 잘 작동합니다.

관련 : 프록시 뒤에서 저장소를 어떻게 추가합니까?

환경

우분투 12.04

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

curl 기능 : GSS 협상 IDN IPv6 대용량 NTLM NTLM_WB SSL libz 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')

컬 헤드

보낸 헤더 :

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

PyCURL 헤더

보낸 헤더 :

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은 요청시 승인을 다시 보내지 않는 것 같습니다.


고마워요, 시도했지만 도움이되지 않습니다. 이것이 사실이 아닌지 확인하기 위해 @를 이스케이프하지 않고 표준 curl 명령에서 작동하는 것처럼 보이지만 pycurl에는 내 자격 증명을 .curlrc에 포함 시켰습니다. 업데이트 된 섹션을 참조하십시오.
kenorb

고마워, 뭔가 빠진 줄 알았는데 버그를 여기에보고했습니다 : bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb

https_proxy도 설정 했습니까? 버그 bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey

아마도 세션 및 환경 변수와 관련된 문제 일 수 있습니다. / etc / profile에서 http_proxy 및 https_proxy를 내 보낸 다음 가능하면 머신을 재부팅하고 다시 시도하십시오.
jap1968

jap1968이 나에게 말하는 것과 관련하여 http_proxy HTTP_PROXY가 설정되어 있는지 확인했습니다 (그리고 https_proxy와 HTTPS_PROXY). Linux의 대소 문자 구분 덕분에 실제로 두 가지 변수가 있습니다. 무엇보다도 모든 프로그램이 하나 또는 다른 것을 사용하는 것은 아닙니다. 물론, '@'때문에 사용자 이름 / 비밀번호 조합이 전송되는 방식에 문제가있는 것처럼 보이지만 어쨌든 가치가 있습니다.
YellowApple

답변:


10

apt-get여전히 프록시 뒤에서 작동하는 경우의 해결 방법

  • 소스를 수동으로 추가 /etc/apt/sources.list
  • gpg 키 추가

수동으로 소스 추가

launchpad.net에서 모든 ppa에는 여전히 소스를 수동으로 추가하는 방법에 대한 작은 설명이 포함되어 있다고 생각합니다. 언급 한 ppa의 런치 패드 사이트 ppa:nilarimogard/webupd8https://launchpad.net/~nilarimogard/+archive/webupd8 입니다. 아래로 스크롤하면 이 PPA에 대한 확장 가능한 레이블 기술 정보가 표시 됩니다. 확장하면 소스를 수동으로 추가하는 방법에 대한 설명을 찾을 수 있습니다. 언급 한대로 다음 줄을 추가하십시오./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

설명 된 방식으로 apt-key를 사용하는 것은 일반적이지 않기 때문에 맨 페이지의 정보 만 찾았습니다 man apt-key.

ppa를 수동으로 설치하는 표준 방법을 거의 설명하는 관련 답변 : /ubuntu//a/38029/128349


@kenorb는 게시물을 편집 할 때 알림을 받는지 여부를 모릅니다. ping : "가능한 해결 방법"
LeoR

문제가 포트 11371이 회사 방화벽에서 차단 된 경우, 대신 포트 80을 대신 사용할 수 있습니다. "sudo apt-key adv --keyserver hkp : //keyserver.ubuntu.com : 80 --recv-keys 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

apt 프록시 가 아래와 같이 설정되어 있는지 확인하십시오

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/

이 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.