¿Cómo consigo add-apt-repository para trabajar a través de un proxy?

119

Estoy tratando de seguir las instrucciones de "Instalación de Cross Toolchain en Ubuntu 10.04 (Lucid) y 10.10 (Maverick) Hosts" en wiki.linaro.org (en mi Ubuntu 10.04 VM). El primer paso es:

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

Pero cuando corro eso me sale:

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

Supongo que el problema es con mi configuración para el servidor proxy de mi empleador, particularmente para HTTPS.

Cuando abrí https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain en Firefox, obtuve "La conexión ha expirado". Luego entré en Preferencias de Firefox -> Avanzado -> Red -> Configuración ... y configuré Proxy HTTP en "puerta de enlace" y Puerto en 8080, y marqué "Usar este servidor proxy para todos los protocolos". Entonces la página cargada. Esto apoya mi teoría.

Intenté configurar las variables de entorno http_proxy y https_proxy (minúsculas y mayú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

También intenté cambiarlos a:

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

E intenté agregar esta segunda línea a /etc/apt/apt.conf:

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

Pero sigo recibiendo el mismo error.

¿Cómo soluciono esto?

Actualización: Seguí las instrucciones en la respuesta aceptada a "Problema al agregar repositorios y conectarse desde la terminal detrás de un proxy" y llegué más lejos:

$ 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

Me pregunto si el "error de búsqueda HTTP" significa que también necesito agregar "Valores predeterminados env_keep = http_proxy" a /etc/sudoers...

Actualización n. ° 2: agregué:

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

... como en el Comentario 18 para el error 516032 , pero sigo teniendo el mismo error "gpgkeys: HTTP fetch error 7: no se pudo conectar al host".

Y esto es curioso:

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

... porque http_proxy no está allí.

Cualquier consejo es apreciado.

Actualización n. ° 3: dado que el host de mi VM es una computadora portátil, me la llevé a casa y probé allí (sin 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
gpg: key 7BE1F97B: public key "Launchpad Linaro Overlay PPA" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

Funcionó. Entonces, el problema está relacionado con la configuración del proxy. Pero supongo que tengo una solución alternativa.

Daryl Spitzer
fuente
Solo como referencia askubuntu.com/questions/60217/…
Deepak Rajput

Respuestas:

183

Además de configurar proxies, diga sudoa preservar el entorno con la -Eopción:

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

con nombre de usuario y contraseña:

export https_proxy=https://<username>:<password>@<proxy>:<port>
Amal Pillai
fuente
Ya realmente funcionó
Shashwat Kumar
14
-E (después de hacer todas las otras cosas anteriores) funcionó para mí.
cschooley
2
y sí, la https_proxyconfiguración era necesaria ...: P
monkut
1
¿Cómo agregar proxy permanentemente y evitar el cambio -E? Tengo el archivo / etc / environment configurado correctamente con las líneas agregadas ... Gracias
Enrique
1
De man sudo: -E, --preserve-envIndica a la política de seguridad que el usuario desea preservar sus variables de entorno existentes. La política de seguridad puede devolver un error si el usuario no tiene permiso para preservar el medio ambiente.m
Pablo A
39

Use el siguiente código en una terminal para agregar la clave gpg detrás del proxy,

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

Y reemplace las letras mayúsculas en consecuencia. Si está utilizando un proxy sin ninguna autenticación de usuario (es decir, nombre de usuario y contraseña), use http-proxy=http://PROXY_URL:PORT/en su lugar.

Por ejemplo, para GPG_KEY=C2514567EEA14886que pueda usar,

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

dónde,

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

Si no tiene autenticación de usuario, simplemente use,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886
Patxi Gomez
fuente
3
En realidad, esto no "arregla" la ejecución del comando add-apt-repository. De hecho, funciona en torno a una de sus tareas. Se necesita al menos un comando adicional: sudoedit /etc/apt/sources.list.d/XXXX.list + edición manual para agregar las URL de Deb ...
Chucky
Sería perfecto si agrega alguna información sobre cómo arreglar el proxy eternamente. La solución que proporcionó requiere
MUCHA
9

¡Finalmente! Debe configurar https_proxy a través de:

export https_proxy=....

solo establecer http_proxy no es suficiente.

Y necesitaba ejecutar el comando add-apt-repository como root, NO a través de sudo.

Código:

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

Parece que la configuración del proxy está configurada, pero de alguna manera no se puede contactar al servidor ...

Tuve un problema muy similar que resolví así: el proxy corporativo solo permite el puerto 80 y 443 por razones de seguridad, por lo que cuando se configura, ya que el protocolo HKP está utilizando el puerto 11371, no lo dejará pasar.

Por lo tanto, a menos que salga SSH y obtenga la clave de uno de sus servidores en el exterior, descargándolo e instalándolo localmente, puede especificar el servidor de claves desde uno de los que se enumeran a continuación y especificar el puerto:

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

p.ej:

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

Boom, Voila!

leroyse
fuente
Sip. Esto funcionó, para mí, durante la instalación de Mono en Debian 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
ken
3

La razón por la que su sudoerscambio no funcionó como se esperaba es que en lugar de:

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

Deberías haber escrito:

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

También asegúrese de que el espacio entre Defaultsy env_keepsea ​​una pestaña cada vez.

Urhixidur
fuente
3

Logré solucionar esto editando /usr/lib/python3/dist-packages/softwareproperties/ppa.pyy agregando

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

bajo la siguiente línea

"--keyserver", self.keyserver,

Más información de fondo

ppa.pyes el script de python que usa add-apt-repositorypara llamar a gpg. A veces parece haber un error con gpg donde no usa la variable de entorno http_proxy. Esto puede confirmarse viendo el archivo /root/.gnupg/dirmngr.confy verificando que honor-http-proxyno esté comentado.

Junior Leota
fuente
3

Este enfoque de cuatro pasos funcionó para mí en una máquina virtual Ubuntu 17.04 detrás de un proxy corporativo.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng y deja que falle
  2. sudo apt update y busca un mensaje de error 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 ahora funcionará

Tenga en cuenta que la máquina virtual host está ejecutando un CNTLMservidor proxy en el puerto 3128.

thegreendroid
fuente
1
No tiene que esperar que apt le diga cuál es la clave. Está allí en los detalles técnicos de la PPA : "Huella digital: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6"
muru
Eso es cierto, pero este proceso me pareció un poco más fácil.
thegreendroid
1

Esto me ayudó a:

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

Supongo que hay algunas variables de entorno que no son necesarias en el comando pero que no dañan.

León
fuente
1

Agregue el PPA manualmente a su /etc/apt/sources.list:

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

Guarde el archivo y ejecútelo sudo apt-get update. Este error puede 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

Ejecute el siguiente comando para aceptar la clave para el PPA, recordando cambiar la clave (5BB92C09DB82666C) para el PPA correspondiente.

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

Corre sudo apt-get updatey listo.

Ref: Cómo agregar PPA de Launchpad en Debian a través del add-apt-repositorycomando

Una alegria
fuente
1

En realidad, me encuentro con los mismos problemas, así es como encontré esta página.

  • Las variables de entorno http_proxy (distingue entre mayúsculas y minúsculas) y https_proxy (en cualquier caso) hacen algo. No establecerlos falla en la primera etapa, establecer las variables de entorno parece tener algún efecto; fallará si no los exporta

    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.
    

    (el resto es exitoso, esta vez)

El problema es que, a veces, simplemente se atasca y termina con el mensaje de tiempo de espera habitual: No se puede agregar PPA: '"Error al leer https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7,' Error al conectar con el puerto 443 de launchpad.net: Se agotó el tiempo de espera de la conexión ') "'.

... pero estoy haciendo trampa, estoy haciendo todo esto como root. Una solución fácil es editar / etc / profile o, en Ubuntu / Mint, simplemente agregue un script en /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, sí, también está eso de curl (que es utilizado por apt-add-repository, por cierto). El manual dice agregar .curlrc en su directorio de inicio. Como apt-add-directory es propio de root, significa agregarlo a /root/.curlrc:

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

Una buena idea es hacer lo mismo en tu propio ~ / .curlrc

Además, habilitar el proxy en / etc / wgetrc es algo bueno, aunque no tiene nada que ver con la pregunta formulada, solo estoy guardando otra búsqueda en Google (si lee esto, tiene múltiples con un proxy ) ...

Marabiloso
fuente
1

En /etc/apt/apt.conf.d/01proxyagregar algo como esto

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

Esto representará todas las descargas de aptitude, pero creo que esta es la única forma de hacerlo en el back-end. Si su proxy lo admite, también puede usar una URL como la http://my.proxy:port/www.target.site.com/urlque sé que funcionaapt-cache-ng

No estoy seguro de si add-apt-repository sí mismo utiliza esta configuración, pero si no puede hacer que eso funcione, siempre puede agregar el repositorio a su /etc/apt/sources.listo/etc/apt/sources.list.d/*mytoolchain*

Desde 11.10 también hay una herramienta cruzada disponible en el repositorio principal, solo apt-get install gcc-arm-linux-gnueabihf. También hay cadenas de herramientas cruzadas disponibles de emdebian, y algunas instrucciones aquí: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

usuario72421
fuente
user72421: ¿cómo sabía que el proxy debería tener el prefijo 01 y no otro número?
jgomo3
No funciona con apt-get & keyserver
Vik
0

Las variables de entorno de todo el sistema realmente deberían agregarse a /etc/environment(use sudoo gksu), pero el error que se le informa parece indicar que no se encontraron datos gpg. Ideas:

  • verifique la configuración del proxy (si tiene acceso)
  • compruebe si el proxy de alguna manera está mezclando la salida del tráfico encriptado.
  • ejecute un netstat continuo para ver si la conexión al proxy se está haciendo realmente
  • el último recurso sería tcpdump e inspeccionar en wireshark
  • pruebe un túnel http;)
t0m5k1
fuente
0

Otra solución es agregar un proxy.confarchivo 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
fuente