ken*_*orb 14 aptitude apt ppa curl
我正在尝试使用以下命令添加 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')
Run Code Online (Sandbox Code Playgroud)
不幸的是它不起作用。看起来 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\
Run Code Online (Sandbox Code Playgroud)
也许是因为用户名中有@ 符号?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
Run Code Online (Sandbox Code Playgroud)
它似乎适用于普通 curl。
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
Run Code Online (Sandbox Code Playgroud)
还有 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
Run Code Online (Sandbox Code Playgroud)
但是添加ppa证书时仍然不起作用。
pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')
Run Code Online (Sandbox Code Playgroud)
卷发头
发送的标题:
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
Run Code Online (Sandbox Code Playgroud)
回复:
HTTP/1.1 200 Connection established
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
回复:
HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: BASIC realm="proxy"
Run Code Online (Sandbox Code Playgroud)
似乎 PyCURL 在请求时不会重新发送任何授权。
Leo*_*eoR 10
apt-get仍然在代理后面工作的解决方法/etc/apt/sources.list我认为在 launchpad.net 上,每个 ppa 仍然包含一个关于如何手动添加源的小说明。您提到的 ppa 的启动板站点ppa:nilarimogard/webupd8是https://launchpad.net/~nilarimogard/+archive/webupd8。如果向下滚动,您会看到一个可扩展的标签Technical details about this 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
Run Code Online (Sandbox Code Playgroud)
当然,您必须将 quantal 调整为您当前使用的任何版本。
该描述还包含一个签名密钥。这很重要,以便您的系统始终可以验证您是否确实访问了可信赖的 ppa 地址。如果你的 ppa 是1024R/4C9D234C(也可以在关于这个 PPA 的技术细节下找到),斜线后面的数字很重要。您可以通过apt-key程序添加指纹。通常你会执行以下命令
sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4C9D234C
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
否则安全“ 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
实际上,这似乎比之前发布的答案要容易得多。您只需要“sudo”即可知道您在代理后面,它会毫不费力地工作。要做到这一点,你需要导出您的代理http和https你平时的方式:
export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/
Run Code Online (Sandbox Code Playgroud)
然后添加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
Run Code Online (Sandbox Code Playgroud)
如果你不想修改/etc/sudoers文件。该-E选项将环境变量导出给 sudo 用户。
我在我的博客上对此进行了详细描述。
| 归档时间: |
|
| 查看次数: |
29167 次 |
| 最近记录: |