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

Methods

Public Class methods

[Source]

    # 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

[Source]

    # 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

Public Instance methods

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Source]

    # 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

[Validate]