Comment faire pour que add-apt-repository fonctionne via un proxy?


119

J'essaie de suivre les instructions "Installation de Cross Toolchain sur Ubuntu 10.04 (Lucid) et 10.10 (Maverick) Hosts" sur wiki.linaro.org (sur ma machine virtuelle Ubuntu 10.04). La première étape est:

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

Mais quand je cours, je reçois:

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

J'imagine que le problème vient de ma configuration pour le serveur proxy de mon employeur, en particulier pour HTTPS.

Lorsque j'ai ouvert https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain dans Firefox, j'ai reçu le message "La connexion a expiré". Je suis ensuite allé dans les préférences de Firefox -> Avancé -> Réseau -> Paramètres ... et définissez le proxy HTTP sur "passerelle" et le port sur 8080, puis cochez la case "Utiliser ce serveur proxy pour tous les protocoles". Puis la page chargée. Cela soutient ma théorie.

J'ai essayé de définir les variables d'environnement http_proxy et https_proxy (minuscules et majuscules):

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

J'ai aussi essayé de les changer pour:

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

Et j’ai essayé d’ajouter cette seconde ligne à /etc/apt/apt.conf:

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

Mais je continue à avoir la même erreur.

Comment puis-je résoudre ce problème?

Mise à jour: j'ai suivi les instructions de la réponse acceptée à la section "Problème lors de l'ajout de référentiels et de la connexion d'un terminal derrière un proxy" et je suis allé plus loin:

$ 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

Je me demande si "l'erreur de récupération HTTP" signifie que j'ai également besoin d'ajouter "Par défaut, env_keep = http_proxy" à /etc/sudoers...

Mise à jour # 2: j'ai ajouté:

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

... comme dans le commentaire 18 pour le bogue 516032 , mais j'ai toujours le même erreur "gpgkeys: HTTP fetch error 7: impossible de se connecter à l'hôte".

Et c'est curieux:

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

... parce que http_proxy n'est pas là.

Tout conseil est apprécié.

Mise à jour # 3: comme l'hôte de ma machine virtuelle est un ordinateur portable, je l'ai pris chez moi et j'ai essayé (sans 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)

Ça a marché. Donc, le problème est lié à la configuration du proxy. Mais je suppose que j'ai une solution de contournement.


Réponses:


183

En plus de la configuration des mandataires, indiquez sudode préserver l'environnement avec l' -Eoption suivante:

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

avec nom d'utilisateur et mot de passe:

export https_proxy=https://<username>:<password>@<proxy>:<port>

Ya vraiment travaillé
Shashwat Kumar

14
-E (après avoir fait toutes les choses ci-dessus) l'a fait fonctionner pour moi.
Cschooley

2
et oui, la https_proxyconfiguration était nécessaire ...: P
Monkut

1
Comment ajouter un proxy en permanence et éviter l'option -E? J'ai configuré correctement le fichier / etc / environment avec les lignes ajoutées ... Merci
Enrique

1
De man sudo: -E, --preserve-envIndique à la politique de sécurité que l'utilisateur souhaite conserver ses variables d'environnement existantes. La politique de sécurité peut renvoyer une erreur si l'utilisateur n'a pas l'autorisation de préserver l'environnement.m
Pablo A

39

Utilisez le code suivant dans un terminal pour ajouter la clé gpg derrière le proxy,

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

Et remplacez les lettres majuscules en conséquence. Si vous utilisez un proxy sans authentification de l'utilisateur (nom d'utilisateur et mot de passe), utilisez http-proxy=http://PROXY_URL:PORT/plutôt.

Par exemple, GPG_KEY=C2514567EEA14886vous pouvez utiliser,

sudo apt-key adv --keyserver-options http-proxy=http://user:abc123@10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

où,

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

Si vous n'avez pas d'authentification d'utilisateur, utilisez simplement,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

3
Cela ne "corrige" pas réellement l'exécution de la commande add-apt-repository. En effet, cela fonctionne autour de l'une de ses tâches. Au moins une commande supplémentaire est nécessaire: sudoedit /etc/apt/sources.list.d/XXXX.list + édition manuelle pour ajouter les URL deb ...
Chucky

Serait parfait si vous ajoutez des informations sur la façon de réparer le proxy éternellement. La solution que vous avez fournie nécessite BEAUCOUP de dactylographie
Danatela

9

Finalement! Vous devez définir https_proxy via:

export https_proxy=....

définir uniquement http_proxy n'est pas suffisant.

Et j'avais besoin d'exécuter la commande add-apt-repository en tant que root, PAS via sudo.

Code:

sudo su
add-apt-repository ppa:........

6

Il semble que la configuration du proxy soit configurée, mais que le serveur ne puisse pas être contacté ...

J'ai eu un problème très similaire que j'ai résolu comme ceci: Le proxy d'entreprise n'autorise que les ports 80 et 443 pour des raisons de sécurité. Par conséquent, lors de la configuration, le protocole HKP utilisant le port 11371 ne vous laissera pas passer.

Ainsi, à moins que SSH n'entre et récupère la clé de l'un de vos serveurs à l'extérieur, soit en la téléchargeant et en l'installant localement, vous pouvez spécifier le serveur de clés parmi ceux répertoriés ci-dessous et spécifier le port:

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

par exemple:

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

Boom, voila!


Ouaip. Cela a fonctionné, pour moi, lors de l'installation de Mono sur Debian 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
Ken

3

La raison pour laquelle votre sudoersmodification n'a pas fonctionné comme prévu est qu'au lieu de:

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

