Не можу додати сховище PPA за проксі


14

Я намагаюся додати сховище ppa (як корінь) за допомогою наступної команди:

export HTTP_PROXY="http://firstname.surname@xxx.com:my_pass@165.x.x.232: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')

На жаль, це не працює. Схоже, що curl підключається до проксі, але проксі говорить про те, що потрібна автентифікація. Я намагався замість цього .curlrc, http_proxy env, але це не працює.

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\

Може, це тому, що в імені користувача є знак @? Wget працює з проксі-штрафом.

Пов'язане: Як додати сховище з-за проксі?

Середовище

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

curl Особливості: GSS-переговорний IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP

ОНОВЛЕННЯ

Коли додано облікові дані у .curlrc

cat ~/.curlrc 
proxy = 165.x.x.232:8080
proxy-user = name.surname@xxx.com:mypass0

Здається, це працює для простого завитка .

curl www.google.com | head

* Proxy auth using Basic with user 'name.surname@xxx.com'
GET HTTP://www.google.com HTTP/1.1
Proxy-Authorization: Basic cmFmYWwud2llY3pvcmVrQHVi...3R0RDA=
HTTP/1.1 302 Found

Також HTTPS:

curl -v https://www.google.com | head
* Establish HTTP proxy tunnel to www.google.com:443
* Proxy auth using Basic with user 'name.surname@xxx.com'
> 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

Але досі не працює, додаючи сертифікат ppa.

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

НАВЧАЛЬНІ КУРСИ

Надіслані заголовки:

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

Відповідь:

HTTP/1.1 200 Connection established

ПІДЧУКОВІ РОБОТИ

Надіслані заголовки:

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

Відповідь:

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

Здається, що PyCURL не надсилає повторно жодних Авторизацій на запит.


Дякую, я спробував, але це не допомагає. Щоб переконатися, що це не так, я включив свої облікові дані в .curlrc (без уникнення @, здається, працює для стандартної команди curl), але не для pycurl. Дивіться оновлений розділ.
kenorb

Спасибі, я думав, що щось пропустив. Я повідомляв про помилку тут: bugs.launchpad.net/ubuntu/+source/apt/+bug/1075180
kenorb

Ви також встановили https_proxy? Дивіться помилку bugs.launchpad.net/ubuntu/+source/software-properties/+bug/…
popey

Можливо, це проблема, пов’язана з сеансами та змінами середовища. Ви можете спробувати експортувати http_proxy та https_proxy в / etc / profile, а потім перезавантажте машину (якщо можливо) та спробуйте її ще раз.
jap1968

Що стосується того, що jap1968 говорить вище за мене, я би переконався, що встановлені і http_proxy, і HTTP_PROXY (і https_proxy, і HTTPS_PROXY). Завдяки чутливості регістру Linux це фактично дві різні змінні - і, найкраще, не всі програми будуть використовувати ту чи іншу. Зрозуміло, це звучить скоріше як проблема із тим, як передається комбінація імені користувача / пароля (через "@"), але це все одно варто зняти.
YellowApple

Відповіді:


10

Обхід, якщо apt-getвсе ще працює за проксі

  • додавати джерела вручну в /etc/apt/sources.list
  • додати ключ gpg

Додавання джерел вручну

Я думаю, що на launchpad.net кожен ppa все ще містить невеликий опис, як додавати джерела вручну. Сайт Launchpad для згаданої рри ppa:nilarimogard/webupd8є https://launchpad.net/~nilarimogard/+archive/webupd8 . Якщо ви прокрутите вниз, ви побачите розширювану етикетку Технічні деталі цього PPA . Якщо розгорнути його, ви знайдете опис, як додати джерела вручну. Додайте наступні рядки до згаданого/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 

Звичайно, ви повинні налаштувати квантал до будь-якої версії, яку ви зараз використовуєте.

Додавання ключа підпису

Опис також містить ключ підпису . Це важливо, щоб ваша система завжди переконалася, що ви насправді отримуєте надійну ppa-адресу. У випадку з вашою PPA, яка є 1024R/4C9D234C(також можна знайти в Технічних подробицях цього Угоди ), де важлива кількість за косою рисою. Ви можете додати відбиток пальця через apt-keyпрограму. Зазвичай ви виконували б наступну команду

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

Додавання, якщо apt-keyне працює через проксі

Оскільки у вас вже були проблеми з add-apt-repositoryпрограмою, це може не працювати. Таким чином, ви можете завантажити та додати ключ 1024 біт вручну. Якщо wgetпрацює, ви можете зробити це за один крок.

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

В іншому випадку безпечний " http://keyserver.ubuntu.com:11371/pks/lookup?op=get&search=0x531EE72F4C9D234C ", наприклад, /path/keyі використовуйте, sudo apt-key add /path/keyщоб додати його.

Закрийте зі звичайним

Після цього вам доведеться оновити інформацію про сховища, apt-get updateі тоді ви зможете завантажити пакунки.

Ресурси

Мій особистий фаворит щодо використання механізму пакування (на жаль німецькою мовою): http://wiki.ubuntuusers.de/Paketquellen_freischalten/PPA

У версії для запуску також згадуються всі важливі моменти: https://help.launchpad.net/Packaging/PPA/InstallingSoftware

Так як нетиповий використовувати APT-ключ описаним способом я знайшов тільки інформацію в довідкових сторінках, man apt-key.

Відповідна відповідь, яка в значній мірі описує стандартний спосіб встановлення ppa вручну: /ubuntu//a/38029/128349


@kenorb не знаю, чи отримуєте ви сповіщення, якщо я редагую свою публікацію, тому: ping: "можливе вирішення проблеми"
LeoR

Якщо ваша проблема полягає в тому, що порт 11371 заблокований у вашому корпоративному брандмауері, тепер ви можете використовувати порт 80 замість цього: "sudo apt-key adv --keyserver hkp: //keyserver.ubuntu.com: 80 --recv-keys 4C9D234C "
leszek.hanusz

7

Насправді це здається набагато простішим, ніж відповідь, розміщена раніше. Вам просто потрібно "судо", щоб знати, що ви стоїте за проксі-сервером, і це працюватиме без особливих зусиль. Для цього вам потрібно експортувати свій проксі-сервер httpі httpsтак, як ви це робите:

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

а потім додати Defaults env_keep="https_proxy"до кінця /etc/sudoersфайлу. Після цього ви зможете додати ppa за допомогою команди:

sudo add-apt-repository ppa:the_ppa_you_want_to_add

або використовувати

sudo -E add-apt-repository ppa:the_ppa_you_want_to_add

якщо ви не хочете змінювати /etc/sudoersфайл. -EОпція експортує змінні середовища користувача SUDO.

Я детально описав про це тут, у своєму блозі .


1

Переконайтеся, що підхожий проксі встановлений, як показано нижче

sudo vi /etc/apt/apt.conf

додайте наступні настройки проксі і збережіть файл

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

крім того, експорт слід у терміналі перед запуском команди

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

Це має спрацювати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.