Como faço para que o add-apt-repository funcione através de um proxy?

119

Estou tentando seguir as instruções "Instalando o Cross Toolchain no Ubuntu 10.04 (Lucid) e 10.10 (Maverick) Hosts" no wiki.linaro.org (na minha VM do Ubuntu 10.04). O primeiro passo é:

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

Mas quando corro, recebo:

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

Acho que o problema está na minha configuração do servidor proxy do meu empregador, principalmente no HTTPS.

Quando abri https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain no Firefox, recebi "A conexão expirou". Entrei no Firefox Preferences -> Advanced -> Network -> Settings ... e configurei o Proxy HTTP como "gateway" e Port para 8080, e verifiquei "Use este servidor proxy para todos os protocolos". Em seguida, a página foi carregada. Isso apóia minha teoria.

Tentei definir as variáveis ​​de ambiente http_proxy e https_proxy (tanto em maiúsculas quanto em minúsculas):

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

Também tentei alterá-los para:

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

E tentei adicionar esta segunda linha ao /etc/apt/apt.conf:

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

Mas continuo recebendo o mesmo erro.

Como faço para solucionar isso?

Atualização: Eu segui as instruções na resposta aceita para "Problema ao adicionar repositórios e conectar-se a partir do terminal atrás de um proxy" e fui além:

$ 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

Gostaria de saber se o "erro de busca HTTP" significa que eu também preciso adicionar "Padrões env_keep = http_proxy" para /etc/sudoers...

Atualização # 2: adicionei:

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

... como no Comentário 18, referente ao bug 516032 , mas ainda assim recebo o mesmo erro "gpgkeys: HTTP buscar erro 7: não foi possível conectar ao host".

E isso é curioso:

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

... porque http_proxy não está lá.

Qualquer conselho é apreciado.

Atualização # 3: Como o host da minha VM é um laptop, levei-o para casa e tentei lá (sem proxies):

$ 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)

Funcionou. Portanto, o problema está relacionado à configuração do proxy. Mas suponho que tenho uma solução alternativa.

Daryl Spitzer
fonte
Apenas para referência askubuntu.com/questions/60217/...
Deepak Rajput

Respostas:

183

Além de configurar proxies, diga sudopara preservar o ambiente com a -Eopção:

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

com nome de usuário e senha:

export https_proxy=https://<username>:<password>@<proxy>:<port>
Amal Pillai
fonte
Ya realmente funcionou
Shashwat Kumar
14
-E (depois de fazer todas as outras coisas acima) fez funcionar para mim.
cschooley
2
e sim, a https_proxyconfiguração era necessária ...: P
monkut
11
Como adicionar proxy permanentemente e evitar a opção -E? Eu tenho o arquivo / etc / environment configurado corretamente com as linhas adicionadas ... Obrigado
Enrique
11
De man sudo: -E, --preserve-envindica para a política de segurança que o usuário deseja preservar suas variáveis ​​de ambiente existentes. A política de segurança pode retornar um erro se o usuário não tem permissão para preservar a environment.m
Pablo A
39

Use o código a seguir em um terminal para adicionar a chave gpg atrás do proxy,

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

E substitua letras maiúsculas de acordo. Se você estiver usando um proxy sem autenticação de usuário (por exemplo, nome de usuário e senha), use-o http-proxy=http://PROXY_URL:PORT/.

Por exemplo, para GPG_KEY=C2514567EEA14886você poder usar,

sudo apt-key adv --keyserver-options http-proxy=http://user:[email protected]:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

Onde,

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

Se você não possui autenticação de usuário, basta usar,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886
Patxi Gomez
fonte
3
Na verdade, isso não "corrige" a execução do comando add-apt-repository. Na verdade, ele trabalha em torno de uma de suas tarefas. Pelo menos um comando adicional é necessária: sudoedit /etc/apt/sources.list.d/XXXX.list + edição manual para adicionar o deb URLs ...
Chucky
Seria perfeito se você adicionar algumas informações sobre como corrigir o proxy eternamente. Solução fornecida exige um monte de digitação
Danatela
9

Finalmente! Você precisa definir https_proxy via:

export https_proxy=....

apenas definir http_proxy não é suficiente.

E eu precisava executar o comando add-apt-repository como root, NÃO via sudo.

Código:

sudo su
add-apt-repository ppa:........
DaRattler
fonte
6

Parece que a configuração do proxy está configurada, mas de alguma forma o servidor não pode ser contatado ...

Eu tive um problema muito semelhante ao que resolvi assim: O proxy corporativo permite apenas as portas 80 e 443 por razões de segurança; portanto, quando estiver configurado, como o protocolo HKP está usando a porta 11371, ele não permitirá que você atravesse.

Portanto, sem SSH e obtendo a chave de um de seus servidores externos, fazendo o download e instalando-a localmente, você pode especificar o servidor de chave dentre os listados abaixo e especificar a porta:

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

por exemplo:

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

Boom, Voila!

leroyse
fonte
Sim. Isso funcionou, para mim, ao instalar o Mono no Debian 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
ken
3

O motivo pelo qual sua sudoersalteração não funcionou conforme o esperado é que, em vez de:

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

Você deveria ter escrito:

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

