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


119

我试图遵循wiki.linaro.org(在我的Ubuntu 10.04 VM上)上的“在Ubuntu 10.04(Lucid)和10.10(Maverick)主机上安装跨工具链”的说明。第一步是:

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代理设置为“网关”,将端口设置为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提取错误”是否意味着还需要将“默认值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:由于我的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)

有效。因此,问题与代理配置有关。但是我想我有一个解决方法。


Answers:


183

除了配置代理之外,还可以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>

Ya确实工作了
Shashwat Kumar 2013年

14
-E(在完成上述所有其他操作之后)对我有用。
cschooley

2
是的,该https_proxy配置是必需的...:P
monkut 2013年

1
如何永久添加代理并避免使用-E开关?我已经正确配置了/ etc / environment文件,并添加了以下行...谢谢
恩里克

1
发件人man sudo-E, --preserve-env表示用户希望保留其现有环境变量的安全策略。如果用户没有保留环境的权限,则安全策略可能会返回错误
Pablo A,

39

在终端中使用以下代码在代理后面添加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

3
这实际上并不能“修复” add-apt-repository命令执行。实际上,它可以解决其任务之一。至少需要一个附加命令:sudoedit /etc/apt/sources.list.d/XXXX.list +手动版本以添加deb URL ...
Chucky 2014年

如果您添加一些信息以永久修复代理,那将是完美的。您提供的解决方案需要大量输入
-Danatela

9

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

export https_proxy=....

仅设置http_proxy是不够的。

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

码:

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

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

oom,瞧!


对。对我而言,这在Debian 7上安装Mono时起作用:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

3

您的sudoers更改未按预期进行的原因是:

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

您应该已经写过:

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

还要确保每次之间Defaults和之间env_keep都是空格。


3

我设法通过编辑/usr/lib/python3/dist-packages/softwareproperties/ppa.py和添加来解决此问题

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

在以下行下

"--keyserver", self.keyserver,

更多背景信息

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


3

这四步方法对我在公司代理后面的Ubuntu 17.04 VM上有效。

  1. sudo apt-add-repository ppa:brightbox/ruby-ng 让它失败
  2. sudo apt update 并寻找类似的错误消息 The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F5DA5F09C3173AA6
  3. sudo apt-key adv --keyserver-options http-proxy=http://10.0.2.2:3128 --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F5DA5F09C3173AA6
  4. sudo apt update 现在可以工作

请注意,主机VM CNTLM在端口3128上运行代理服务器。


1
您不必等待易于告诉您关键是什么。它在PPA的技术细节中:“指纹:80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6”
muru

是的,但是我发现此过程稍微容易一些。
thegreendroid

1

这对我有帮助:

sudo https_proxy='https://user:password@proxyhost:port/' \
http_proxy='http://user:password@proxyhost:port/' \
ftp_proxy='ftp://user:password@proxyhost:port/' \
no_proxy=localhost,127.0.0.0/8,10.0.0.0/8 add-apt-repository ppa:webupd8team/java

我猜想有些环境变量在命令中是不需要的,但不会造成损害。


1

将PPA手动添加到您的/etc/apt/sources.list

deb http://ppa.launchpad.net/<user>/<repo>/ubuntu trusty main

保存文件并运行sudo apt-get update。该错误可能弹出:

W: GPG error: http://ppa.launchpad.net trusty InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5BB92C09DB82666C

运行以下命令以接受PPA的密钥,并记住更改相应PPA的密钥(5BB92C09DB82666C)。

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 5BB92C09DB82666C

运行sudo apt-get update,您就完成了。

参考:如何通过add-apt-repository命令在Debian中添加Launchpad PPA


1

