Skip to content

Instantly share code, notes, and snippets.

@juanje
Created September 28, 2012 00:38
Show Gist options
  • Star 70 You must be signed in to star a gist
  • Fork 12 You must be signed in to fork a gist
  • Save juanje/3797297 to your computer and use it in GitHub Desktop.
Save juanje/3797297 to your computer and use it in GitHub Desktop.
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(basebox_name)
  cache_dir = Vagrant::Environment.new.home_path.join('cache', 'apt', basebox_name)
  partial_dir = cache_dir.join('partial')
  partial_dir.mkdir unless partial_dir.exist?
  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"
  config.vm.box_url = "https://opscode-vm.s3.amazonaws.com/vagrant/boxes/opscode-ubuntu-12.04.box"
  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.

@fxkr
Copy link

fxkr commented Nov 27, 2015

Actually, only use ~/.cache if $XDG_CACHE_HOME is not set or empty. If it's set, use that.

Here's the spec: http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment