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 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

[Source]

    # 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

Public Instance methods

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

     # 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

[Source]

    # 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

[Source]

    # 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

[Source]

     # 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

[Source]

     # 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

[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:       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

[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:       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

[Validate]