| 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 97
97: def generate_package_list
98: packages = []
99: for package in @appliance_config.packages
100: packages << package unless package.match /^@/ or package.match /^-/
101: end
102: packages
103: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 97
97: def generate_package_list
98: packages = []
99: for package in @appliance_config.packages
100: packages << package unless package.match /^@/ or package.match /^-/
101: end
102: packages
103: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 105
105: def generate_yum_config
106: File.open( @yum_config_file, "w") do |f|
107:
108: f.puts( "[main]\r\ncachedir=#{Dir.pwd}/#{@dir.tmp}/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" )
109:
110: for repo in @appliance_config.repos
111: f.puts( "[#{@magic_hash}#{repo['name']}]" )
112: f.puts( "name=#{repo['name']}" )
113: f.puts( "baseurl=#{repo['baseurl']}" ) unless repo['baseurl'].nil?
114: f.puts( "mirrorlist=#{repo['mirrorlist']}" ) unless repo['mirrorlist'].nil?
115: f.puts( "enabled=1" )
116: f.puts
117: end
118: end
119: end
# File lib/boxgrinder-build/plugins/os/rpm-based/rpm-dependency-validator.rb, line 105
105: def generate_yum_config
106: File.open( @yum_config_file, "w") do |f|
107:
108: f.puts( "[main]\r\ncachedir=#{Dir.pwd}/#{@dir.tmp}/#{@magic_hash}#{@appliance_config.hardware.arch}-yum-cache/\r\n\r\n" )
109:
110: for repo in @appliance_config.repos
111: f.puts( "[#{@magic_hash}#{repo['name']}]" )
112: f.puts( "name=#{repo['name']}" )
113: f.puts( "baseurl=#{repo['baseurl']}" ) unless repo['baseurl'].nil?
114: f.puts( "mirrorlist=#{repo['mirrorlist']}" ) unless repo['mirrorlist'].nil?
115: f.puts( "enabled=1" )
116: f.puts
117: end
118: end
119: 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: package_list.inject([]) do |invalid_names, name|
79: found = repoquery_output.each_line.reduce(false) do |_, line|
80: line.strip!
81:
82: package = line.match( /^([\S]+)-\d+:/ )
83: package = package ? package[1] : line
84: package_regex = Regexp.new('^' << Regexp.quote(package))
85:
86: if package.size > 0 && name =~ package_regex
87: break package
88: end
89: false
90: end
91:
92: found || invalid_names << name
93: invalid_names
94: end
95: 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: package_list.inject([]) do |invalid_names, name|
79: found = repoquery_output.each_line.reduce(false) do |_, line|
80: line.strip!
81:
82: package = line.match( /^([\S]+)-\d+:/ )
83: package = package ? package[1] : line
84: package_regex = Regexp.new('^' << Regexp.quote(package))
85:
86: if package.size > 0 && name =~ package_regex
87: break package
88: end
89: false
90: end
91:
92: found || invalid_names << name
93: invalid_names
94: end
95: 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