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.