Jak uzyskać repozytorium add-apt-repozytorium do pracy przez serwer proxy?

119

Próbuję postępować zgodnie z instrukcjami „Instalowanie Cross Toolchain na Ubuntu 10.04 (Lucid) i 10.10 (Maverick) Hosts” na wiki.linaro.org (na mojej maszynie Wirtualnej Ubuntu 10.04). Pierwszym krokiem jest:

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

Ale kiedy biegnę, dostaję:

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

Zgaduję, że problem dotyczy mojej konfiguracji serwera proxy mojego pracodawcy, szczególnie HTTPS.

Kiedy otworzyłem https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain w przeglądarce Firefox, dostałem komunikat „Upłynął limit czasu połączenia”. Następnie przeszedłem do Preferencji Firefoksa -> Zaawansowane -> Sieć -> Ustawienia ... i ustawiłem Serwer proxy HTTP na „bramę” i Port na 8080, i zaznaczyłem „Użyj tego serwera proxy dla wszystkich protokołów”. Następnie strona załadowana. To potwierdza moją teorię.

Próbowałem ustawić zmienne środowiskowe http_proxy i https_proxy (małe i wielkie litery):

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

Próbowałem też zmienić je na:

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

Próbowałem dodać tę drugą linię do /etc/apt/apt.conf:

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

Ale nadal pojawia się ten sam błąd.

Jak rozwiązać ten problem?

Aktualizacja: Postępowałem zgodnie z instrukcjami w zaakceptowanej odpowiedzi na „Problem z dodawaniem repozytoriów i łączeniem się z terminala za proxy” i dostałem dalej:

$ 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

Zastanawiam się, czy „błąd pobierania HTTP” oznacza, że ​​muszę również dodać „Domyślne env_keep = http_proxy” do /etc/sudoers...

Aktualizacja nr 2: Dodałem:

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

... jak w komentarzu 18 dla błędu 516032 , ale wciąż pojawia się ten sam błąd „gpgkeys: błąd pobierania HTTP 7: nie można połączyć się z hostem”.

I to jest ciekawe:

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

... ponieważ http_proxy nie ma.

Wszelkie porady są mile widziane.

Aktualizacja nr 3: Ponieważ hostem mojej maszyny wirtualnej jest laptop, zabrałem ją do domu i wypróbowałem (bez serwerów 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)

Zadziałało. Problem związany jest z konfiguracją proxy. Ale przypuszczam, że mam obejście.

Daryl Spitzer
źródło
Tylko w celach informacyjnych askubuntu.com/questions/60217/…
Deepak Rajput

Odpowiedzi:

183

Oprócz konfigurowania serwerów proxy powiedz, sudoaby chronić środowisko z -Eopcją:

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

z nazwą użytkownika i hasłem:

export https_proxy=https://<username>:<password>@<proxy>:<port>
Amal Pillai
źródło
Naprawdę działało
Shashwat Kumar
14
-E (po zrobieniu wszystkich innych rzeczy powyżej) sprawiło, że działało dla mnie.
cschooley
2
i tak, https_proxykonfiguracja była konieczna ...: P
monkut
1
Jak dodać proxy na stałe i uniknąć przełączania -E? Mam poprawnie skonfigurowany plik środowiska / etc / z dodanymi liniami ... Dzięki
Enrique,
1
Od man sudo: -E, --preserve-envWskazuje na politykę bezpieczeństwa, że ​​użytkownik chce zachować istniejące zmienne środowiskowe. Polityka bezpieczeństwa może zwrócić błąd, jeśli użytkownik nie ma uprawnień do ochrony środowiska. M
Pablo A
39

Użyj następującego kodu w terminalu, aby dodać klucz gpg za serwerem proxy,

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

I odpowiednio zamień wielkie litery. Jeśli używasz serwera proxy bez uwierzytelnienia użytkownika (tj. Nazwy użytkownika i hasła), użyj http-proxy=http://PROXY_URL:PORT/zamiast tego.

