Configure o apt para usar o proxy na caixa vagrant

4

Estou usando o Vagrant para configurar uma máquina virtual para testes. Eu gostaria que o apt dentro da máquina virtual usasse um proxy na máquina host para permitir que o cache de todos os downloads persistisse entre as instâncias da máquina virtual em execução, não apenas para melhorar a velocidade, mas para permitir que eu iniciasse a instância do vagrant quando sem conexão com a internet.

Eu configurei o proxy que está sendo executado, e achei que tinha dito para usá-lo configurando isso no script do 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'

E ele está funcionando parcialmente, ou seja, as solicitações iniciais de fontes atingem o cache e funcionam quando minha conexão Wi-Fi está desativada, mas o Squid está em execução e tem algumas entradas em seu cache. Eu também posso ver algumas requisições atingindo o Squid do arquivo de log do 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

No entanto, a maior parte do download de pacotes não está sendo armazenada em cache e não parece passar pelo Squid, ou seja, vejo um grande uso da rede quando eles são baixados e eles não aparecem no log de acesso do Squid. .

Então, minha pergunta como configuro o Apt para usar um proxy para todas as solicitações?

btw Eu também tentei configurar definindo a variável de ambiente http_proxy :

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

Isso tem o mesmo efeito - algumas solicitações parecem estar acertando o Squid, mas não todas, e particularmente não os pacotes atuais.

    
por Danack 02.05.2013 / 13:56

3 respostas

2

É possível que o apt esteja usando o squid para todas as suas requisições, mas o squid não está armazenando os resultados em cache. Você pode verificar isso farejando o tráfego ou desligando o squid enquanto o apt estiver baixando pacotes e vendo se eles falharem. O que é o maximum_object_size na configuração do seu squid?

    
por 03.05.2013 / 05:37
8

Mesmo que seu problema esteja na configuração do squid, para responder ao tópico, agora há vagrant-proxyconf plugin. Você pode instalá-lo via:

vagrant plugin install vagrant-proxyconf

Com ele você pode especificar o proxy do Apt globalmente em $HOME/.vagrant.d/Vagrantfile sem a necessidade de usar provedores de shell em todos os Vagrantfiles específicos do projeto.

Exemplo:

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

ou configuração de proxy padrão:

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
    
por 28.06.2013 / 15:21
0

Após a questão do título, se você tiver configuração de rede privada, como:

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

Achei fácil configurar o proxy simplesmente exportando http_proxy no script de provisionamento, como:

# 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"

Em seguida, execute apt-get como de costume.

Isso deve detectar seu proxy do squid em seu host local ou hospedar-se.

Para aumentar o valor maximum_object_size , o exemplo é:

maximum_object_size 64 MB

que precisa ser definido antes de cache_dir line.

    
por 30.11.2015 / 23:06