From 1c2116f317d7e6eabcef3b5dc4bdeb4a169928b6 Mon Sep 17 00:00:00 2001 From: Fabio Rehm Date: Fri, 14 Feb 2014 00:28:12 -0200 Subject: [PATCH] Support for offline provisioning of apt-packages by caching `/var/lib/apt/lists` [GH-84] --- CHANGELOG.md | 1 + lib/vagrant-cachier/bucket.rb | 1 + lib/vagrant-cachier/bucket/apt_lists.rb | 33 +++++++++++++++++++ .../cap/debian/apt_lists_dir.rb | 13 ++++++++ lib/vagrant-cachier/capabilities.rb | 5 +++ 5 files changed, 53 insertions(+) create mode 100644 lib/vagrant-cachier/bucket/apt_lists.rb create mode 100644 lib/vagrant-cachier/cap/debian/apt_lists_dir.rb diff --git a/CHANGELOG.md b/CHANGELOG.md index f88a3a1..c67cc9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ BACKWARDS INCOMPATIBILITY: FEATURES: + - Support for offline provisioning of apt-packages by caching `/var/lib/apt/lists` [GH-84] - Support for specifying custom cache bucket synced folder opts - Support to force disabe the plugin [GH-72] - Automatically disable the plugin for cloud providers [GH-45] diff --git a/lib/vagrant-cachier/bucket.rb b/lib/vagrant-cachier/bucket.rb index 7f38131..66fbd6b 100644 --- a/lib/vagrant-cachier/bucket.rb +++ b/lib/vagrant-cachier/bucket.rb @@ -40,6 +40,7 @@ require_relative "bucket/pacman" require_relative "bucket/yum" require_relative "bucket/rvm" require_relative "bucket/apt_cacher" +require_relative "bucket/apt_lists" require_relative "bucket/composer" require_relative "bucket/npm" require_relative "bucket/zypper" diff --git a/lib/vagrant-cachier/bucket/apt_lists.rb b/lib/vagrant-cachier/bucket/apt_lists.rb new file mode 100644 index 0000000..65ed60f --- /dev/null +++ b/lib/vagrant-cachier/bucket/apt_lists.rb @@ -0,0 +1,33 @@ +module VagrantPlugins + module Cachier + class Bucket + class AptLists < Bucket + def self.capability + :apt_lists_dir + end + + def install + machine = @env[:machine] + guest = machine.guest + + if guest.capability?(:apt_lists_dir) + guest_path = guest.capability(:apt_lists_dir) + + @env[:cache_dirs] << guest_path + + machine.communicate.tap do |comm| + comm.execute("mkdir -p /tmp/vagrant-cache/#{@name}/partial") + unless comm.test("test -L #{guest_path}") + comm.sudo("rm -rf #{guest_path}") + comm.sudo("mkdir -p `dirname #{guest_path}`") + comm.sudo("ln -s /tmp/vagrant-cache/#{@name} #{guest_path}") + end + end + else + @env[:ui].info I18n.t('vagrant_cachier.skipping_bucket', bucket: 'apt-lists') + end + end + end + end + end +end diff --git a/lib/vagrant-cachier/cap/debian/apt_lists_dir.rb b/lib/vagrant-cachier/cap/debian/apt_lists_dir.rb new file mode 100644 index 0000000..7d454e8 --- /dev/null +++ b/lib/vagrant-cachier/cap/debian/apt_lists_dir.rb @@ -0,0 +1,13 @@ +module VagrantPlugins + module Cachier + module Cap + module Debian + module AptListsDir + def self.apt_lists_dir(machine) + '/var/lib/apt/lists' + end + end + end + end + end +end diff --git a/lib/vagrant-cachier/capabilities.rb b/lib/vagrant-cachier/capabilities.rb index 81323ac..a6b46ef 100644 --- a/lib/vagrant-cachier/capabilities.rb +++ b/lib/vagrant-cachier/capabilities.rb @@ -36,6 +36,11 @@ module VagrantPlugins Cap::Debian::AptCacherDir end + guest_capability 'debian', 'apt_lists_dir' do + require_relative 'cap/debian/apt_lists_dir' + Cap::Debian::AptListsDir + end + guest_capability 'redhat', 'yum_cache_dir' do require_relative 'cap/redhat/yum_cache_dir' Cap::RedHat::YumCacheDir