Как заставить add-apt-repository работать через прокси?

119

Я пытаюсь следовать инструкциям «Установка Cross Toolchain на хостах Ubuntu 10.04 (Lucid) и 10.10 (Maverick)» на wiki.linaro.org (на моей виртуальной машине Ubuntu 10.04). Первый шаг:

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

Но когда я бегу, я получаю:

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

Я предполагаю, что проблема в моей конфигурации для прокси-сервера моего работодателя, особенно для HTTPS.

Когда я открыл https://launchpad.net/api/1.0/~linaro-maintainers/+archive/toolchain в Firefox, у меня появилось сообщение «Время ожидания истекло». Затем я зашел в «Настройки» Firefox -> «Дополнительно» -> «Сеть» -> «Настройки», установил для HTTP-прокси значение «шлюз», а для порта - 8080 и установил флажок «Использовать этот прокси-сервер для всех протоколов». Затем страница загружена. Это поддерживает мою теорию.

Я попытался установить переменные среды http_proxy и https_proxy (как в нижнем, так и в верхнем регистре):

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

Я также попытался изменить их на:

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

И я попытался добавить эту вторую строку в /etc/apt/apt.conf:

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

Но я продолжаю получать ту же ошибку.

Как мне устранить это?

Обновление: я следовал инструкциям в принятом ответе на «Проблема добавления репозиториев и подключения с терминала за прокси-сервером» и получил дальнейшее:

$ 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

Интересно, означает ли «ошибка HTTP-извлечения» мне также нужно добавить «Defaults env_keep = http_proxy» в /etc/sudoers...

Обновление № 2: я добавил:

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

... как в комментарии 18 для ошибки 516032 , но я все еще получаю ту же ошибку "gpgkeys: ошибка HTTP-выборки 7: не удалось подключиться к хосту".

И это любопытно

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

... потому что http_proxy там нет.

Любой совет приветствуется.

Обновление № 3: Поскольку хост моей виртуальной машины - ноутбук, я взял его домой и попробовал там (без прокси):

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

Это сработало. Так что проблема связана с настройкой прокси. Но я полагаю, у меня есть обходной путь.

Дэрил Спитцер
источник
Просто для справки askubuntu.com/questions/60217/…
Дипак Раджпут

Ответы:

183

В дополнение к настройке прокси скажите sudoсохранить среду с помощью -Eопции:

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

с именем пользователя и паролем:

export https_proxy=https://<username>:<password>@<proxy>:<port>
Амаль Пиллаи
источник
Я действительно работал
Шашват Кумар
14
-E (после выполнения всех других вещей выше) заставил это работать на меня.
cschooley
2
и да, https_proxyконфигурация была необходима ...: P
monkut
1
Как добавить прокси навсегда и избежать переключения -E? Я настроил файл / etc / environment с добавленными строками ... Спасибо
Энрике
1
From man sudo: -E, --preserve-envУказывает политике безопасности, что пользователь желает сохранить существующие переменные среды. Политика безопасности может возвращать ошибку, если у пользователя нет разрешения на сохранение среды.m
Пабло A
39

Используйте следующий код в терминале, чтобы добавить ключ gpg за прокси,

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

И заменить заглавные буквы соответственно. Если вы используете прокси-сервер без какой-либо аутентификации пользователя (т.е. имени пользователя и пароля), используйте http-proxy=http://PROXY_URL:PORT/вместо этого.

Например, чтобы GPG_KEY=C2514567EEA14886вы могли использовать,

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

где,

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

Если у вас нет аутентификации пользователя, просто используйте,

sudo apt-key adv --keyserver-options http-proxy=http://10.10.2.21:3128/ --keyserver keyserver.ubuntu.com --recv-keys C2514567EEA14886
Патси Гомес
источник
3
На самом деле это не «исправляет» выполнение команды add-apt-repository. На самом деле это работает вокруг одной из своих задач. Необходима как минимум одна дополнительная команда: sudoedit /etc/apt/sources.list.d/XXXX.list + ручная редакция для добавления URL-адресов deb ...
Chucky
Было бы идеально, если бы вы добавили некоторую информацию, как исправить прокси навсегда. Для решения, которое вы предоставили, требуется
ОЧЕНЬ много
9

В заключение! Вам нужно установить https_proxy через:

export https_proxy=....

недостаточно только установить http_proxy.

И мне нужно было выполнить команду add-apt-repository от имени пользователя root, а не через sudo.

Код:

sudo su
add-apt-repository ppa:........
DaRattler
источник
6

Кажется, что конфигурация прокси настроена, но каким-то образом сервер не может связаться ...

У меня была очень похожая проблема, которую я решил следующим образом: корпоративный прокси-сервер разрешает только порты 80 и 443 по соображениям безопасности, поэтому событие, когда он настроен, поскольку протокол HKP использует порт 11371, не пропустит вас.

Таким образом, если не считать SSH и получить ключ с одного из ваших внешних серверов, загрузить его и установить его локально, вы можете указать сервер ключей из перечисленных ниже и указать порт:

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

например:

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

Бум, вуаля!

leroyse
источник
Ага. Это сработало для меня при установке Mono на Debian 7:sudo -E apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
ken
3

Причина ваше sudoersизменение не работает , как ожидалось, что вместо того , чтобы :

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

Вы должны были написать:

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

Также удостоверьтесь, что пространство между Defaultsи env_keepявляется вкладкой каждый раз.

Urhixidur
источник
3

Мне удалось обойти это путем редактирования /usr/lib/python3/dist-packages/softwareproperties/ppa.pyи добавления

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

под следующей строкой

"--keyserver", self.keyserver,

Дополнительная справочная информация

