Skip to content

Instantly share code, notes, and snippets.

@maelstrom168
Forked from juanje/gist:3797297
Last active August 29, 2015 14:09
Show Gist options
  • Select an option

  • Save maelstrom168/928e83db839566a41559 to your computer and use it in GitHub Desktop.

Select an option

Save maelstrom168/928e83db839566a41559 to your computer and use it in GitHub Desktop.

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.

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