Na przykład, GPG_KEY=C2514567EEA14886abyś mógł użyć,

sudo apt-key adv --keyserver-options http-proxy=http://user:[email protected]:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886

gdzie,

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

Jeśli nie masz uwierzytelnienia użytkownika, po prostu użyj,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886
Patxi Gomez
źródło
3
To tak naprawdę nie „naprawia” wykonywania polecenia add-apt-repository. Rzeczywiście działa wokół jednego ze swoich zadań. Konieczne jest co najmniej jedno dodatkowe polecenie: sudoedit /etc/apt/sources.list.d/XXXX.list + edycja ręczna, aby dodać adresy URL deb ...
Chucky
Byłoby idealnie, gdybyś dodał jakieś informacje, jak wiecznie naprawić proxy. Dostarczone przez Ciebie rozwiązanie wymaga dużo pisania
Danatela,
9

Wreszcie! Musisz ustawić https_proxy poprzez:

export https_proxy=....

tylko ustawiony http_proxy to za mało.

Musiałem wykonać polecenie add-apt-repository jako root, NIE poprzez sudo.

Kod:

sudo su
add-apt-repository ppa:........
DaRattler
źródło
6

Wygląda na to, że konfiguracja proxy jest skonfigurowana, ale jakoś nie można się skontaktować z serwerem ...

Miałem bardzo podobny problem, który rozwiązałem w ten sposób: korporacyjny serwer proxy ze względów bezpieczeństwa zezwala tylko na port 80 i 443, więc zdarzenie po jego skonfigurowaniu, ponieważ protokół HKP używa portu 11371, nie przepuści.

Tak więc, po wyłączeniu SSH i uzyskaniu klucza z jednego z serwerów na zewnątrz, pobraniu go i zainstalowaniu lokalnie, możesz określić serwer kluczy z jednego z wymienionych poniżej i określić port:

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

na przykład:

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

Bum, Voila!

Leroyse
źródło
Tak. Działa to dla mnie podczas instalowania Mono na Debianie 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
Ken
3

Twoja sudoerszmiana nie zadziałała zgodnie z oczekiwaniami, ponieważ zamiast:

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

Powinieneś napisać:

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

Upewnij się również, że odstęp między Defaultsi env_keepjest tabulatorem za każdym razem.

Urhixidur
źródło
3

Udało mi się to obejść, edytując /usr/lib/python3/dist-packages/softwareproperties/ppa.pyi dodając

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

pod następującą linią

"--keyserver", self.keyserver,

Więcej informacji ogólnych

ppa.pyjest skryptem Pythona używanym add-apt-repositorydo wywoływania gpg. Czasami wydaje się, że występuje błąd w gpg, który nie używa zmiennej środowiskowej http_proxy. Można to potwierdzić, przeglądając plik /root/.gnupg/dirmngr.confi sprawdzając, honor-http-proxyczy nie został on skomentowany.

Junior Leota
źródło
3

To czteroetapowe podejście działało dla mnie na maszynie Wirtualnej Ubuntu 17.04 za korporacyjnym proxy.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng i niech zawodzi
  2. sudo apt update i poszukaj komunikatu o błędzie, takiego jak 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 będzie teraz działać

Należy zauważyć, że hosta VM działa CNTLMserwer proxy na porcie 3128.

thegreendroid
źródło
1
Nie musisz czekać, aż apt powie ci, jaki jest klucz. It '; tam w szczegółach technicznych PPA : „Odcisk palca: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6”
mur
To prawda, ale ten proces był nieco łatwiejszy.
thegreendroid
1

Pomogło mi to:

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

Sądzę, że istnieją pewne zmienne środowiskowe, które nie są potrzebne w poleceniu, ale nie szkodzą.

Lew
źródło
1

Dodaj PPA ręcznie do /etc/apt/sources.list:

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

Zapisz plik i uruchom sudo apt-get update. Ten błąd może się pojawić:

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