实际上,我遇到了同样的问题,这就是我找到此页面的方式。

  • 环境变量http_proxy(区分大小写)和https_proxy(无论大小写)都会起作用。在第一阶段不设置它们会失败,设置环境变量确实会产生一些影响。如果不导出它们将会失败

    TCRKVMW ~ $ sudo su -
    TCRKVMW ~ # export http_proxy=http://10.54.0.4:8080/
    TCRKVMW ~ # export https_proxy=http://10.54.0.4:8080/
    TCRKVMW ~ # add-apt-repository ppa:webupd8team/java
    You are about to add the following PPA:
     Oracle Java (JDK) Installer (automatically downloads and installs Oracle JDK7 / JDK8 / JDK9). There are no actual Java files in this PPA.
    

    (其余成功-这次)

问题是,有时它会卡住并以通常的超时消息结束:无法添加PPA:'“读取https://launchpad.net/api/1.0/~webupd8team/+archive/java时出错:(7,'无法连接到launchpad.net端口443:连接超时')“'。

...但是我在作弊,我是以root身份做的所有事情。一个简单的解决方案是编辑/ etc / profile,或者在Ubuntu / Mint上,只需在/etc/profile.d中添加一个脚本:

    TCRKVMW ~ $ sudo su -c 'F=/etc/profile.d/proxy.sh S="export proxy_http=\"http://192.168.99.4\"\nexport proxy_https=\"http://192.168.99.4\"" ; echo -e ${S} > ${F} ; chmod 700 ${F}'

哦,是的,还有关于curl的问题(顺便说一下,它由apt-add-repository使用)。该手册说在您的主目录中添加.curlrc。因为apt-add-directory是root自己的,所以意味着将其添加到/root/.curlrc中:

    proxy_http="http://192.168.99.4"
    proxy_https="http://192.168.99.4"

一个好主意是用自己的〜/ .curlrc做同样的事情

另外,在/ etc / wgetrc中启用代理是一件好事,尽管它与所问的问题无关,我只是在Google上为您保存了另一次搜索(如果您阅读此书,则可能有多个代理使用) )...


1

/etc/apt/apt.conf.d/01proxy添加这样的东西

Acquire::http { Proxy "http://192.168.0.99:3142"; };

这将代理所有智能下载,但是我认为这是在后端执行此操作的唯一方法。如果您的代理支持,您还可以使用一个http://my.proxy:port/www.target.site.com/url我知道可以使用的网址apt-cache-ng

我不确定add-apt-repository本身是否使用这些设置,但是如果您无法执行此操作,则始终可以将存储库添加到您的/etc/apt/sources.list/etc/apt/sources.list.d/*mytoolchain*

从11.10开始,主仓库中也有一个交叉工具apt-get install gcc-arm-linux-gnueabihf。emdebian还提供了跨工具链,并在此处提供了一些说明:http ://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/


user72421:您怎么知道代理应该以01为前缀而不是其他数字?
jgomo3 2013年

不适用于apt-get和keyserver
Vik

1

我所做的是通过curl使用http,而不是尝试代理apt-key或gpg:

curl -sSL \' http: //keyserver.ubuntu.com/pks/lookup?op=get&search=0xBBEBDCB318AD50EC6865090613B00F1FD2C19886 '\ | sudo apt键添加-

此方法应被用来代替的apt-key命令行或http_proxyhttps_proxy环境变量设置(这是在易于密钥的最新版本的禁用)。



0

应该将系统范围的环境变量确实添加到/etc/environment(使用sudogksu),但是报告给您的错误似乎表明未找到gpg数据。想法:

  • 检查代理设置(如果您有权访问)
  • 检查代理是否以某种方式破坏了加密流量的输出。
  • 运行一个连续的netstat来查看是否与代理建立了连接
  • 最后的办法是在wireshark中进行tcpdump和检查
  • 尝试http隧道;)

0

另一种解决方案是添加一个APT proxy.conf文件,/etc/apt/apt.conf.d/proxy.conf

Acquire::http::Proxy "http://your.proxy.server.here.com:port/";
Acquire::https::Proxy "http://your.proxy.server.here.com:port/";
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.