![如何让 add-apt-repository 通过代理工作?](https://linux22.com/image/817270/%E5%A6%82%E4%BD%95%E8%AE%A9%20add-apt-repository%20%E9%80%9A%E8%BF%87%E4%BB%A3%E7%90%86%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
我正在尝试遵循wiki.linaro.org 上的“在 Ubuntu 10.04 (Lucid) 和 10.10 (Maverick) 主机上安装交叉工具链”说明(在我的 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。
当我打开https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain在 Firefox 中,我收到“连接已超时”的消息。然后我进入 Firefox 首选项 -> 高级 -> 网络 -> 设置...,将 HTTP 代理设置为“网关”,将端口设置为 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/";
但我仍然收到同样的错误。
我该如何解决这个问题?
更新:我按照接受的答案到“添加存储库并通过代理从终端进行连接时出现问题”并进一步得到:
$ 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"
...例如错误 516032 的评论 18,但我仍然收到相同的“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)
成功了。所以问题与代理配置有关。但我想我有一个解决方法。
答案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>
答案2
在终端中使用以下代码在代理后面添加 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:[email protected]: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
答案3
最后!您需要通过以下方式设置 https_proxy:
export https_proxy=....
仅设置http_proxy是不够的。
而且我需要以 root 身份执行 add-apt-repository 命令,而不是通过 sudo。
代码:
sudo su
add-apt-repository ppa:........
答案4
您的更改没有按预期发挥作用的原因sudoers
是:
Defaults env_keep="http_proxy"
Defaults env_keep="https_proxy"
你应该写:
Defaults env_keep+="http_proxy"
Defaults env_keep+="https_proxy"
还要确保每次Defaults
和之间的空格都是一个制表符。env_keep