Come faccio a far funzionare il repository add-apt attraverso un proxy?


119

Sto cercando di seguire le istruzioni "Installazione di Cross Toolchain su Ubuntu 10.04 (Lucid) e 10.10 (Maverick)" su wiki.linaro.org (sulla mia VM Ubuntu 10.04). Il primo passo è:

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

Ma quando corro ottengo:

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

Immagino che il problema sia con la mia configurazione per il server proxy del mio datore di lavoro, in particolare per HTTPS.

Quando ho aperto https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain in Firefox, ho ricevuto "La connessione è scaduta". Sono quindi andato in Preferenze di Firefox -> Avanzate -> Rete -> Impostazioni ... e ho impostato Proxy HTTP su "gateway" e Porta su 8080, e controllato "Usa questo server proxy per tutti i protocolli". Quindi la pagina caricata. Questo supporta la mia teoria.

Ho provato a impostare le variabili di ambiente http_proxy e https_proxy (sia minuscole che maiuscole):

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

Ho anche provato a cambiarli in:

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

E ho provato ad aggiungere questa seconda riga a /etc/apt/apt.conf:

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

Ma continuo a ricevere lo stesso errore.

Come posso risolvere questo problema?

Aggiornamento: ho seguito le istruzioni nella risposta accettata a "Problema con l'aggiunta di repository e connessione dal terminale dietro un proxy" e ho ottenuto ulteriormente:

$ 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

Mi chiedo se "Errore di recupero HTTP" significa che devo anche aggiungere "Predefiniti env_keep = http_proxy" a /etc/sudoers...

Aggiornamento n. 2: ho aggiunto:

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

... come nel commento 18 per il bug 516032 , ma ottengo sempre lo stesso errore "gpgkeys: errore di recupero HTTP 7: impossibile connettersi all'host".

E questo è curioso:

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

... perché http_proxy non c'è.

Qualsiasi consiglio è apprezzato.

Aggiornamento n. 3: poiché l'host della mia VM è un laptop, l'ho portato a casa e ho provato lì (senza 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)

Ha funzionato. Quindi il problema è legato alla configurazione del proxy. Ma suppongo di avere una soluzione alternativa.


Risposte:


183

Oltre a configurare i proxy, dire sudodi preservare l'ambiente con l' -Eopzione:

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

con nome utente e password:

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

Hai davvero lavorato
Shashwat Kumar il

14
-E (dopo aver fatto tutte le altre cose sopra) ha funzionato per me.
cschooley,

2
e sì, la https_proxyconfigurazione era necessaria ...: P
monkut

1
Come aggiungere proxy permanentemente ed evitare l'opzione -E? Ho il file / etc / environment configurato correttamente con le righe aggiunte ... Grazie
Enrique il

1
Da man sudo: -E, --preserve-envindica la politica di sicurezza che l'utente desidera preservare le variabili di ambiente esistenti. La politica di sicurezza può restituire un errore se l'utente non dispone dell'autorizzazione per preservare l'ambiente.m
Pablo A

39

Usa il seguente codice in un terminale per aggiungere la chiave gpg dietro il proxy,

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

E sostituisci le lettere maiuscole di conseguenza. Se si utilizza un proxy senza alcuna autenticazione utente (ovvero nome utente e password), utilizzare http-proxy=http://PROXY_URL:PORT/invece.

Ad esempio per avere GPG_KEY=C2514567EEA14886puoi usare,

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

dove,

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

Se non si dispone dell'autenticazione utente, utilizzare semplicemente,

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

3
Questo in realtà non "corregge" l'esecuzione del comando add-apt-repository. In effetti funziona attorno a uno dei suoi compiti. È necessario almeno un comando aggiuntivo: sudoedit /etc/apt/sources.list.d/XXXX.list + edizione manuale per aggiungere gli URL deb ...
Chucky

Sarebbe perfetto se aggiungi alcune informazioni su come riparare il proxy in eterno. La soluzione fornita richiede MOLTE digitazioni
Danatela,

9

Finalmente! Devi impostare https_proxy tramite:

export https_proxy=....

solo impostare http_proxy non è sufficiente.

E avevo bisogno di eseguire il comando add-apt-repository come root, NON tramite sudo.

Codice:

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

6

Sembra che la configurazione del proxy sia impostata ma in qualche modo non è possibile contattare il server ...

Ho avuto un problema molto simile che ho risolto in questo modo: il proxy aziendale consente solo le porte 80 e 443 per motivi di sicurezza, quindi l'evento quando è configurato, poiché il protocollo HKP utilizza la porta 11371, non ti lascerà passare.

Quindi, a meno che SSH esca e ottenga la chiave da uno dei tuoi server all'esterno, scaricandolo e installandolo localmente, puoi specificare il key server da uno di quelli elencati di seguito e specificare la porta:

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

per esempio:

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

Boom, Voila!


Sì. Questo ha funzionato, per me, durante l'installazione di Mono su Debian 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
Ken

3

Il motivo per cui la sudoersmodifica non ha funzionato come previsto è che invece di:

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

