Class: Vagabund::Settler::Package

Inherits:
Vagabund::Settler::Packages::Base show all
Defined in:
lib/vagabund/settler/packages.rb

Constant Summary collapse

EXTENSIONS =
['.gz', '.bz', '.bz2', '.xz', '.zip', '.tar', '.tgz', '.tbz', '.tbz2', '.txz']
BUILDER =
Proc.new do |package, machine, channel|
  execute "cd #{build_path}; ./configure && make", verbose: true
end
CLEANER =
Proc.new do |package, machine, channel|
  sudo "rm -rf #{build_root}"
end
EXTRACTOR =
Proc.new do |package, machine, channel|
  if build_path_exists?(machine)
    machine.ui.warn "Build path #{build_path} already exists, using it for the build. If you would like to use a clean source tree, you should manually remove it and run `vagrant provision` again."
  elsif File.directory?(local_package)
    execute "cp -r #{local_package} #{build_path}" if local_package != build_path
  else
    execute "mkdir -p #{build_path}"
    local_ext = File.extname(local_package)

    case local_ext
    when '.gz'
      execute "cd #{build_root}; gzip -dc #{local_package} > #{build_path}/#{File.basename(local_package, local_ext)}"
    when '.tgz'
      execute "cd #{build_root}; gzip -dc #{local_package} > #{build_path}/#{File.basename(local_package, local_ext)}.tar"
    when '.bz', '.bz2'
      execute "cd #{build_root}; bzip2 -dc #{local_package} > #{build_path}/#{File.basename(local_package, local_ext)}"
    when '.tbz', '.tbz2'
      execute "cd #{build_root}; bzip2 -dc #{local_package} > #{build_path}/#{File.basename(local_package, local_ext)}.tar"
    when '.xz'
      execute "cd #{build_root}; xz -dc #{local_package} > #{build_path}/#{File.basename(local_package, local_ext)}"
    when '.txz'
      execute "cd #{build_root}; xz -dc #{local_package} > #{build_path}/#{File.basename(local_package, local_ext)}.tar"
    when '.zip'
      execute "cd #{build_root}; unzip #{local_package} -d #{build_path}"
      execute("cd #{build_path}; mv #{File.basename(local_package, local_ext)}/* ./") rescue nil
      execute("cd #{build_path}; mv #{File.basename(local_package, local_ext)}/.* ./") rescue nil
      execute("cd #{build_path}; mv #{name}-#{version}/* ./") rescue nil
      execute("cd #{build_path}; mv #{name}-#{version}/.* ./") rescue nil
      execute("cd #{build_path}; rm -rf #{File.basename(local_package, local_ext)}") rescue nil
    when '.tar'
      begin
        execute "cd #{build_root}; tar xf #{local_package} #{File.basename(local_package, local_ext)} -C #{build_path}"
      rescue
        begin
          execute "cd #{build_root}; tar xf #{local_package} #{name}-#{version} -C #{build_path}"
        rescue
          execute "cd #{build_root}; tar xf #{local_package} -C #{build_path}"
        end
      end
    end

    build_files = ""
    execute "cd #{build_path}; ls" do |type, data|
      build_files = data
    end

    if build_files.split($/).length == 1
      new_package_file = File.basename(build_files.chomp)
      if Package::EXTENSIONS.include?(File.extname(new_package_file))
        execute "mv #{File.join(build_path, new_package_file)} #{build_root}"
        sudo    "rm -rf #{local_package} #{build_path}"
        config.local_package = File.join(build_root, new_package_file)
        
        # Re-execute this proc directly instead of going back through extract() or action_exec()
        detail "Unpacking #{local_package}..."
        instance_exec self, machine, machine.communicate, &EXTRACTOR
      end
    end

  end
end
INSTALLER =
Proc.new do |package, machine, channel|
  sudo "cd #{build_path}; make install", verbose: true
end
PULLER =
Proc.new do |package, machine, channel|
  if package_exists?(machine)
    config.local_package = existing_package_file(machine)
    machine.ui.warn "Package #{local_package} already exists, using it for the build. If you would like to re-download the package, you should manually remove it then run `vagrant provision` again."
  else
    source.pull machine, local_package
  end
end

Instance Attribute Summary

Attributes inherited from Vagabund::Settler::Packages::Base

#config

Class Method Summary collapse

Methods inherited from Vagabund::Settler::Packages::Base

#action_exec, #build, #build_path, #build_root, #clean, #configure, #exec_after, #exec_before, #extract, #hook_exec, #install, #local_package, #name, #provision, #pull, #skip, #skip?, #source, #version

Class Method Details

.new(*args, &block) ⇒ Object



95
96
97
# File 'lib/vagabund/settler/packages.rb', line 95

def self.new(*args, &block)
  Packages::Base.new(*args, &block)
end