class ArkToRpm::Converter

Public Class Methods

new(opts) click to toggle source
# File lib/ark_to_rpm.rb, line 7
def initialize(opts)
  abort_if_option_missing(opts, :name)
  abort_if_option_missing(opts, :package_version)
  abort_if_option_missing(opts, :archive_url)
  abort_if_option_missing(opts, :release)

  @package_location = opts[:archive_url]
  @version_number = opts[:package_version]
  @release = opts[:release]
  @name = opts[:name]
  @binaries = opts[:binaries]
  @install_root = opts[:install_root]
  @bin_link_root = opts[:binary_root]
  @overlay_directory = opts[:overlay_directory]
  @depends = opts[:depends] || []
  @package_name = File.basename @package_location
  @temp_root = 'temporary_root'
end

Public Instance Methods

convert() click to toggle source
# File lib/ark_to_rpm.rb, line 26
def convert
  clean_and_create_directory(@temp_root)
  fetch_file(@package_name, @package_location)

  archive_root_directories = get_archive_root_directories(@package_name)

  package_directory = archive_root_directories.first
  temp_install_root = File.join(@temp_root, @install_root)

  make_directory(temp_install_root)

  unpack_archive(temp_install_root,@package_name)

  if @overlay_directory
    overlay(@overlay_directory, temp_install_root, package_directory)
  end

  setup_bin_symlinks(package_directory)

  depends_string = @depends.map{|dependency| "--depends '#{dependency}'"}.join(' ')

  fpm_build = "fpm -t rpm -s dir --force --name #{@name} #{depends_string} --version #{@version_number} --iteration #{@release} -C #{@temp_root} ./"

  run_command(fpm_build, 'Building rpm with fpm')

  FileUtils.rm_rf @temp_root if File.directory? @temp_root

  FileUtils.rm_rf @package_name
end
is_tar_bz2?(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 84
def is_tar_bz2?(package_name)
  package_name.end_with?('.tar.bz2') || package_name.end_with?('.tbz')
end
is_tar_gz?(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 80
def is_tar_gz?(package_name)
  package_name.end_with?('.tar.gz') || package_name.end_with?('.tgz')
end
is_zip?(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 76
def is_zip?(package_name)
  package_name.end_with?('.zip')
end
overlay(overlay_directory, temp_install_root,package_directory) click to toggle source
# File lib/ark_to_rpm.rb, line 56
def overlay(overlay_directory, temp_install_root,package_directory)
  target_directory = File.join(temp_install_root, package_directory)
  puts "Overlaying directory: #{overlay_directory} onto: #{target_directory}"
  
  `cp -rf #{File.join(overlay_directory,'*')} #{target_directory}`
end
unpack_archive(temp_install_root,package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 63
def unpack_archive(temp_install_root,package_name)
  if is_tar_gz?(package_name)
    untar_gz_package(package_name, temp_install_root)
  end
  if is_zip?(package_name)
    unzip_package(package_name,temp_install_root)
  end
  if is_tar_bz2?(package_name)
    untar_bz2_package(package_name,temp_install_root)
  end
end
untar_bz2_package(package_name, temp_install_root) click to toggle source
# File lib/ark_to_rpm.rb, line 96
def untar_bz2_package(package_name, temp_install_root)
  run_command("tar -C #{temp_install_root} -xjf #{package_name}", 'Unpacking the archive to the temp root')
end
untar_gz_package(package_name, temp_install_root) click to toggle source
# File lib/ark_to_rpm.rb, line 92
def untar_gz_package(package_name, temp_install_root)
  run_command("tar -C #{temp_install_root} -xzf #{package_name}", 'Unpacking the archive to the temp root')
end
unzip_package(package_name, temp_install_root) click to toggle source
# File lib/ark_to_rpm.rb, line 88
def unzip_package(package_name, temp_install_root)
  run_command("unzip -d #{temp_install_root} #{package_name}", 'Unpacking the archive to the temp root')
end

Private Instance Methods

abort_if_option_missing(options, option_to_check_for) click to toggle source
# File lib/ark_to_rpm.rb, line 119
def abort_if_option_missing(options, option_to_check_for)
  if options[option_to_check_for].nil?
    abort "Please specify a #{option_to_check_for.to_s} for this package. Use -h for help."
  end
end
clean_and_create_directory(directory) click to toggle source
# File lib/ark_to_rpm.rb, line 130
def clean_and_create_directory(directory)
  FileUtils.rm_rf directory if File.directory? directory
  make_directory directory
end
fetch_file(target_file_name, source_file) click to toggle source
# File lib/ark_to_rpm.rb, line 135
def fetch_file(target_file_name, source_file)
  if source_file.start_with? 'http'
    puts "Downloading #{source_file} to #{target_file_name}"
    `curl -L #{source_file} -o #{target_file_name}` unless File.exists?(target_file_name)
  else
    FileUtils.cp(source_file,target_file_name)
  end
end
get_archive_root_directories(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 144
def get_archive_root_directories(package_name)
  if is_tar_gz?(package_name)
    return get_archive_root_directories_for_tar_gz(package_name)
  end
  if is_zip?(package_name)
    return get_archive_root_directories_for_zip(package_name)
  end
  if is_tar_bz2?(package_name)
    return get_archive_root_directories_for_tar_bz2(package_name)
  end
end
get_archive_root_directories_for_tar_bz2(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 156
def get_archive_root_directories_for_tar_bz2(package_name)
  `tar tjf #{package_name} | sed -e 's@/.*@@' | uniq`.split("\n")
end
get_archive_root_directories_for_tar_gz(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 164
def get_archive_root_directories_for_tar_gz(package_name)
  `tar tzf #{package_name} | sed -e 's@/.*@@' | uniq`.split("\n")
end
get_archive_root_directories_for_zip(package_name) click to toggle source
# File lib/ark_to_rpm.rb, line 160
def get_archive_root_directories_for_zip(package_name)
  `unzip -l #{package_name} | awk '{print $4}'| grep -v "^Name$" | grep -v "^----$" | grep -v "^$" | sed -e 's@/.*@@' | uniq`.split("\n")
end
make_directory(directory_to_make) click to toggle source
# File lib/ark_to_rpm.rb, line 125
def make_directory(directory_to_make)
  puts "Making directory: #{directory_to_make}"
  FileUtils.mkdir_p(directory_to_make)
end
only_one_root_directory?(archive_root_directories) click to toggle source
# File lib/ark_to_rpm.rb, line 168
def only_one_root_directory?(archive_root_directories)
  archive_root_directories.count == 1
end
run_command(command, description=nil) click to toggle source
# File lib/ark_to_rpm.rb, line 172
def run_command(command, description=nil)
  puts description unless description.nil?
  puts "Running command: #{command}"
  output = `#{command}`
  return_code = $?.to_i
  puts output
  if return_code != 0
    puts "Failed: #{description}"
    false
  end
  true
end