Назад | Перейти на главную страницу

Настройте apt для использования прокси в бродячем поле

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

Я настроил запущенный прокси-сервер, и я подумал, что сказал apt использовать его, установив это в скрипте Vagrant:

config.vm.provision :shell, :inline => 'echo \'Acquire { Retries "0"; HTTP { Proxy "http://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
config.vm.provision :shell, :inline => 'echo \'Acquire { Retries "0"; FTP { Proxy "ftp://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'
config.vm.provision :shell, :inline => 'echo \'Acquire { Retries "0"; HTTPS { Proxy "https://10.0.2.2:3128"; }; };\' >> /etc/apt/apt.conf'

И он работает частично, то есть первоначальные запросы источников попадают в кеш и работают, когда мое соединение Wi-Fi отключено, но Squid работает и имеет некоторые записи в его кеше. Я также вижу несколько запросов, попадающих в Squid из файла журнала Squids:

1367492453.816     34 127.0.0.1 TCP_REFRESH_MODIFIED/200 592 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release.gpg - DIRECT/91.189.92.181 -
1367492453.987    168 127.0.0.1 TCP_REFRESH_MODIFIED/200 49973 GET http://security.ubuntu.com/ubuntu/dists/precise-security/Release - DIRECT/91.189.92.181 -
1367492453.999    325 127.0.0.1 TCP_MISS/404 588 GET http://us.archive.ubuntu.com/ubuntu/dists/precise/InRelease - DIRECT/91.189.91.13 text/html
1367492454.113    114 127.0.0.1 TCP_MISS/404 596 GET http://us.archive.ubuntu.com/ubuntu/dists/precise-updates/InRelease - DIRECT/91.189.91.13 text/html

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

Итак, мой вопрос, как мне настроить Apt для использования прокси для всех своих запросов?

кстати, я также попытался настроить, установив переменную среды http_proxy:

 config.vm.provision :shell, :inline => "echo 'export http_proxy=http://10.0.2.2:3128' >> /etc/profile.d/proxy.sh"

Это имеет тот же эффект - некоторые запросы, похоже, попадают в Squid, но не все из них, и особенно не фактические пакеты.

Несмотря на то, что ваша проблема может быть в конфигурации squid, чтобы ответить на тему, теперь есть vagrant-proxyconf плагин. Вы можете установить его через:

vagrant plugin install vagrant-proxyconf

С его помощью вы можете указать прокси Apt глобально в $HOME/.vagrant.d/Vagrantfile без необходимости использовать средства обеспечения оболочки во всех файлах Vagrant для конкретного проекта.

Пример:

Vagrant.configure("2") do |config|
  config.apt_proxy.http  = "http://10.0.2.2:3128"
  config.apt_proxy.https = "http://10.0.2.2:3128"
end

или конфигурация прокси по умолчанию:

Vagrant.configure("2") do |config|
  if Vagrant.has_plugin?("vagrant-proxyconf")
    config.proxy.http     = "http://192.168.0.2:3128"
    config.proxy.https    = "http://192.168.0.2:3128"
    config.proxy.no_proxy = "localhost,127.0.0.1,.example.com"
  end
  # ... other stuff
end

Возможно, что apt использует squid для всех своих запросов, но squid не кэширует результаты. Вы можете проверить это, прослушав трафик или выключив squid, пока apt загружает пакеты и проверяет, не сработают ли они. Какое значение maximum_object_size в вашей конфигурации squid?

Следующий вопрос, если вы настроили частную сеть, например:

config.vm.network "private_network", ip: "192.168.22.22"
config.vm.provision "shell", path: "scripts/provision.sh"

Мне было легко настроить прокси, просто экспортировав http_proxy в сценарии подготовки, например:

# Detect proxy.
GW=$(netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10)
curl -s localhost:3128 > /dev/null && export http_proxy="http://localhost:3128"
curl -s $GW:3128       > /dev/null && export http_proxy="http://$GW:3128"

Тогда беги apt-get по-прежнему.

Это должно обнаружить ваш прокси-сервер squid на вашем локальном хосте или на самом хосте.

Увеличить maximum_object_size значение, пример:

maximum_object_size 64 MB

который необходимо определить перед cache_dir линия.