Non riesco ad aggiungere il repository PPA dietro il proxy


14

Sto cercando di aggiungere il repository ppa (come root) con il seguente 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')

Sfortunatamente non funziona. Sembra che l'arricciatura si stia collegando al proxy, ma il proxy dice che è richiesta l'autenticazione. Ho provato con .curlrc, http_proxy env invece, ma non funziona.

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\

Forse è perché c'è @ sign nel nome utente? Wget funziona con proxy bene.

Correlati: Come posso aggiungere un repository da dietro 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

curl Caratteristiche: GSS-Negoziare IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

AGGIORNARE

Quando vengono aggiunte le credenziali in .curlrc

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

Sembra funzionare per il semplice ricciolo .

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

Anche 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

Ma non funziona ancora quando si aggiunge il certificato ppa.

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

TESTINE DI CURL

Intestazioni inviate:

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

Rispondere:

HTTP/1.1 200 Connection established

Intestazioni PyCURL

Intestazioni inviate:

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

Rispondere:

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

Sembra che PyCURL non rinvii alcuna autorizzazione quando richiesto.


Grazie, ci ho provato ma questo non aiuta. Per essere sicuro che non sia così, ho incluso le mie credenziali in .curlrc (senza escape @ sembra funzionare per il comando curl standard), ma non per pycurl. Vedi la sezione aggiornata.
Kenorb,

Grazie, pensavo di essermi perso qualcosa. Ho segnalato il bug qui: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb,

Hai anche impostato https_proxy? Vedi bug bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey

Forse si tratta di un problema relativo alle sessioni e all'ambiente. Puoi provare a esportare http_proxy e https_proxy in / etc / profile, quindi riavviare il computer (se possibile) e riprovare.
jap1968,

In relazione a ciò che jap1968 sta dicendo sopra di me, mi sono assicurato che sia impostato http_proxy e HTTP_PROXY (e https_proxy e HTTPS_PROXY). Grazie alla distinzione tra maiuscole e minuscole di Linux, queste sono in realtà due diverse variabili - e, soprattutto, non tutti i programmi useranno l'una o l'altra. Certo, sembra più un problema con il modo in cui viene inviata la combinazione nome utente / password (a causa di "@"), ma vale comunque la pena provare.
Yellow Apple

Risposte:


10

Soluzione alternativa se apt-getfunziona ancora dietro il proxy

  • aggiungi fonti manualmente a /etc/apt/sources.list
  • aggiungi la chiave gpg

Aggiunta manuale di fonti

Penso che su launchpad.net ogni ppa contenga ancora una piccola descrizione su come aggiungere manualmente le fonti. Il sito del launchpad per il tuo ppa menzionato ppa:nilarimogard/webupd8è https://launchpad.net/~nilarimogard/+archive/webupd8 . Se scorri verso il basso, vedi un'etichetta espandibile Dettagli tecnici su questo PPA . Se lo espandi trovi la descrizione su come aggiungere manualmente le fonti. Aggiungi le seguenti righe a menzionate/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 

Ovviamente devi adattare quantico a qualunque versione tu stia attualmente usando.

Aggiunta della chiave di firma

La descrizione contiene anche una chiave di firma . Questo è importante, in modo che il tuo sistema possa sempre verificare che tu abbia effettivamente accesso a un indirizzo ppa affidabile. Nel caso in cui il tuo ppa sia 1024R/4C9D234C(puoi trovare anche in Dettagli tecnici su questo PPA ), dove il numero dietro la barra è importante. È possibile aggiungere l'impronta digitale tramite il apt-keyprogramma. In genere si esegue il comando seguente

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

Aggiungendo se apt-keynon funziona tramite proxy

Dato che hai già avuto problemi con il add-apt-repositoryprogramma, potrebbe non funzionare neanche. Quindi, invece, puoi scaricare e aggiungere manualmente la chiave da 1024 bit. Se wgetfunziona, puoi farlo in un solo passaggio.

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

Altrimenti sicuro " http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C " in eg /path/keye usa sudo apt-key add /path/keyper aggiungerlo.

Chiudi con il solito

Successivamente è necessario aggiornare le informazioni sul repository apt-get updatee quindi si dovrebbe essere in grado di scaricare i pacchetti.

risorse

Il mio preferito personale su come utilizzare il meccanismo di packaging (purtroppo in tedesco): http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

La versione launchpad menziona anche tutti i punti importanti: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Dal momento che è atipico di usare apt-key nel modo descritto ho trovato solo le informazioni nelle pagine man, man apt-key.

Risposta correlata che descrive praticamente il modo standard di installare manualmente i ppa: /ubuntu//a/38029/128349


@kenorb non so se ricevi una notifica se modifico il mio post, quindi: ping: "possibile soluzione"
LeoR

Se il tuo problema è che la porta 11371 è bloccata nel tuo firewall aziendale, ora puoi usare invece la porta 80: "sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 4C9D234C "
leszek.hanusz,

7

In realtà sembra essere molto più semplice della risposta postata in precedenza. Hai solo bisogno di "sudo" per sapere che sei dietro un proxy e funzionerà senza sforzo. Per fare ciò, devi esportare il tuo proxy httpe httpsil modo in cui normalmente:

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

e quindi aggiungere Defaults env_keep="https_proxy"alla fine del /etc/sudoersfile. Dopo questo dovresti essere in grado di aggiungere il ppa usando il comando:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

o usare

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

se non si desidera modificare il /etc/sudoersfile. L' -Eopzione esporta le variabili di ambiente per l'utente sudo.

Ho fornito una descrizione dettagliata di questo qui sul mio blog .


1

Assicurarsi che il proxy apt sia impostato come di seguito

sudo vi /etc/apt/apt.conf

aggiungere le seguenti impostazioni proxy e salvare il file

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

inoltre, esportare in Terminale prima di eseguire il comando

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

Questo dovrebbe funzionare.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.