Как я игнорирую прокси если не доступный?

Следование инструкциям Лучшим способом кэшировать способные загрузки на LAN?, я настроил кэширующийся прокси в своей локальной сети. Так как та машина не всегда, я хотел бы смочь обновить исходный список и пакеты установки, не используя тот прокси, если недоступный.

Я уже считал Получать раздел группы в странице руководства apt.conf(5), но я не мог найти опцию как "Тихий Сбой".

В данный момент, sudo apt-get update и связанные команды перестали работать, потому что никакое соединение не могло быть установлено. Таким образом, как я настраиваю клиент так, чтобы прокси был проигнорирован, если это не доступно?

15
задан 13 April 2017 в 05:23

4 ответа

Существует недокументированная установка, Acquire::http::ProxyAutoDetect. Эта установка должна содержать полный путь к двоичному файлу и не может иметь аргументов. Команда должна произвести прокси, который будет использоваться (пример: http://10.0.0.1:8000).

Данный вышеупомянутую информацию, сценарий мог быть создан, который пробует прокси прежде, чем установить его. Если никакой прокси не доступен, прямое подключение должно использоваться.

Ниже такой сценарий обнаружения прокси, который пробует http://10.0.0.1:8000/ и http://10.0.0.2:8000 прокси.

Вставьте код /etc/apt/detect-http-proxy:

#!/bin/bash
# detect-http-proxy - Returns a HTTP proxy which is available for use

# Author: Lekensteyn <lekensteyn@gmail.com>

# Supported since APT 0.7.25.3ubuntu1 (Lucid) and 0.7.26~exp1 (Debian Squeeze)
# Unsupported: Ubuntu Karmic and before, Debian Lenny and before

# Put this file in /etc/apt/detect-http-proxy and create and add the below
# configuration in /etc/apt/apt.conf.d/30detectproxy
#    Acquire::http::ProxyAutoDetect "/etc/apt/detect-http-proxy";

# APT calls this script for each host that should be connected to. Therefore
# you may see the proxy messages multiple times (LP 814130). If you find this
# annoying and wish to disable these messages, set show_proxy_messages to 0
show_proxy_messages=1

# on or more proxies can be specified. Note that each will introduce a routing
# delay and therefore its recommended to put the proxy which is most likely to
# be available on the top. If no proxy is available, a direct connection will
# be used
try_proxies=(
10.0.0.1:8000
10.0.0.2:8000
)

print_msg() {
    # \x0d clears the line so [Working] is hidden
    [ "$show_proxy_messages" = 1 ] && printf '\x0d%s\n' "$1" >&2
}

for proxy in "${try_proxies[@]}"; do
    # if the host machine / proxy is reachable...
    if nc -z ${proxy/:/ }; then
        proxy=http://$proxy
        print_msg "Proxy that will be used: $proxy"
        echo "$proxy"
        exit
    fi
done
print_msg "No proxy will be used"

# Workaround for Launchpad bug 654393 so it works with Debian Squeeze (<0.8.11)
echo DIRECT

Теперь, APT должен быть настроен для использования вышеупомянутого сценария обнаружения прокси, таким образом, вставляет следующий код /etc/apt/apt.conf.d/30detectproxy:

# Fail immediately if a file could not be retrieved. Comment if you have a bad
# Internet connection
Acquire::Retries 0;

# undocumented feature which was found in the source. It should be an absolute
# path to the program, no arguments are allowed. stdout contains the proxy
# server, stderr is shown (in stderr) but ignored by APT
Acquire::http::ProxyAutoDetect "/etc/apt/detect-http-proxy";

Я также поместил следующий код в файл, чтобы препятствовать тому, чтобы некоторый хост был proxified.

# Override the default proxy, DIRECT causes a direct connection to be used
Acquire::http::Proxy {
    deb.opera.com DIRECT;
    dl.google.com DIRECT;
};

По умолчанию, выводы сценария, используется ли прокси или нет. Отключить это, редактирование /etc/apt/detect-http-proxy и изменение show_proxy_messages=1 кому: show_proxy_messages=0.

20
ответ дан 23 November 2019 в 02:45

Существует теперь официально поддерживаемый способ сделать это - использование опции - Acquire::http::Proxy-Auto-Detect (см. apt.conf страница справочника). Поведение подобно старому недокументированному Acquire::http::ProxyAutoDetect (отметьте присутствие/отсутствие дефисов в новых/старых опциях конфигурации), это в основном backwardly совместимо, но было расширено...

Я нахожусь в процессе отправленных патч к способным специалистам по обслуживанию для улучшения документации, но так как это вряд ли превратит его в версию Кв., которая поставлется с выпуском дистрибутива долгое время, я буду включать текст предложенного патча здесь:

Acquire::http::Proxy-Auto-Detect может использоваться для определения внешней команды, чтобы обнаружить, что прокси HTTP использует. APT может вызвать команду многократно и передаст URI команде как ее первый и единственный параметр. APT ожидает, что команда произведет прокси, который должен использоваться для контакта с рассматриваемым URI на его stdout как одна строка в стиле http://proxy:port/, или слово DIRECT если никакой прокси не должен использоваться. Никакой вывод не указывает, что универсальные настройки прокси должны использоваться.

Обратите внимание, что автоматическое обнаружение не будет использоваться для хоста, если определенная для хоста конфигурация прокси будет уже установлена через Acquire::http::Proxy::HOST.

Для диагностирования взаимодействий с внешней командой установить Debug::Acquire::http=yes и/или Debug::Acquire::https=yes например, использование -o параметр командной строки.

Обратите внимание, что это использует предварительную версию способных, версии 1.3~exp2 к 1,3 затем существует ошибка (вероятно, зафиксированный 1.3.1), который вызывает склонный проанализировать stderr внешней команды наряду с stdout.

3
ответ дан 23 November 2019 в 02:45

/etc/apt/apt.conf.d/02proxy:

Acquire::http::Proxy-Auto-Detect "/usr/local/bin/apt-proxy-detect.sh";

/usr/local/bin/apt-proxy-detect.sh:

#!/bin/bash
IP=192.168.88.1
PORT=3142
if nc -w1 -z $IP $PORT; then
    echo -n "http://${IP}:${PORT}"
else
    echo -n "DIRECT"
fi

Командная строка

  • Этому нужно nc работать (sudo apt-get install netcat) при пропавших без вести.
  • Удостоверьтесь Вы chmod +x /usr/local/bin/apt-proxy-detect.sh
  • Используйте полный путь при определении сценария.

Как это работает

Если это может соединиться с прокси, это печатает прокси использование APT это. Если это не может, это распечатать ПРЯМОЙ и пыхтение APT вперед обычно.

соус

1
ответ дан 23 November 2019 в 02:45

Я знаю, что этот вопрос старый, но он все еще актуален, и я хотел бы добавить еще один ответ.

Один из самых простых, переносимых и прозрачных способов в наши дни — установить на узлы пакет squid-deb-proxy-client.

0
ответ дан 25 April 2020 в 23:36

Другие вопросы по тегам:

Похожие вопросы: