Je ne peux pas ajouter de référentiel PPA derrière le proxy


14

J'essaie d'ajouter le référentiel ppa (en tant que root) avec la commande suivante:

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

Malheureusement ça ne marche pas. Il semble que curl se connecte au proxy, mais le proxy indique que l'authentification est requise. J'ai essayé avec .curlrc, http_proxy env à la place, mais cela ne fonctionne pas.

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\

C'est peut-être parce qu'il y a @ signe dans le nom d'utilisateur? Wget fonctionne correctement avec proxy.

Connexe: Comment ajouter un référentiel derrière un proxy?

Environnement

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 Caractéristiques: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

MISE À JOUR

Lors de l'ajout d'informations d'identification dans .curlrc

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

Il semble fonctionner pour la boucle simple .

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

HTTPS également:

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

Mais ne fonctionne toujours pas lors de l'ajout d'un certificat ppa.

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

CURL HEADERS

En-têtes envoyés:

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

Répondre:

HTTP/1.1 200 Connection established

EN-TÊTES PyCURL

En-têtes envoyés:

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

Répondre:

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

Il semble que PyCURL ne renvoie aucune autorisation à la demande.


Merci, j'ai essayé mais cela n'aide pas. Pour m'assurer que ce n'est pas le cas, j'ai inclus mes informations d'identification dans .curlrc (sans échapper @ semble fonctionner pour la commande curl standard), mais pas pour pycurl. Voir la section mise à jour.
kenorb

Merci, je pensais avoir raté quelque chose. J'ai signalé le bogue ici: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb

Avez-vous également défini https_proxy? Voir bug bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey

C'est peut-être un problème lié aux sessions et aux variables d'environnement. Vous pouvez essayer d'exporter http_proxy et https_proxy dans / etc / profile, puis redémarrez la machine (si possible) et réessayez.
jap1968

En ce qui concerne ce que jap1968 dit au-dessus de moi, je m'étais assuré que http_proxy et HTTP_PROXY étaient définis (et https_proxy et HTTPS_PROXY). Grâce à la sensibilité à la casse de Linux, ce sont en fait deux variables différentes - et, mieux encore, tous les programmes n'utiliseront pas l'une ou l'autre. Certes, cela ressemble plus à un problème avec la façon dont la combinaison nom d'utilisateur / mot de passe est envoyée (à cause de '@'), mais ça vaut quand même le coup.
YellowApple

Réponses:


10

Solution de contournement si apt-getfonctionne toujours derrière le proxy

  • ajouter manuellement des sources à /etc/apt/sources.list
  • ajouter une clé gpg

Ajout de sources manuellement

Je pense que sur launchpad.net, chaque ppa contient toujours une petite description sur la façon d'ajouter manuellement des sources. Le site du tableau de bord pour votre ppa mentionné ppa:nilarimogard/webupd8est https://launchpad.net/~nilarimogard/+archive/webupd8 . Si vous faites défiler vers le bas, vous voyez une étiquette extensible Détails techniques sur ce PPA . Si vous le développez, vous trouverez la description comment ajouter des sources manuellement. Ajoutez les lignes suivantes à mentionné/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 

Bien sûr, vous devez ajuster quantique à la version que vous utilisez actuellement.

Ajout de la clé de signature

La description contient également une clé de signature . Ceci est important, afin que votre système puisse toujours vérifier que vous accédez réellement à une adresse ppa fiable. Dans le cas de votre ppa qui est 1024R/4C9D234C(peut également être trouvé sous Détails techniques sur ce PPA ), où le nombre derrière la barre oblique est important. Vous pouvez ajouter l'empreinte digitale via le apt-keyprogramme. En règle générale, vous exécutez la commande suivante

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

Ajouter si apt-keyne fonctionne pas via un proxy

Comme vous avez déjà eu des problèmes avec le add-apt-repositoryprogramme, cela peut ne pas fonctionner non plus. Vous pouvez donc télécharger et ajouter manuellement la clé 1024 bits. Si cela wgetfonctionne, vous pouvez le faire en une seule étape.

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

Sinon sûr " http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C " par exemple /path/keyet utilisez sudo apt-key add /path/keypour l'ajouter.

Fermer avec l'habituel

Ensuite, vous devez mettre à jour les informations du référentiel apt-get update, puis vous devriez pouvoir télécharger les packages.

Ressources

Mon préféré sur la façon d'utiliser le mécanisme d'emballage (malheureusement en allemand): http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

La version du tableau de bord mentionne également tous les points importants: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Comme il est d'utiliser-atypique clé apt de la manière décrite je ne ai trouvé les informations contenues dans les pages de manuel, man apt-key.

Réponse connexe qui décrit à peu près la façon standard d'installer les ppa manuellement: /ubuntu//a/38029/128349


@kenorb ne sait pas si vous recevez une notification si je modifie mon message, donc: ping: "solution de contournement possible"
LeoR

Si votre problème est que le port 11371 est bloqué dans votre pare-feu d'entreprise, vous pouvez désormais utiliser le port 80 à la place: "sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 4C9D234C "
leszek.hanusz

7

En fait, cela semble être beaucoup plus facile que la réponse publiée précédemment. Vous avez juste besoin de "sudo" pour savoir que vous êtes derrière un proxy et cela fonctionnera sans effort. Pour ce faire, vous devez exporter votre proxy httpet httpsla façon dont vous le faites habituellement:

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

puis ajoutez Defaults env_keep="https_proxy"à la fin du /etc/sudoersfichier. Après cela, vous devriez pouvoir ajouter le ppa en utilisant la commande:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

Ou utiliser

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

si vous ne souhaitez pas modifier le /etc/sudoersfichier. L' -Eoption exporte les variables d'environnement vers l'utilisateur sudo.

J'ai donné une description détaillée à ce sujet ici sur mon blog .


1

Assurez-vous que le proxy apt est défini comme ci-dessous

sudo vi /etc/apt/apt.conf

ajoutez les paramètres de proxy suivants et enregistrez le fichier

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

en outre, exportez les éléments suivants dans Terminal avant d'exécuter la commande

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

Cela devrait fonctionner.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.