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 36 36: def initialize( config, appliance_config, dir, options = {} ) 37: @config = config 38: @appliance_config = appliance_config 39: @dir = dir 40: 41: @log = options[:log] || LogHelper.new 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 36 36: def initialize( config, appliance_config, dir, options = {} ) 37: @config = config 38: @appliance_config = appliance_config 39: @dir = dir 40: 41: @log = options[:log] || LogHelper.new 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 99 99: def generate_package_list 100: packages = [] 101: for package in @appliance_config.packages 102: packages << package unless package.match /^@/ or package.match /^-/ 103: end 104: packages 105: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 99 99: def generate_package_list 100: packages = [] 101: for package in @appliance_config.packages 102: packages << package unless package.match /^@/ or package.match /^-/ 103: end 104: packages 105: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 107 107: def generate_yum_config 108: File.open( @yum_config_file, "w") do |f| 109: 110: f.puts( "[main]\r\ncachedir=#{Dir.pwd}/#{@dir.tmp}/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" ) 111: 112: for repo in @appliance_config.repos 113: f.puts( "[#{@magic_hash}#{repo['name']}]" ) 114: f.puts( "name=#{repo['name']}" ) 115: f.puts( "baseurl=#{repo['baseurl']}" ) unless repo['baseurl'].nil? 116: f.puts( "mirrorlist=#{repo['mirrorlist']}" ) unless repo['mirrorlist'].nil? 117: f.puts( "enabled=1" ) 118: f.puts 119: end 120: end 121: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 107 107: def generate_yum_config 108: File.open( @yum_config_file, "w") do |f| 109: 110: f.puts( "[main]\r\ncachedir=#{Dir.pwd}/#{@dir.tmp}/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" ) 111: 112: for repo in @appliance_config.repos 113: f.puts( "[#{@magic_hash}#{repo['name']}]" ) 114: f.puts( "name=#{repo['name']}" ) 115: f.puts( "baseurl=#{repo['baseurl']}" ) unless repo['baseurl'].nil? 116: f.puts( "mirrorlist=#{repo['mirrorlist']}" ) unless repo['mirrorlist'].nil? 117: f.puts( "enabled=1" ) 118: f.puts 119: end 120: end 121: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 66 66: def invalid_names( repo_list, package_list ) 67: @log.debug "Querying package database..." 68: 69: unless @appliance_config.is64bit? 70: arches = "i386,i486,i586,i686" 71: else 72: arches = "x86_64" 73: end 74: 75: root = (@config.dir.root.end_with?('/') ? '' : @config.dir.root) 76: repoquery_output = @exec_helper.execute( "repoquery --quiet --disablerepo=* --enablerepo=#{@appliance_config.repos.collect {|r| "#{@magic_hash}#{r['name']}"}.join(",")} -c '#{root}/#{@yum_config_file}' list available #{package_list.join( ' ' )} --nevra --archlist=#{arches},noarch" ) 77: 78: invalid_names = [] 79: 80: for name in package_list 81: found = false 82: 83: repoquery_output.each_line do |line| 84: line = line.strip 85: 86: package = line.match( /^([\S]+)-\d+:/ ) 87: package = package.nil? ? line : package[1] 88: 89: if package.size > 0 and name.match( /^#{package.gsub(/[\+]/, '\\+')}/ ) 90: found = true 91: end 92: end 93: invalid_names += [ name ] unless found 94: end 95: 96: invalid_names 97: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 66 66: def invalid_names( repo_list, package_list ) 67: @log.debug "Querying package database..." 68: 69: unless @appliance_config.is64bit? 70: arches = "i386,i486,i586,i686" 71: else 72: arches = "x86_64" 73: end 74: 75: root = (@config.dir.root.end_with?('/') ? '' : @config.dir.root) 76: repoquery_output = @exec_helper.execute( "repoquery --quiet --disablerepo=* --enablerepo=#{@appliance_config.repos.collect {|r| "#{@magic_hash}#{r['name']}"}.join(",")} -c '#{root}/#{@yum_config_file}' list available #{package_list.join( ' ' )} --nevra --archlist=#{arches},noarch" ) 77: 78: invalid_names = [] 79: 80: for name in package_list 81: found = false 82: 83: repoquery_output.each_line do |line| 84: line = line.strip 85: 86: package = line.match( /^([\S]+)-\d+:/ ) 87: package = package.nil? ? line : package[1] 88: 89: if package.size > 0 and name.match( /^#{package.gsub(/[\+]/, '\\+')}/ ) 90: found = true 91: end 92: end 93: invalid_names += [ name ] unless found 94: end 95: 96: invalid_names 97: 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: package_list = generate_package_list 55: generate_yum_config 56: 57: invalid = invalid_names( @appliance_config.repos, package_list ) 58: 59: if invalid.empty? 60: @log.info "All additional packages for #{@appliance_config.name} appliance successfully resolved." 61: else 62: raise "Package#{invalid.size > 1 ? "s" : ""} #{invalid.join(', ')} for #{@appliance_config.name} appliance not found in repositories. Please check package names in appliance definition file." 63: end 64: 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: package_list = generate_package_list 55: generate_yum_config 56: 57: invalid = invalid_names( @appliance_config.repos, package_list ) 58: 59: if invalid.empty? 60: @log.info "All additional packages for #{@appliance_config.name} appliance successfully resolved." 61: else 62: raise "Package#{invalid.size > 1 ? "s" : ""} #{invalid.join(', ')} for #{@appliance_config.name} appliance not found in repositories. Please check package names in appliance definition file." 63: end 64: end