Uruchom następujące polecenie, aby zaakceptować klucz PPA, pamiętając o zmianie klucza (5BB92C09DB82666C) dla odpowiedniego PPA.

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

Uruchom sudo apt-get updatei gotowe.

Ref: Jak dodać PPA Launchpad w Debianie za pomocą add-apt-repositorypolecenia

Radość
źródło
1

Właściwie mam te same problemy, tak znalazłem tę stronę.

  • zmienne środowiskowe http_proxy (wielkość liter ma znaczenie) i https_proxy (niezależnie od wielkości liter) coś robią. Nieprzedstawienie ich kończy się niepowodzeniem w pierwszym etapie, ustawienie zmiennych środowiskowych wydaje się mieć pewien efekt; zakończy się niepowodzeniem, jeśli ich nie wyeksportujesz

    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.
    

    (reszta się udała - tym razem)

Chodzi o to, że czasem się zacina i kończy się zwykłym komunikatem o przekroczeniu limitu czasu: Nie można dodać PPA: „” Błąd odczytu https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7, ” Nie można połączyć się z portem launchpad.net 443: Przekroczono limit czasu połączenia „)”.

... ale oszukuję, robię to wszystko jako root. Łatwym rozwiązaniem jest edycja / etc / profile lub, na Ubuntu / Mint, po prostu dodaj skrypt w /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}'

Och, tak, jest też coś takiego w curl (przy okazji, którego używa apt-add-repository). Podręcznik mówi, aby dodać .curlrc do katalogu domowego. Ponieważ katalog apt-add-należy do roota, oznacza to dodanie go do katalogu /root/.curlrc:

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

Dobrym pomysłem jest zrobienie tego samego we własnym ~ / .curlrc

Również włączenie proxy w / etc / wgetrc jest dobrą rzeczą, chociaż nie ma to nic wspólnego z zadanym pytaniem, po prostu zapisuję ci kolejne wyszukiwanie w Google (jeśli to czytasz, masz wiele z proxy ) ...

Marabiloso
źródło
1

W /etc/apt/apt.conf.d/01proxydodać coś jak ten

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

Spowoduje to proxy wszystkich pobrań aptitude, ale myślę, że to jedyny sposób, aby to zrobić na backend. Jeśli Twój serwer proxy to obsługuje, możesz także użyć adresu URL, dla http://my.proxy:port/www.target.site.com/urlktórego wiem, że działaapt-cache-ng

Nie jestem pewien, czy samo add-apt-repository używa tych ustawień, ale jeśli nie możesz sprawić, by działało, zawsze możesz dodać repozytorium do swojego /etc/apt/sources.listlub/etc/apt/sources.list.d/*mytoolchain*

Od 11.10 w głównym repozytorium jest także możliwość wymiany narzędzi apt-get install gcc-arm-linux-gnueabihf. Istnieją również łańcuchy narzędzi dostępne od emdebian, a niektóre instrukcje tutaj: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

użytkownik72421
źródło
user72421: skąd wiedziałeś, że proxy powinno być poprzedzone 01, a nie innym numerem?
jgomo3
Nie działa z apt-get & keyserver
Vik
0

Zmienne środowiskowe dla całego systemu powinny być naprawdę dodane /etc/environment(użyj sudolub gksu), ale zgłoszony błąd wydaje się wskazywać, że nie znaleziono danych gpg. Pomysły:

  • sprawdź ustawienia proxy (jeśli masz dostęp)
  • sprawdź, czy serwer proxy w jakiś sposób munguje wyjście zaszyfrowanego ruchu.
  • uruchom ciągłą komendę netstat, aby sprawdzić, czy połączenie z serwerem proxy jest faktycznie tworzone
  • w ostateczności byłoby tcpdump i inspekcji w wireshark
  • spróbuj tunelu http;)
t0m5k1
źródło
0

Innym rozwiązaniem jest dodanie proxy.confpliku 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/";
Dan Anderson
źródło