ppa.pyскрипт python, используемый add-apt-repositoryдля вызова gpg Иногда кажется, что в gpg есть ошибка, когда он не использует переменную окружения http_proxy. Это можно подтвердить, просмотрев файл /root/.gnupg/dirmngr.confи проверив, что honor-http-proxyоно не закомментировано.

Младшая леота
источник
3

Этот четырехступенчатый подход работал для меня на виртуальной машине Ubuntu 17.04 за корпоративным прокси.

  1. sudo apt-add-repository ppa:brightbox/ruby-ng и пусть это потерпит неудачу
  2. sudo apt update и искать сообщение об ошибке, как 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 теперь будет работать

Обратите внимание, что на виртуальной машине хоста работает CNTLMпрокси-сервер через порт 3128.

thegreendroid
источник
1
Вам не нужно ждать, пока apt скажет вам, что это за ключ. Это есть в технических деталях PPA : «Отпечаток пальца: 80F70E11F0F0D5F10CB20E62F5DA5F09C3173AA6»
Muru
Это правда, но я нашел этот процесс немного проще.
thegreendroid
1

Это помогло мне:

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

Я предполагаю, что есть некоторые переменные окружения, которые не нужны в команде, но не наносят вреда.

Лео
источник
1

Добавьте PPA вручную к вашему /etc/apt/sources.list:

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

Сохраните файл и запустите sudo apt-get update. Эта ошибка может появиться:

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

Выполните следующую команду, чтобы принять ключ для PPA, не забывая изменить ключ (5BB92C09DB82666C) для соответствующего PPA.

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

Беги sudo apt-get updateи все готово.

Ссылка: Как добавить PPA в Launchpad в Debian с помощью add-apt-repositoryкоманды

Радость
источник
1

На самом деле, я сталкиваюсь с теми же проблемами, вот как я нашел эту страницу.

  • Переменные окружения http_proxy (с учетом регистра) и https_proxy (независимо от регистра) что-то делают. Не устанавливать их на первом этапе не удается, установка переменных окружения, похоже, имеет некоторый эффект; это не удастся, если вы не экспортируете их

    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.
    

    (остальное удачно - на этот раз)

Дело в том, что иногда он просто застревает и заканчивается обычным сообщением об истечении времени ожидания: невозможно добавить PPA: «Ошибка чтения https://launchpad.net/api/1.0/~webupd8team/+archive/java : (7, ' Не удалось подключиться к порту 443 launchpad.net: истекло время ожидания соединения ")" '.

... но я обманываю, я делаю все это как root. Простое решение - отредактировать / etc / profile или, в Ubuntu / Mint, просто добавить скрипт в /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}'

О да, есть еще кое-что в curl (кстати, он используется в apt-add-repository). В руководстве говорится, что нужно добавить .curlrc в ваш домашний каталог. Поскольку apt-add-directory является собственностью root, это означает добавление его в /root/.curlrc:

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

Хорошая идея - сделать то же самое в вашем собственном ~ / .curlrc

Также полезно включить прокси в / etc / wgetrc, хотя это не имеет ничего общего с заданным вопросом, я просто сохраняю вам другой поиск в Google (если вы читаете это, у вас есть несколько с прокси ) ...

Marabiloso
источник
1

В /etc/apt/apt.conf.d/01proxyдобавьте что-то вроде этого

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

Это будет прокси для всех загрузок aptitude, но я думаю, что это единственный способ сделать это на сервере. Если ваш прокси-сервер поддерживает это, вы также можете использовать URL-адрес, http://my.proxy:port/www.target.site.com/urlкоторый, как я знаю, работает дляapt-cache-ng

Я не уверен, что add-apt-repository сам использует эти настройки, но если вы не можете сделать это, вы всегда можете добавить репозиторий в свой /etc/apt/sources.listили/etc/apt/sources.list.d/*mytoolchain*

Начиная с 11.10, в основном репо также есть кросс-инструментальная возможность apt-get install gcc-arm-linux-gnueabihf. Есть также кросс-инструментальные цепочки, доступные от emdebian, и некоторые инструкции здесь: http://gsoc.sitedethib.com/posts/apt-get_install_gcc-4.7-arm-linux-gnueabihf/

user72421
источник
user72421: как вы узнали, что прокси должен иметь префикс 01, а не другой номер?
jgomo3
Не работает с apt-get & keyserver
Вик
1

Я использую http через curl вместо того, чтобы пытаться прокси-ключ apt-key или gpg:

curl -sSL \ ' http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xBBEBDCB318AD50EC6865090613B00F1FD2C19886 ' \ | sudo apt-key add -

Этот метод следует использовать вместо apt-keyкомандной строки или http_proxyили https_proxyнастройки переменных окружения (которые отключены в новейших версиях APT-ключ).

Дэн Андерсон
источник
0

Выполните приведенную ниже команду в терминале

export http_proxy=http://username:password@proxyserver.net:port/
export ftp_proxy=http://username:password@proxyserver.netport/
Дипак Раджпут
источник
0

Общесистемные переменные среды действительно должны быть добавлены /etc/environment(использовать sudoили gksu), но сообщаемая вам ошибка, по-видимому, указывает на то, что данные gpg не найдены. Идеи:

  • проверьте настройки прокси (если у вас есть доступ)
  • проверьте, не прокси ли каким-либо образом прокси выводит зашифрованный трафик.
  • запустить непрерывный netstat, чтобы увидеть, действительно ли установлено соединение с прокси
  • последней инстанцией будет tcpdump & осмотреть в wireshark
  • попробуйте http туннель;)
t0m5k1
источник
0

Другое решение - добавить proxy.confфайл 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/";
Дэн Андерсон
источник