Vous auriez dû écrire:

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

Assurez-vous également que l'espace entre Defaultset env_keepest un onglet à chaque fois.


3

J'ai réussi à contourner ce problème en modifiant /usr/lib/python3/dist-packages/softwareproperties/ppa.pyet en ajoutant

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

sous la ligne suivante

"--keyserver", self.keyserver,

Plus d'informations de base

ppa.pyest le script python qui est utilisé par add-apt-repositorypour appeler gpg. Il semble parfois y avoir un bogue avec gpg qui n’utilise pas la variable d’environnement http_proxy. Cela peut être confirmé en consultant le fichier /root/.gnupg/dirmngr.confet en vérifiant qu'il honor-http-proxyn'est pas mis en commentaire.


3

Cette approche en quatre étapes a fonctionné pour moi sur une machine virtuelle Ubuntu 17.04 derrière un proxy d'entreprise.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng et laissez-le échouer
  2. sudo apt update et recherchez un message d'erreur comme 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 va maintenant travailler

Notez que la machine virtuelle hôte exécute un CNTLMserveur proxy sur le port 3128.


1
Vous n'avez pas à attendre pour pouvoir vous dire quelle est la clé. C'est dans les détails techniques du PPA : "Empreinte digitale: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6"
muru

C'est vrai, mais j'ai trouvé ce processus légèrement plus facile.
thegreendroid

1

Cela m'a aidé:

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

J'imagine que certaines variables d'environnement ne sont pas nécessaires dans la commande, mais elles ne nuisent pas.


1

Ajoutez le PPA manuellement à votre /etc/apt/sources.list:

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

Enregistrez le fichier et exécutez sudo apt-get update. Cette erreur peut apparaître:

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

Exécutez la commande suivante pour accepter la clé pour le PPA, sans oublier de changer la clé (5BB92C09DB82666C) pour le PPA correspondant.

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

Courez sudo apt-get updateet vous avez terminé.

Réf: comment ajouter des PPA au tableau de bord dans Debian via une add-apt-repositorycommande


1

En fait, je rencontre les mêmes problèmes, c'est comme ça que j'ai trouvé cette page.

  • les variables d’environnement http_proxy (sensible à la casse) et https_proxy (quelle que soit la casse) agissent. Ne pas les définir échoue dans la première étape, la définition des variables d'environnement semble avoir un effet; cela échouera si vous ne les exportez pas

    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.
    

    (le reste est réussi - cette fois)

Le problème est que, parfois, il reste bloqué et se termine avec le message de délai habituel: Impossible d'ajouter PPA: '"Erreur lors de la lecture de https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7,' Échec de la connexion au port 443 de launchpad.net: la connexion a expiré ') "'.

... mais je triche, je fais tout cela en tant que root. Une solution simple consiste à éditer / etc / profile ou, sous Ubuntu / Mint, ajoutez simplement un script dans /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}'

Oh, oui, il y a aussi cette chose à propos de curl (qui est d'ailleurs utilisé par apt-add-repository). Le manuel dit d'ajouter .curlrc dans votre répertoire personnel. Comme apt-add-directory appartient à la racine, cela signifie que vous devez l'ajouter à /root/.curlrc:

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

Une bonne idée est de faire la même chose dans votre propre ~ / .curlrc

Aussi, activer le proxy dans / etc / wgetrc est une bonne chose à faire, bien que cela n’ait rien à voir avec la question posée, je vous enregistre juste une autre recherche sur Google (si vous lisez ceci, vous en avez plusieurs avec un proxy ) ...


1

En /etc/apt/apt.conf.d/01proxyajouter quelque chose comme ça

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

Cela va remplacer tous les téléchargements d’aptitude, mais je pense que c’est le seul moyen de le faire sur le backend. Si votre proxy le prend en charge, vous pouvez également utiliser une URL telle http://my.proxy:port/www.target.site.com/urlque celle que je connais fonctionne pourapt-cache-ng

Je ne sais pas si add-apt-repository itsself utilise ces paramètres, mais si vous ne pouvez pas faire ce travail, vous pouvez toujours ajouter le dépôt à votre /etc/apt/sources.listou/etc/apt/sources.list.d/*mytoolchain*

Depuis 11.10, il existe également un outil croisé dans le référentiel principal, uniquement apt-get install gcc-arm-linux-gnueabihf. Il existe également des chaînes d’outils croisées disponibles chez emdebian, et quelques instructions à ce sujet: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/


user72421: comment savez-vous que le proxy doit être préfixé par 01 et non par un autre numéro?
jgomo3

Ne fonctionne pas avec apt-get et keyserver
Vik


0

Exécuter la commande ci-dessous dans le terminal

export http_proxy=http://username:password@proxyserver.net:port/
export ftp_proxy=http://username:password@proxyserver.netport/

0

Les variables d'environnement système doivent vraiment être ajoutées à /etc/environment(utiliser sudoou gksu), mais l'erreur signalée semble indiquer qu'aucune donnée gpg n'a été trouvée. Idées:

  • vérifier les paramètres de proxy (si vous avez accès)
  • Vérifiez si le proxy est en train de modifier la sortie du trafic chiffré.
  • lancer un netstat continu pour voir si la connexion au proxy est en train de se faire
  • dernier recours serait de tcpdump & inspecter dans Wireshark
  • essayez un tunnel http;)

0

Une autre solution consiste à ajouter un proxy.conffichier 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/";
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.