Nie mogę dodać repozytorium PPA za serwerem proxy

14

Próbuję dodać repozytorium ppa (jako root) za pomocą następującego polecenia:

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')

Niestety to nie działa. Wygląda na to, że curl łączy się z serwerem proxy, ale serwer proxy mówi, że wymagane jest uwierzytelnienie. Zamiast tego próbowałem z .curlrc, http_proxy env, ale to nie działa.

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\

Może to dlatego, że w nazwie użytkownika znajduje się znak @? Wget działa poprawnie z proxy.

Powiązane: Jak dodać repozytorium zza serwera proxy?

Środowisko

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

Funkcje zwijania: GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

AKTUALIZACJA

Po dodaniu poświadczeń do .curlrc

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

Wygląda na to, że działa na zwykły lok .

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

Również 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

Ale nadal nie działa podczas dodawania certyfikatu ppa.

pycurl.error: (56, 'Received HTTP code 407 from proxy after CONNECT')

NAGŁÓWKI CURL

Wysłane nagłówki:

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

Odpowiadać:

HTTP/1.1 200 Connection established

NAGŁÓWKI PyCURL

Wysłane nagłówki:

CONNECT launchpad.net:443 HTTP/1.1
Host: launchpad.net:443
User-Agent: PycURL/7.22.0
Proxy-Connection: Keep-Alive
Accept: application/json

Odpowiadać:

HTTP/1.1 407 Proxy Authentication Required
Proxy-Authenticate: BASIC realm="proxy"

Wygląda na to, że PyCURL nie wysyła ponownie żadnej autoryzacji na żądanie.

kenorb
źródło
Dzięki, próbowałem, ale to nie pomaga. Aby upewnić się, że tak nie jest, podałem swoje poświadczenia w .curlrc (bez znaku ucieczki @ wydaje się działać dla standardowego polecenia curl), ale nie dla pycurl. Zobacz zaktualizowaną sekcję.
kenorb
Dzięki, myślałem, że coś przeoczyłem. Zgłoszono błąd tutaj: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
Kenorb
Czy ustawiłeś także https_proxy? Zobacz błąd bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey,
Być może jest to problem związany z sesjami i zmiennymi środowiskowymi. Możesz spróbować wyeksportować http_proxy i https_proxy do / etc / profile, a następnie ponownie uruchomić komputer (jeśli to możliwe) i spróbować ponownie.
jap1968,
W związku z tym, co mówi przede mną jap1968, upewniłem się, że ustawione są zarówno http_proxy, jak i HTTP_PROXY (oraz https_proxy i HTTPS_PROXY). Dzięki rozróżnianiu wielkości liter w systemie Linux są to właściwie dwie różne zmienne - a co najważniejsze, nie wszystkie programy będą używać jednej lub drugiej. To prawda, że ​​bardziej przypomina problem z wysyłaniem kombinacji nazwy użytkownika i hasła (z powodu „@”), ale i tak warto spróbować.
YellowApple

Odpowiedzi:

10

Obejście, jeśli apt-get nadal działa za serwerem proxy

  • dodaj źródła ręcznie do /etc/apt/sources.list
  • dodaj klucz gpg

Ręczne dodawanie źródeł

Myślę, że na launchpad.net każdy ppa wciąż zawiera krótki opis ręcznego dodawania źródeł. Witryna startera dla wspomnianego ppa ppa:nilarimogard/webupd8to https://launchpad.net/~nilarimogard/+archive/webupd8 . Po przewinięciu w dół zobaczysz rozwijaną etykietę Szczegóły techniczne dotyczące tego PPA . Po rozwinięciu znajdziesz opis ręcznego dodawania źródeł. Dodaj następujące wiersze do wspomnianego/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 

Oczywiście musisz dostosować kwantowo do dowolnej wersji, której obecnie używasz.

Dodawanie klucza podpisu

Opis zawiera także klucz do podpisu . Jest to ważne, aby Twój system zawsze mógł sprawdzić, czy faktycznie uzyskujesz dostęp do wiarygodnego adresu ppa. W przypadku twojego ppa, który jest 1024R/4C9D234C(można go również znaleźć w części Szczegóły techniczne na temat tego PPA ), gdzie liczba za ukośnikiem jest ważna. Możesz dodać odcisk palca za pomocą apt-keyprogramu. Zazwyczaj należy wykonać następujące polecenie

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

Dodanie jeśli apt-keynie działa przez proxy

Ponieważ miałeś już problemy z add-apt-repositoryprogramem, to też może nie działać. Zamiast tego możesz ręcznie pobrać i dodać klucz 1024-bitowy. Jeśli wgetdziała, możesz to zrobić w jednym kroku.

wget "http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C" -O out && sudo apt-key add out && rm out

W przeciwnym razie bezpieczny „ http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C ” np. /path/keyI użyjsudo apt-key add /path/key aby go dodać.

Zamknij jak zwykle

Następnie musisz zaktualizować informacje o repozytorium apt-get update a następnie powinieneś być w stanie pobrać pakiety.

Zasoby

Mój ulubiony sposób korzystania z mechanizmu pakowania (niestety po niemiecku): http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

Wersja startera wymienia także wszystkie ważne punkty: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Ponieważ używanie apt-key w opisany sposób jest nietypowe, znalazłem informacje tylko na stronach podręcznika, man apt-key .

Powiązana odpowiedź, która właściwie opisuje standardowy sposób ręcznego instalowania ppa: /ubuntu//a/38029/128349

LeoR
źródło
@kenorb nie wiem, czy dostanę powiadomienie, jeśli edytuję mój post, więc: ping: „możliwe obejście”
LeoR
Jeśli problem polega na tym, że port 11371 jest zablokowany w firmowej zaporze sieciowej, możesz teraz użyć portu 80: „sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 4C9D234C "
leszek.hanusz
7

Wydaje się, że jest to o wiele łatwiejsze niż poprzednia odpowiedź. Potrzebujesz tylko „sudo”, aby wiedzieć, że jesteś za serwerem proxy i będzie działać bez wysiłku. Aby to zrobić, trzeba wyeksportować proxy dla httpi httpstak, jak zwykle zrobić:

export http_proxy=http://username:password@host:port/
export https_proxy=https://username:password@host:port/

a następnie dodaj Defaults env_keep="https_proxy"do końca /etc/sudoerspliku. Po tym powinieneś być w stanie dodać ppa za pomocą polecenia:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

albo użyj

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

jeśli nie chcesz modyfikować /etc/sudoerspliku. The-EOpcja eksportuje zmienne środowiskowe dla użytkownika sudo.

Szczegółowy opis podałem tutaj na moim blogu .

Praca w
źródło
1

Upewnij się, że apt proxy jest ustawiony jak poniżej

sudo vi /etc/apt/apt.conf

dodaj następujące ustawienia proxy i zapisz plik

Acquire::http::proxy "http ://proxy.company.com:port/";
Acquire::https::proxy "https ://proxy.company.com:port/";
Acquire::ftp::proxy "ftp://proxy.company.com:port/";

dodatkowo wyeksportuj następujące w Terminalu przed uruchomieniem polecenia

export http_proxy=http ://proxy.company.com:port/
export https_proxy=https ://proxy.company.com:port/

To powinno działać.

Manjula
źródło