Faster ‘vagrant up’ with apt/deb Package Proxy

Create virtual machines faster by caching deb packages.

Use squid-deb-proxy on host OS, then add an apt.conf.d/ config file to make guest OS apt-get use your proxy.

Following these notes requires fluency with command line, sudo, daemons and vagrant.

I have written these short notes from memory, and it’s not a complete tutorial.

Host OS: squid-deb-proxy

$ sudo apt-get update
$ sudo apt-get -y install squid-deb-proxy

I also added “archive.ubuntu.com” to /etc/squid-deb-proxy/mirror-dstdomain.acl and ‘sudo systemctl reload squid’, but I didn’t verify if this change is really necessary.

Vagrantfile

You must update your own host OS IP address to Vagrantfile.

# Copyright 2017 Tero Karvinen http://TeroKarvinen.com

$tscript = <<TSCRIPT
set -o verbose

echo -e 'Acquire::http::proxy "http://192.168.10.41:8000";\nAcquire::https::proxy "http://192.168.10.41:8000";' \
 > '/etc/apt/apt.conf.d/30proxy'
cat /etc/apt/apt.conf.d/30proxy

apt-get update
apt-get -y install puppet ipython3 tree curl wget bash-completion postgresql
echo "See you on http://TeroKarvinen.com"
TSCRIPT

Vagrant.configure(2) do |config|

 config.vm.box = "bento/ubuntu-16.04"
 config.vm.provision "shell", inline: $tscript

 config.vm.define "tero" do |tero|
 tero.vm.hostname = "tero"
 tero.vm.network "forwarded_port", guest: 80, host: 12080
 end
end

Provisioning the Guest

$ vagrant up
$ vagrant ssh

The first time the machine is provisioned the package download takes normal time. After that, packages are downloaded from the host OS proxy and provisioning is much faster.

$ vagrant destroy; time vagrant up && vagrant ssh

Solutions to Common Problems

Are my packages really cached?

$ sudo tail /var/log/squid-deb-proxy/access.log

Should contain lines with TCP_MEM_HIT/200, which means a file was served from Squid cache.

Apt complains: “Extra junk at end of file”?

Quotes and semicolons are required, for example:

$ cat /etc/apt/apt.conf.d/30proxy
Acquire::http::proxy "http://192.168.10.41:8000";
Acquire::https::proxy "http://192.168.10.41:8000";

Conclusion

The speed benefit would be especially large when installing a lot of packages on provisioning or automatically building and destroying vagrant guests multiple times (e.g automatic testing).

Adminstrivia

Update: removed the percentages and minutes, because the tests were not done very carefully.

Posted in Uncategorized | Tagged , , , , , , , | Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • Picks

  • Boxing Clock for AndroidOcton8 Diving T-ShirtsShaking Tower Panda Android GameLearn Chinese with Android
  • Student projects