Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

I'm using Vagrant to setup a virtual machine for testing. I would like apt inside the virtual machine to use a proxy on the host machine to allow caching of all the downloads to persist between instances of the virtual machine running, not only for improved speed but to allow me to start the vagrant instance when I have no internet connection.

I've setup the proxy which is running, and I thought I'd told apt to use it by setting this in the Vagrant script:

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'

And it's working partially i.e. the initial requests for sources hit the cache and work when my wifi connection is disabled but Squid is running and has some entries in it's cache. I can also see some requests hitting Squid from Squids log file:

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

However, the bulk of the download of packages are not being cached and doesn't appear to go through Squid at all i.e. I can see large network usage when they're downloaded and they don't appear in the Squid access log.

So my question how do I configure Apt to use a proxy for all it's requests?

btw I also tried configuring by setting the environment variable http_proxy:

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

This has the same effect - some requests appear to be hitting Squid but not all of them, and particularly not the actual packages.

share|improve this question
    
    
Hi Michael - the accepted answer to that question is to set "Acquire::http { Proxy "proxy:port";; };" which I'm already doing. I think the error may be on the squid side so will update it with relevant info. –  Danack May 3 '13 at 14:33

2 Answers 2

up vote 1 down vote accepted

Its possible that apt is using squid for all its requests, but squid isn't caching the results. You could verify this by sniffing traffic, or shutting down squid while apt is downloading packages and seeing if they fail. What is the maximum_object_size in your squid configuration?

share|improve this answer
    
It was set to 128MB which I though was enough. However changing it to 256MB makes the actual packages appear in the squid log. It looks like Squids still not caching them, but now they are appearing and I'm investigating with your suggestion of inspecting the packets. –  Danack May 3 '13 at 14:45
    
I'm still not sure why changing it to 256 made all the difference. None of the objects are anywhere near that size, but all the packages are showing up in the access log now. There's still some issues but they're Squid config issues. –  Danack May 3 '13 at 16:05
    
You may want to look at the config squid-deb-proxy uses. jorgecastro.org/2010/02/04/introducing-squid-deb-proxy –  sciurus May 4 '13 at 16:33

Even though your problem might be in the squid config, to answer to the topic, there is now vagrant-proxyconf plugin. With it you can specify the Apt proxy globally in $HOME/.vagrant.d/Vagrantfile without the need to use shell provisioners in all project specific Vagrantfiles.

Example:

Vagrant.configure("2") do |config|
  config.apt_proxy.http  = "10.0.2.2:3128"
  config.apt_proxy.https = "10.0.2.2:3128"
end
share|improve this answer
    
This fixed my problem, thank you very much! –  trigoman Aug 2 '13 at 16:46

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.