| 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