Verifique também se o espaço entre Defaultse env_keepé uma guia a cada vez.

Urhixidur
fonte
3

Eu consegui solucionar isso editando /usr/lib/python3/dist-packages/softwareproperties/ppa.pye adicionando

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

sob a seguinte linha

"--keyserver", self.keyserver,

Mais informações básicas

ppa.pyé o script python usado add-apt-repositorypara chamar gpg. Às vezes parece haver um bug com o gpg onde ele não usa a variável de ambiente http_proxy. Isso pode ser confirmado visualizando o arquivo /root/.gnupg/dirmngr.confe verificando honor-http-proxyse não está comentado.

Junior Leota
fonte
3

Essa abordagem de quatro etapas funcionou para mim em uma VM Ubuntu 17.04 atrás de um proxy corporativo.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng e deixe falhar
  2. sudo apt update e procure uma mensagem de erro como 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 agora vai funcionar

Observe que a VM do host está executando um CNTLMservidor proxy na porta 3128.

thegreendroid
fonte
11
Você não precisa esperar pelo apt para lhe dizer qual é a chave. Está presente nos detalhes técnicos do PPA : "Impressão digital: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6"
muru
Isso é verdade, mas achei esse processo um pouco mais fácil.
precisa
1

Isso me ajudou:

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

Eu acho que existem algumas variáveis ​​de ambiente que não são necessárias no comando, mas elas não prejudicam.

leo
fonte
1

Adicione o PPA manualmente ao seu /etc/apt/sources.list:

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

Salve o arquivo e execute sudo apt-get update. Este erro pode aparecer:

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

Execute o comando a seguir para aceitar a chave do PPA, lembrando-se de alterar a chave (5BB92C09DB82666C) do PPA correspondente.

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

Corra sudo apt-get updatee pronto.

Ref: Como adicionar PPAs da barra de ativação no add-apt-repositorycomando Debian Via

Uma alegria
fonte
1

Na verdade, eu encontro os mesmos problemas, foi assim que encontrei esta página.

  • as variáveis ​​de ambiente http_proxy (diferenciam maiúsculas de minúsculas) e https_proxy (qualquer que seja o caso) fazem alguma coisa. Não configurá-las falha no primeiro estágio; a configuração das variáveis ​​de ambiente parece ter algum efeito; falhará se você não os exportar

    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.
    

    (o resto é bem sucedido - desta vez)

A coisa é, às vezes, ele só ficar preso e termina com a mensagem de tempo limite de costume: Não é possível adicionar PPA: "Erro ao ler https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7 ' Falha na conexão com a porta 443 do launchpad.net: O tempo limite da conexão expirou ') "'.

... mas estou trapaceando, estou fazendo tudo isso como raiz. Uma solução fácil é editar o arquivo / etc / profile ou, no Ubuntu / Mint, basta adicionar um script em /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}'

Ah, sim, também há algo sobre curl (que é usado pelo apt-add-repository, a propósito). O manual diz para adicionar .curlrc no seu diretório pessoal. Como o apt-add-directory é próprio da raiz, significa adicioná-lo ao /root/.curlrc:

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

Uma boa idéia é fazer o mesmo em seu próprio ~ / .curlrc

Além disso, ativar o proxy no / etc / wgetrc é uma boa coisa a fazer, embora não tenha nada a ver com a pergunta, estou apenas salvando outra pesquisa no Google (se você ler isso, terá várias com um proxy ) ...

Marabiloso
fonte
1

Em /etc/apt/apt.conf.d/01proxyadicionar algo como isto

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

Isso fará o proxy de todos os downloads de aptidão, mas acho que essa é a única maneira de fazer isso no back-end. Se o seu proxy suportar, você também pode usar um URL como o http://my.proxy:port/www.target.site.com/urlque eu sei que funciona paraapt-cache-ng

Não tenho certeza se o próprio add-apt-repository usa essas configurações, mas se você não conseguir fazer isso funcionar, sempre poderá adicionar o repositório ao seu /etc/apt/sources.listou/etc/apt/sources.list.d/*mytoolchain*

Desde 11.10, também há um recurso de ferramenta cruzada no repositório principal, apenas apt-get install gcc-arm-linux-gnueabihf. Também existem cadeias de ferramentas cruzadas disponíveis no emdebian, e algumas instruções aqui: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

user72421
fonte
user72421: como você sabia que o proxy deveria ser prefixado com 01 e não com outro número?
Jgomo3
Não funciona com apt-get & keyserver
Vik
0

As variáveis ​​de ambiente de todo o sistema devem ser realmente adicionadas a /etc/environment(use sudoor gksu), mas o erro relatado a você parece indicar que nenhum dado de gpg foi encontrado. Idéias:

  • verifique as configurações de proxy (se você tiver acesso)
  • verifique se o proxy está, de alguma forma, filtrando a saída do tráfego criptografado.
  • execute um netstat contínuo para ver se a conexão com o proxy está realmente sendo feita
  • último recurso seria tcpdump e inspecionar em wireshark
  • tente um túnel http;)
t0m5k1
fonte
0

Outra solução é adicionar um proxy.confarquivo APT ,/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/";
Dan Anderson
fonte