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