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
setup_bin_symlinks(package_directory)
click to toggle source
# File lib/ark_to_rpm.rb, line 101 def setup_bin_symlinks(package_directory) unless @binaries.nil? @binaries.each do |binary_relative_path| binary_name = File.basename(binary_relative_path) temp_bin_link_root = File.join(@temp_root, @bin_link_root) temp_bin_link_path = File.join(temp_bin_link_root, binary_name) original_binary_path = File.join(@install_root, package_directory, binary_relative_path) make_directory(temp_bin_link_root) link_command = "ln -s #{original_binary_path} #{temp_bin_link_path}" run_command(link_command) end end end