Avresti dovuto scrivere:

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

Assicurati anche che lo spazio tra Defaultse env_keepsia una scheda ogni volta.


3

Sono riuscito a risolvere questo problema modificando /usr/lib/python3/dist-packages/softwareproperties/ppa.pye aggiungendo

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

sotto la seguente riga

"--keyserver", self.keyserver,

Ulteriori informazioni di base

ppa.pyè lo script python utilizzato add-apt-repositoryper chiamare gpg. A volte sembra che ci sia un bug con gpg in cui non utilizza la variabile di ambiente http_proxy. Ciò può essere confermato visualizzando il file /root/.gnupg/dirmngr.confe controllando che honor-http-proxynon sia commentato.


3

Questo approccio in quattro passaggi ha funzionato per me su una VM Ubuntu 17.04 dietro un proxy aziendale.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng e lasciarlo fallire
  2. sudo apt update e cerca un messaggio di errore come 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 ora funzionerà

Si noti che la macchina virtuale host esegue un CNTLMserver proxy sulla porta 3128.


1
Non devi aspettare che apt ti dica qual è la chiave. E 'lì nei dettagli tecnici del PPA : "Impronta digitale: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6"
muru

È vero, ma ho trovato questo processo leggermente più semplice.
thegreendroid il

1

Questo mi ha aiutato:

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

Immagino che ci siano alcune variabili d'ambiente che non sono necessarie nel comando ma non danneggiano.


1

Aggiungi il PPA manualmente a /etc/apt/sources.list:

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

Salva il file ed esegui sudo apt-get update. Questo errore potrebbe apparire:

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

Eseguire il comando seguente per accettare la chiave per il PPA, ricordando di cambiare la chiave (5BB92C09DB82666C) per il PPA corrispondente.

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

Corri sudo apt-get updatee il gioco è fatto.

Rif: Come aggiungere PPA Launchpad in Debian tramite add-apt-repositorycomando


1

In realtà, ho riscontrato gli stessi problemi, è così che ho trovato questa pagina.

  • le variabili di ambiente http_proxy (case sensitive) e https_proxy (in ogni caso) fanno qualcosa. Non impostarle fallisce nella prima fase, l'impostazione delle variabili d'ambiente sembra avere qualche effetto; fallirà se non li esporti

    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.
    

    (il resto ha successo - questa volta)

Il fatto è che a volte si blocca e termina con il solito messaggio di timeout: Impossibile aggiungere PPA: '"Errore durante la lettura di https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7,' Impossibile connettersi alla porta 443 launchpad.net: Timeout connessione ') "'.

... ma sto barando, sto facendo tutto questo come root. Una soluzione semplice è modificare / etc / profile o, su Ubuntu / Mint, basta aggiungere uno script in /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, sì, c'è anche quella cosa su curl (che è usato da apt-add-repository, tra l'altro). Il manuale dice di aggiungere .curlrc nella tua home directory. Poiché apt-add-directory è di root, significa aggiungerlo a /root/.curlrc:

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

Una buona idea è fare lo stesso con il tuo ~ / .curlrc

Inoltre, abilitare il proxy in / etc / wgetrc è una buona cosa da fare, anche se non ha nulla a che fare con la domanda posta, ti sto solo salvando un'altra ricerca su Google (se leggi questo, ne hai diversi con un proxy ) ...


1

In /etc/apt/apt.conf.d/01proxyaggiungere qualcosa di simile

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

Questo eseguirà il proxy di tutti i download di aptitude, ma penso che questo sia l'unico modo per farlo sul back-end. Se il tuo proxy lo supporta, puoi anche usare un URL come per http://my.proxy:port/www.target.site.com/urlcui so che funzionaapt-cache-ng

Non sono sicuro che il repository add-apt stesso utilizzi queste impostazioni, ma se non riesci a farlo funzionare, puoi sempre aggiungere il repository al tuo /etc/apt/sources.listo/etc/apt/sources.list.d/*mytoolchain*

Dall'11.10 esiste anche un cross-toolchailable nel repository principale, giusto apt-get install gcc-arm-linux-gnueabihf. Ci sono anche catene di strumenti incrociate disponibili da emdebian e alcune istruzioni qui: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/


user72421: come sapevi che il proxy doveva essere preceduto da 01 e non da un altro numero?
jgomo3,

Non funziona con apt-get & keyserver
Vik


0

Eseguire il comando seguente nel terminale

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

0

Le variabili di ambiente a livello di sistema dovrebbero davvero essere aggiunte a /etc/environment(usa sudoo gksu), ma l'errore segnalato ti sembra che non siano stati trovati dati gpg. idee:

  • controlla le impostazioni del proxy (se hai accesso)
  • controlla se il proxy sta in qualche modo ostacolando l'output del traffico crittografato.
  • eseguire un netstat continuo per verificare se la connessione al proxy viene effettivamente effettuata
  • l'ultima risorsa sarebbe quella di ispezionare e ispezionare a WireShark
  • prova un tunnel http;)

0

Un'altra soluzione è aggiungere un proxy.conffile 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/";
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.