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

Dar*_*zer 128 proxy add-apt-repository

我正在尝试按照wiki.linaro.org(在我的 Ubuntu 10.04 VM 上)上的“在 Ubuntu 10.04(Lucid)和 10.10(Maverick)主机上安装交叉工具链”说明进行操作。第一步是:

sudo add-apt-repository ppa:linaro-maintainers/toolchain
Run Code Online (Sandbox Code Playgroud)

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

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

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

当我在 Firefox 中打开https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain时,我得到“连接超时”。然后我进入 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
Run Code Online (Sandbox Code Playgroud)

我也尝试将它们更改为:

$ set | grep -i proxy
HTTPS_PROXY=gateway:8080
HTTP_PROXY=gateway:8080
http_proxy=gateway:8080
https_proxy=gateway:8080
Run Code Online (Sandbox Code Playgroud)

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

Acquire::http::proxy "http://gateway:8080/";
Acquire::https::proxy "https://gateway:8080/";
Run Code Online (Sandbox Code Playgroud)

但我继续遇到同样的错误。

我该如何解决这个问题?

更新:我跟着指示接受的答案,以“问题加入资料库,并从终端背后的代理连接”,并进一步得到:

$ 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
Run Code Online (Sandbox Code Playgroud)

我想知道“HTTP fetch error”是否意味着我还需要将“Defaults env_keep = http_proxy”添加到/etc/sudoers...

更新 #2:我补充说:

Defaults env_keep="http_proxy"
Defaults env_keep="https_proxy"
Run Code Online (Sandbox Code Playgroud)

...如错误 516032 的评论 18 中所示,但我仍然收到相同的“gpgkeys:HTTP 获取错误 7:无法连接到主机”错误。

这很奇怪:

$ sudo env | grep proxy
https_proxy=https://gateway:8080
Run Code Online (Sandbox Code Playgroud)

...因为 http_proxy 不存在。

任何建议表示赞赏。

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

$ 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)
Run Code Online (Sandbox Code Playgroud)

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

小智 200

除了配置代理之外,还可以sudo使用以下-E选项告诉保留环境:

export http_proxy=http://<proxy>:<port>
export https_proxy=http://<proxy>:<port>
sudo -E add-apt-repository ppa:linaro-maintainers/toolchain
Run Code Online (Sandbox Code Playgroud)

使用用户名和密码:

export https_proxy=https://<username>:<password>@<proxy>:<port>
Run Code Online (Sandbox Code Playgroud)

  • -E(在完成上述所有其他操作之后)让它为我工作。 (15认同)
  • 是的,`https_proxy` 配置是必要的... :P (2认同)
  • 如何永久添加代理并避免 -E 开关?我已经使用添加的行正确配置了 /etc/environment 文件...谢谢 (2认同)

小智 40

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

sudo apt-key adv --keyserver-options http-proxy=http://USER:PASSWORD@PROXY_URL:PORT/ --keyserver keyserver.ubuntu.com --recv-keys GPG_KEY
Run Code Online (Sandbox Code Playgroud)

并相应地替换大写字母。如果您使用的是没有任何用户身份验证(即用户名和密码)的代理,请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
Run Code Online (Sandbox Code Playgroud)

在哪里,

USER_ID=user
PASSWORD=abc123
PROXY_URL=10.10.2.21
PORT=3128
Run Code Online (Sandbox Code Playgroud)

如果您没有用户身份验证,只需使用,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886
Run Code Online (Sandbox Code Playgroud)

  • 这实际上并没有“修复” add-apt-repository 命令执行。事实上,它围绕它的一项任务工作。至少需要一个额外的命令: sudoedit /etc/apt/sources.list.d/XXXX.list + 手动版本添加 deb URLs... (3认同)

小智 10

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

export https_proxy=....
Run Code Online (Sandbox Code Playgroud)

仅设置 http_proxy 是不够的。

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

代码:

sudo su
add-apt-repository ppa:........
Run Code Online (Sandbox Code Playgroud)


小智 6

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

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

因此,如果没有 SSH 输出并从外部服务器中获取密钥、下载并在本地安装,您可以从下面列出的服务器中指定密钥服务器并指定端口:

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

例如:

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys XXXXX
Run Code Online (Sandbox Code Playgroud)

砰,瞧!