プロキシの背後に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はプロキシで正常に動作します。

関連: プロキシの背後からリポジトリを追加するにはどうすればよいですか?

環境

Ubuntu 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-Negotiate IDN IPv6 Largefile 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は要求されたときに承認を再送信しないようです。


おかげで、試してみましたが、これは役に立ちません。これが当てはまらないことを確認するために、.curlrcに資格情報を含めました(@をエスケープせずに、標準のcurlコマンドで機能するようです)。しかし、pycurlでは使用しません。更新されたセクションを参照してください。
ケノーブ

おかげで、私は何かを逃したと思った。ここでバグを報告しました: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の大文字と小文字の区別により、これらは実際には2つの異なる変数です。何よりも、すべてのプログラムがどちらか一方を使用するわけではありません。確かに、ユーザー名とパスワードの組み合わせの送信方法に関する問題のように聞こえます(「@」が原因)が、とにかく一見の価値があります。
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-addressに実際にアクセスしていることを確認できます。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を手動でインストールする標準的な方法をほぼ説明している関連する回答:https : //askubuntu.com/a/38029/128349


@kenorbは、投稿を編集したときに通知を受け取るかどうかわからないので、ping:「可能な回避策」
-LeoR

問題がポート11371が企業のファイアウォールでブロックされている場合は、代わりにポート80を使用できます。「sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 4C9D234C "
leszek.hanusz 14

7

実際、以前に投稿した回答よりもはるかに簡単なようです。プロキシの背後にいることを知るために「sudo」が必要なだけで、簡単に機能します。これを行うには、あなたはあなたのために代理エクスポートする必要があるhttphttpsあなたが通常の方法を:

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.