No puedo agregar el repositorio PPA detrás del proxy


14

Estoy tratando de agregar el repositorio de ppa (como raíz) con el siguiente comando:

export HTTP_PROXY="http://firstname.surname@xxx.com:my_pass@165.x.x.232:8080"
add-apt-repository ppa:nilarimogard/webupd8


Traceback (most recent call last):
  File "/usr/bin/add-apt-repository", line 125, in <module>
    ppa_info = get_ppa_info_from_lp(user, ppa_name)
  File "/usr/lib/python2.7/dist-packages/softwareproperties/ppa.py", line 84, in get_ppa_info_from_lp
    curl.perform()
pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

Lamentablemente no funciona. Parece que curl se está conectando al proxy, pero el proxy dice que se requiere autenticación. He intentado con .curlrc, http_proxy env en su lugar, pero no funciona.

strace -e network,write -s1000 add-apt-repository ppa:nilarimogard/webupd8
socket(PF_INET6, SOCK_DGRAM, IPPROTO_IP) = 4
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 4
connect(4, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("165.x.x.232")}, 16) = -1 EINPROGRESS (Operation now in progress)
getsockopt(4, SOL_SOCKET, SO_ERROR, [0], [4]) = 0
getpeername(4, {sa_family=AF_INET, sin_port=htons(8080), sin_addr=inet_addr("165.x.x.232")}, [16]) = 0
getsockname(4, {sa_family=AF_INET, sin_port=htons(46025), sin_addr=inet_addr("161.20.75.220")}, [16]) = 0
sendto(4, "CONNECT launchpad.net:443 HTTP/1.1\r\nHost: launchpad.net:443\r\nUser-Agent: PycURL/7.22.0\r\nProxy-Connection: Keep-Alive\r\nAccept: application/json\r\n\r\n", 146, MSG_NOSIGNAL, NULL, 0) = 146
recvfrom(4, "HTTP/1.1 407 Proxy Authentication Required\r\nProxy-Authenticate: BASIC realm=\"proxy\"\r\nCache-Control: no-cache\r\nPragma: no-cache\r\nContent-Type: text/html; charset=utf-8\r\nProxy-Connection: close\r\nSet-Cookie: BCSI-CS-91b9906520151dad=2; Path=/\r\nConnection: close\

¿Quizás es porque hay un signo @ en el nombre de usuario? Wget funciona con proxy bien.

Relacionado: ¿Cómo agrego un repositorio detrás de un proxy?

Ambiente

Ubuntu 12.04

curl 7.22.0 (x86_64-pc-linux-gnu) libcurl / 7.22.0 OpenSSL / 1.0.1 zlib / 1.2.3.4 libidn / 1.23 librtmp / 2.3

Características del rizo: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

ACTUALIZAR

Cuando se agregan credenciales a .curlrc

cat ~/.curlrc 
proxy = 165.x.x.232:8080
proxy-user = name.surname@xxx.com:mypass0

Parece funcionar para el rizo liso .

curl www.google.com | head

* Proxy auth using Basic with user 'name.surname@xxx.com'
GET HTTP://www.google.com HTTP/1.1
Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
HTTP/1.1 302 Found

También HTTPS:

curl -v https://www.google.com | head
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'name.surname@xxx.com'
> CONNECT www.google.com:443 HTTP/1.1
> Host: www.google.com:443
> Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
    > User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1     zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Proxy-Connection: Keep-Alive
< HTTP/1.1 200 Connection established
* Proxy replied OK to CONNECT request
* successfully set certificate verify locations

Pero aún no funciona cuando se agrega el certificado ppa.

pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

CABEZALES DE RIZO

Encabezados enviados:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
Proxy-Authorization: Basic cGVvcGxlcmVhbGx5c2hvdWxkQHNhbml0aXplcG9zdHM=
User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
Proxy-Connection: Keep-Alive

Respuesta:

HTTP/1.1 200 Connection established

CABEZAS DE PIEL

Encabezados enviados:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
User-Agent: PycURL/7.22.0
Proxy-Connection: Keep-Alive
Accept: application/json

Respuesta:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: BASIC realm="proxy"

Parece que PyCURL no reenvía ninguna Autorización cuando se solicita.


Gracias, lo he intentado pero esto no ayuda. Para asegurarme de que este no sea el caso, he incluido mis credenciales en .curlrc (sin escapar de @ parece funcionar para el comando curl estándar), pero no para pycurl. Ver la sección actualizada.
kenorb

Gracias, pensé que me había perdido algo. He informado el error aquí: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb

¿También ha configurado https_proxy? Ver error bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey

Quizás sea un problema relacionado con sesiones y variables de entorno. Puede intentar exportar http_proxy y https_proxy en / etc / profile, luego reiniciar la máquina (si es posible) e intentarlo nuevamente.
jap1968

En relación con lo que dice jap1968 sobre mí, me aseguré de que tanto http_proxy como HTTP_PROXY estén configurados (y https_proxy y HTTPS_PROXY). Gracias a la distinción entre mayúsculas y minúsculas de Linux, esas son en realidad dos variables diferentes y, lo mejor de todo, no todos los programas usarán una u otra. De acuerdo, suena más como un problema con la forma en que se envía la combinación de nombre de usuario / contraseña (debido a '@'), pero vale la pena intentarlo de todos modos.
YellowApple

Respuestas:


10

Solución alternativa si apt-getaún funciona detrás del proxy

  • agregar fuentes manualmente a /etc/apt/sources.list
  • agregar clave gpg

Agregar fuentes manualmente

Creo que en launchpad.net cada ppa todavía contiene una pequeña descripción de cómo agregar fuentes manualmente. El sitio de launchpad para su ppa mencionado ppa:nilarimogard/webupd8es https://launchpad.net/~nilarimogard/+archive/webupd8 . Si se desplaza hacia abajo, verá una etiqueta expandible Detalles técnicos sobre este PPA . Si lo expande, encontrará la descripción de cómo agregar fuentes manualmente. Agregue las siguientes líneas a mencionado/etc/apt/sources.list

deb http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu quantal main 
deb-src http://ppa.launchpad.net/nilarimogard/webupd8/ubuntu quantal main 

Por supuesto, tiene que ajustar quantal a cualquier versión que esté utilizando actualmente.

Agregar la clave de firma

La descripción también contiene una clave de firma . Esto es importante, para que su sistema siempre pueda verificar que realmente tiene acceso a una dirección ppa confiable. En el caso de su ppa que es 1024R/4C9D234C(también se puede encontrar en Detalles técnicos sobre este PPA ), donde el número detrás de la barra es importante. Puede agregar la huella digital a través del apt-keyprograma. Por lo general, realizarías el siguiente comando

 sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 4C9D234C

Agregar si apt-keyno funciona a través del proxy

Como ya tuvo problemas con el add-apt-repositoryprograma, esto podría no funcionar tampoco. Entonces, en su lugar, puede descargar y agregar la clave de 1024 bits manualmente. Si wgetfunciona, puede hacerlo en un solo paso.

wget "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C" -O out && sudo apt-key add out && rm out

De lo contrario, sea seguro " http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C ", por ejemplo, /path/keyy úselo sudo apt-key add /path/keypara agregarlo.

Cerrar con lo habitual

Luego, debe actualizar la información del repositorio apt-get updatey luego debería poder descargar los paquetes.

Recursos

Mi favorito personal sobre cómo usar el mecanismo de empaquetado (lamentablemente en alemán): http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

La versión de launchpad también menciona todos los puntos importantes: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Dado que es atípico para usar apt-key de la manera descrita sólo he encontrado la información en las páginas del manual, man apt-key.

Respuesta relacionada que describe más o menos la forma estándar de instalar ppa's manualmente: /ubuntu//a/38029/128349


@kenorb no sabe si recibes una notificación si edito mi publicación, así que: ping: "posible solución"
LeoR

Si su problema es que el puerto 11371 está bloqueado en su firewall corporativo, ahora puede usar el puerto 80 en su lugar: "sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 4C9D234C "
leszek.hanusz

7

En realidad, parece ser mucho más fácil que la respuesta publicada anteriormente. Solo necesita "sudo" para saber que está detrás de un proxy y funcionará sin esfuerzo. Para hacer esto, debe exportar su proxy httpy httpsla forma en que generalmente lo hace:

export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/

y luego agregar Defaults env_keep="https_proxy"al final del /etc/sudoersarchivo. Después de esto, debería poder agregar el ppa usando el comando:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

o usar

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

si no quieres modificar el /etc/sudoersarchivo. La -Eopción exporta variables de entorno al usuario sudo.

He dado una descripción detallada sobre esto aquí en mi blog .


1

Asegúrese de que el proxy apt esté configurado como a continuación

sudo vi /etc/apt/apt.conf

agregue la siguiente configuración de proxy y guarde el archivo

Acquire::http::proxy "http ://proxy.company.com:port/";
Acquire::https::proxy "https ://proxy.company.com:port/";
Acquire::ftp::proxy "ftp://proxy.company.com:port/";

Además, exportar siguiendo en la Terminal antes de ejecutar el comando

export http_proxy=http ://proxy.company.com:port/
export https_proxy=https ://proxy.company.com:port/

Esto debería funcionar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.