当前位置: 首页>>技术问答>>正文


如何让add-apt-repository通过代理工作?

, ,

问题描述

我试图遵循“Installing Cross Toolchain on Ubuntu 10.04 (Lucid) and 10.10 (Maverick) Hosts” instructions on wiki.linaro.org(在我的Ubuntu 10.04 VM上)。第一步是:

sudo add-apt-repository ppa:linaro-maintainers/toolchain

但是当我运行时,我得到:

Error reading https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain: <urlopen error [Errno 110] Connection timed out>

我猜测问题出在我的雇主代理服务器的配置上,特别是HTTPS。

当我在Firefox中打开https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain时,我得到了“连接超时”。然后我进入Firefox首选项 – >高级 – >网络 – >设置…并将HTTP代理设置为”gateway”并将端口设置为8080,并选中“对所有协议使用此代理服务器”。然后加载页面。这支持了我的理论。

我试过设置http_proxy和https_proxy环境变量(包括大写和小写):

$ set | grep -i proxy
HTTPS_PROXY=https://gateway:8080
HTTP_PROXY=http://gateway:8080
http_proxy=http://gateway:8080
https_proxy=https://gateway:8080

我也尝试将它们改为:

$ set | grep -i proxy
HTTPS_PROXY=gateway:8080
HTTP_PROXY=gateway:8080
http_proxy=gateway:8080
https_proxy=gateway:8080

我试着将第二行添加到/etc/apt/apt.conf中:

Acquire::http::proxy "http://gateway:8080/";
Acquire::https::proxy "https://gateway:8080/";

但是我仍然会遇到同样的错误。

我如何解决这个问题?

更新:我遵循accepted answer“Problem adding repositories and connecting from terminal behind a proxy”的说明并进一步:

$ sudo add-apt-repository ppa:linaro-maintainers/toolchain
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv 1DD749B890A6F66D050D985CF1FCBACA7BE1F97B
gpg: requesting key 7BE1F97B from hkp server keyserver.ubuntu.com
gpgkeys: HTTP fetch error 7: couldn't connect to host
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

我想知道“HTTP抓取错误”是否意味着我也需要将“Defaults env_keep = http_proxy”添加到/etc/sudoers中…

更新#2:我补充说:

Defaults env_keep="http_proxy"
Defaults env_keep="https_proxy"

…在Comment 18 for bug 516032中,但我仍然得到相同的“gpgkeys:HTTP提取错误7:无法连接到主机”错误。

这很奇怪:

$ sudo env | grep proxy
https_proxy=https://gateway:8080

…因为http_proxy不存在。

任何建议表示赞赏。

更新#3:由于我的虚拟机的主机是一台笔记本电脑,我把它带回家并在那里尝试(没有代理):

$ sudo add-apt-repository ppa:linaro-maintainers/toolchain
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver keyserver.ubuntu.com --recv 1DD749B890A6F66D050D985CF1FCBACA7BE1F97B
gpg: requesting key 7BE1F97B from hkp server keyserver.ubuntu.com
gpg: key 7BE1F97B: public key "Launchpad Linaro Overlay PPA" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

有效。所以问题与代理配置有关。但我想我有一个解决方法。

最佳解决方案

除了配置代理之外,请告知sudo使用-E选项保留环境:

export http_proxy=http://<proxy>:<port>
export https_proxy=http://<proxy>:<port>
sudo -E add-apt-repository ppa:linaro-maintainers/toolchain

用户名和密码:

export https_proxy=https://<username>:<password>@<proxy>:<port>

次佳解决方案

在终端中使用以下代码在代理后添加gpg密钥,

sudo apt-key adv --keyserver-options http-proxy=http://USER:PASSWORD@PROXY_URL:PORT/ --keyserver keyserver.ubuntu.com --recv-keys GPG_KEY

并相应地替换大写字母。如果您使用的是未经任何用户身份验证(即用户名和密码)的代理,请改为使用http-proxy=http://PROXY_URL:PORT/

例如,您可以使用GPG_KEY=C2514567EEA14886

sudo apt-key adv --keyserver-options http-proxy=http://user:abc123@10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

哪里,

USER_ID=user
PASSWORD=abc123
PROXY_URL=10.10.2.21
PORT=3128

如果您没有简单使用用户身份验证,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

第三种解决方案

最后!您需要通过以下方式设置https_proxy:

export https_proxy=....

只设置http_proxy是不够的。

我需要以root身份执行add-apt-repository命令,而不是通过sudo执行。

码:

sudo su
add-apt-repository ppa:........

第四种方案

似乎代理配置设置,但不知何故服务器无法联系…

我有一个非常类似的问题,我解决了这样的问题:公司代理只允许端口80和443出于安全原因,因此在安装时事件,因为HKP协议使用端口11371,它不会让你通过。

因此,除了SSH-ing外,从外部服务器获取密钥,下载并在本地安装它,您可以从下面列出的密钥服务器中指定密钥服务器并指定端口:

http://sks-keyservers.net/overview-of-pools.php

例如。:

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys XXXXX

Boom,Voila!

第五种方案

您的sudoers更改没有按预期工作的原因是,而不是:

    Defaults env_keep="http_proxy"
    Defaults env_keep="https_proxy"

你应该写下:

    Defaults env_keep+="http_proxy"
    Defaults env_keep+="https_proxy"

还要确保Defaultsenv_keep之间的空间每次都是一个选项卡。

第六种方案

我通过编辑/usr/lib/python3/dist-packages/softwareproperties/ppa.py并添加了解决方法

"--keyserver-options", "http-proxy=<proxy_url>",

在下面的行

"--keyserver", self.keyserver,

更多的背景信息

ppa.pyadd-apt-repository用来调用gpg的python脚本。有时似乎有一个gpg的错误,它不使用http_proxy环境变量。这可以通过查看文件/root/.gnupg/dirmngr.conf并检查honor-http-proxy未被注释来确认。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/552.html,未经允许,请勿转载。