web-dev-qa-db-fra.com

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

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

export HTTP_PROXY="http://[email protected]:[email protected]: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. On dirait que curl se connecte au proxy, mais celui-ci 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 un signe @ dans le nom d'utilisateur? Wget fonctionne avec un proxy bien.

Connexes: Comment puis-je 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

caractéristiques curl: GSS-Négocier IDN IPv6 Largefile NTLM NTLM_WB Libz SSL TLS-SRP

UPDATE

Une fois les informations d'identification ajoutées dans .curlrc

cat ~/.curlrc 
proxy = 165.x.x.232:8080
proxy-user = [email protected]:mypass0

Cela semble fonctionner pour le plaine curl .

curl www.google.com | head

* Proxy auth using Basic with user '[email protected]'
GET HTTP://www.google.com HTTP/1.1
Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
HTTP/1.1 302 Found

Aussi HTTPS:

curl -v https://www.google.com | head
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user '[email protected]'
> 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 cela 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

PyCURL HEADERS

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.

14
kenorb

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

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

Ajout de sources manuellement

Je pense que sur launchpad.net chaque ppa contient encore une petite description comment ajouter des sources manuellement. Le site tableau de bord pour votre ppa mentionné ppa:nilarimogard/webupd8 est https://launchpad.net/~nilarimogard/+archive/webupd8 . Si vous faites défiler l'écran 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 à la mention /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 le quantal à la version que vous utilisez actuellement.

Ajout de la clé de signature

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

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

Ajout si apt-key ne fonctionne pas par proxy

Puisque vous avez déjà eu des problèmes avec le programme add-apt-repository, cela pourrait ne pas fonctionner non plus. Vous pouvez donc télécharger et ajouter manuellement la clé 1024 bits. Si wget fonctionne, 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, safe " http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C " dans, par exemple. /path/key et utilisez Sudo apt-key add /path/key pour l'ajouter.

Fermer avec l'habituel

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

Ressources

Mon préféré sur la façon d'utiliser le mécanisme de packaging (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 n’est pas typique d’utiliser apt-key de la manière décrite, je n’ai trouvé que les informations dans les pages de manuel, man apt-key.

Réponse associée qui décrit à peu près la manière standard d’installer manuellement ppa: https://askubuntu.com/a/38029/128349

10
LeoR

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 que cela fonctionnera sans effort. Pour ce faire, vous devez exporter votre proxy pour http et https comme 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 fichier /etc/sudoers. 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 fichier /etc/sudoers. L'option -E exporte les variables d'environnement vers l'utilisateur Sudo.

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

6
jobin

Assurez-vous que apt proxy 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 export suivant 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 marcher.

1
Manjula