Mount apt cache of a Vagrant box in the host to spin up the packages installation
This is a little trick I use to spin up the packages instalation on Debian/Ubuntu boxes in Vagrant.
I add a simple function that checks if a directory named something similar to ~/.vagrant.d/cache/apt/opscode-ubuntu-12.04/partial (it may have another path in Windows or MacOS) and create the directory if it doesn't already exist.
def local_cache(box_name)
cache_dir = File.join( File.expand_path(Vagrant::Environment::DEFAULT_HOME),
'cache',
'apt',
box_name)
partial_dir = File.join(cache_dir, 'partial')
FileUtils.mkdir_p(partial_dir) unless File.exists? partial_dir
cache_dir
end
I put this funcion in my Vagrantfile so I can use it like this:
Vagrant::Config.run do |config|
config.vm.box = "opscode-ubuntu-12.04"
cache_dir = local_cache(config.vm.box)
config.vm.share_folder "v-cache",
"/var/cache/apt/archives/",
cache_dir
end
The result is that the apt cache inside the VM (/var/cache/apt/archives/) is always mounted on the same directory on the host (~/.vagrant.d/cache/apt/opscode-ubuntu-12.04/ in this case) and apt just download the packages the first time or if the package has been updated.
This save me a lot of time while I'm developing or debuging Chef cookbooks. Mostly when my recipes need to install many packages.
The original one (with better format) is here: https://gist.github.com/3797297