Class | BoxGrinder::RPMDependencyValidator |
In: |
lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb
lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb |
Parent: | Object |
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 35 35: def initialize( config, appliance_config, dir, kickstart_file, options = {} ) 36: @config = config 37: @appliance_config = appliance_config 38: @kickstart_file = kickstart_file 39: @dir = dir 40: 41: @log = options[:log] || Logger.new(STDOUT) 42: @exec_helper = options[:exec_helper] || ExecHelper.new( { :log => @log } ) 43: 44: @yum_config_file = "#{@dir.tmp}/yum.conf" 45: 46: # Because we're using repoquery command from our building environment, we must ensure, that our repository 47: # names are unique 48: @magic_hash = "boxgrinder-" 49: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 35 35: def initialize( config, appliance_config, dir, kickstart_file, options = {} ) 36: @config = config 37: @appliance_config = appliance_config 38: @kickstart_file = kickstart_file 39: @dir = dir 40: 41: @log = options[:log] || Logger.new(STDOUT) 42: @exec_helper = options[:exec_helper] || ExecHelper.new( { :log => @log } ) 43: 44: @yum_config_file = "#{@dir.tmp}/yum.conf" 45: 46: # Because we're using repoquery command from our building environment, we must ensure, that our repository 47: # names are unique 48: @magic_hash = "boxgrinder-" 49: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 101 101: def generate_package_list 102: packages = [] 103: for package in @appliance_config.packages 104: packages << package unless package.match /^@/ 105: end 106: packages 107: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 101 101: def generate_package_list 102: packages = [] 103: for package in @appliance_config.packages 104: packages << package unless package.match /^@/ 105: end 106: packages 107: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 109 109: def generate_repo_list(repos) 110: repo_list = "" 111: 112: repos.each do |repo| 113: repo_list += "#{@magic_hash}#{repo.name}," 114: end 115: 116: repo_list = repo_list[0, repo_list.length - 1] 117: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 109 109: def generate_repo_list(repos) 110: repo_list = "" 111: 112: repos.each do |repo| 113: repo_list += "#{@magic_hash}#{repo.name}," 114: end 115: 116: repo_list = repo_list[0, repo_list.length - 1] 117: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 137 137: def generate_yum_config( repo_list ) 138: File.open( @yum_config_file, "w") do |f| 139: 140: f.puts( "[main]\r\ncachedir=#{Dir.pwd}/#{@dir.tmp}/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" ) 141: 142: for repo in repo_list 143: f.puts( "[#{@magic_hash}#{repo.name}]" ) 144: f.puts( "name=#{repo.name}" ) 145: f.puts( "baseurl=#{repo.baseurl}" ) unless repo.baseurl.nil? 146: f.puts( "mirrorlist=#{repo.mirrorlist}" ) unless repo.mirrorlist.nil? 147: f.puts( "enabled=1" ) 148: f.puts 149: end 150: end 151: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 137 137: def generate_yum_config( repo_list ) 138: File.open( @yum_config_file, "w") do |f| 139: 140: f.puts( "[main]\r\ncachedir=#{Dir.pwd}/#{@dir.tmp}/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" ) 141: 142: for repo in repo_list 143: f.puts( "[#{@magic_hash}#{repo.name}]" ) 144: f.puts( "name=#{repo.name}" ) 145: f.puts( "baseurl=#{repo.baseurl}" ) unless repo.baseurl.nil? 146: f.puts( "mirrorlist=#{repo.mirrorlist}" ) unless repo.mirrorlist.nil? 147: f.puts( "enabled=1" ) 148: f.puts 149: end 150: end 151: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 69 69: def invalid_names( repo_list, package_list ) 70: @log.debug "Querying package database..." 71: 72: unless @appliance_config.is64bit? 73: arches = "i386,i486,i586,i686" 74: else 75: arches = "x86_64" 76: end 77: 78: repoquery_output = @exec_helper.execute( "repoquery --quiet --disablerepo=* --enablerepo=#{repo_list} -c '#{@yum_config_file}' list available #{package_list.join( ' ' )} --nevra --archlist=#{arches},noarch" ) 79: 80: invalid_names = [] 81: 82: for name in package_list 83: found = false 84: 85: repoquery_output.each do |line| 86: line = line.strip 87: 88: package = line.match( /^([\S]+)-\d+:/ ) 89: package = package.nil? ? line : package[1] 90: 91: if package.size > 0 and name.match( /^#{package.gsub(/[\+]/, '\\+')}/ ) 92: found = true 93: end 94: end 95: invalid_names += [ name ] unless found 96: end 97: 98: invalid_names 99: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 69 69: def invalid_names( repo_list, package_list ) 70: @log.debug "Querying package database..." 71: 72: unless @appliance_config.is64bit? 73: arches = "i386,i486,i586,i686" 74: else 75: arches = "x86_64" 76: end 77: 78: repoquery_output = @exec_helper.execute( "repoquery --quiet --disablerepo=* --enablerepo=#{repo_list} -c '#{@yum_config_file}' list available #{package_list.join( ' ' )} --nevra --archlist=#{arches},noarch" ) 79: 80: invalid_names = [] 81: 82: for name in package_list 83: found = false 84: 85: repoquery_output.each do |line| 86: line = line.strip 87: 88: package = line.match( /^([\S]+)-\d+:/ ) 89: package = package.nil? ? line : package[1] 90: 91: if package.size > 0 and name.match( /^#{package.gsub(/[\+]/, '\\+')}/ ) 92: found = true 93: end 94: end 95: invalid_names += [ name ] unless found 96: end 97: 98: invalid_names 99: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 119 119: def read_repos_from_kickstart_file 120: repos = `grep -e "^repo" '#{@kickstart_file}'` 121: repo_list = [] 122: 123: repos.each do |repo_line| 124: name = repo_line.match( /--name=([\w\-]+)/ )[1] 125: baseurl = repo_line.match( /--baseurl=([\w\-\:\/\.&\?=]+)/ ) 126: mirrorlist = repo_line.match( /--mirrorlist=([\w\-\:\/\.&\?=]+)/ ) 127: 128: baseurl = baseurl[1] unless baseurl.nil? 129: mirrorlist = mirrorlist[1] unless mirrorlist.nil? 130: 131: repo_list.push( Repo.new( name, baseurl, mirrorlist ) ) 132: end 133: 134: repo_list 135: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 119 119: def read_repos_from_kickstart_file 120: repos = `grep -e "^repo" '#{@kickstart_file}'` 121: repo_list = [] 122: 123: repos.each do |repo_line| 124: name = repo_line.match( /--name=([\w\-]+)/ )[1] 125: baseurl = repo_line.match( /--baseurl=([\w\-\:\/\.&\?=]+)/ ) 126: mirrorlist = repo_line.match( /--mirrorlist=([\w\-\:\/\.&\?=]+)/ ) 127: 128: baseurl = baseurl[1] unless baseurl.nil? 129: mirrorlist = mirrorlist[1] unless mirrorlist.nil? 130: 131: repo_list.push( Repo.new( name, baseurl, mirrorlist ) ) 132: end 133: 134: repo_list 135: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 51 51: def resolve_packages 52: @log.info "Resolving packages added to #{@appliance_config.name} appliance definition file..." 53: 54: repos = read_repos_from_kickstart_file 55: package_list = generate_package_list 56: repo_list = generate_repo_list( repos ) 57: 58: generate_yum_config( repos ) 59: 60: invalid_names = invalid_names( repo_list, package_list ) 61: 62: if invalid_names.size == 0 63: @log.info "All additional packages for #{@appliance_config.name} appliance successfully resolved." 64: else 65: raise "Package#{invalid_names.size > 1 ? "s" : ""} #{invalid_names.join(', ')} for #{@appliance_config.name} appliance not found in repositories. Please check package names in appliance definition file." 66: end 67: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 51 51: def resolve_packages 52: @log.info "Resolving packages added to #{@appliance_config.name} appliance definition file..." 53: 54: repos = read_repos_from_kickstart_file 55: package_list = generate_package_list 56: repo_list = generate_repo_list( repos ) 57: 58: generate_yum_config( repos ) 59: 60: invalid_names = invalid_names( repo_list, package_list ) 61: 62: if invalid_names.size == 0 63: @log.info "All additional packages for #{@appliance_config.name} appliance successfully resolved." 64: else 65: raise "Package#{invalid_names.size > 1 ? "s" : ""} #{invalid_names.join(', ')} for #{@appliance_config.name} appliance not found in repositories. Please check package names in appliance definition file." 66: end 67: end