veewee 0.3.0.alpha6 → 0.3.0.alpha7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/veewee/command/kvm.rb +1 -1
- data/lib/veewee/command/vagrant/basebox.rb +2 -0
- data/lib/veewee/command/vagrant/build.rb +1 -1
- data/lib/veewee/command/vagrant/define.rb +1 -1
- data/lib/veewee/command/vagrant/destroy.rb +1 -1
- data/lib/veewee/command/vagrant/export.rb +1 -1
- data/lib/veewee/command/vagrant/halt.rb +1 -1
- data/lib/veewee/command/vagrant/list.rb +2 -2
- data/lib/veewee/command/vagrant/ostypes.rb +2 -2
- data/lib/veewee/command/vagrant/ssh.rb +1 -2
- data/lib/veewee/command/vagrant/templates.rb +3 -3
- data/lib/veewee/command/vagrant/undefine.rb +2 -2
- data/lib/veewee/command/vagrant/up.rb +1 -1
- data/lib/veewee/command/vagrant/validate.rb +44 -0
- data/lib/veewee/command/virtualbox.rb +3 -3
- data/lib/veewee/config/definition.rb +4 -4
- data/lib/veewee/definition.rb +8 -0
- data/lib/veewee/provider/core/box.rb +7 -0
- data/lib/veewee/provider/core/box/build.rb +12 -12
- data/lib/veewee/provider/core/box/exec.rb +2 -2
- data/lib/veewee/provider/core/box/scp.rb +2 -2
- data/lib/veewee/provider/core/box/ssh.rb +1 -1
- data/lib/veewee/provider/core/box/vnc.rb +3 -3
- data/lib/veewee/provider/core/helper/iso.rb +30 -30
- data/lib/veewee/provider/core/helper/scancode.rb +1 -1
- data/lib/veewee/provider/core/helper/shell.rb +6 -6
- data/lib/veewee/provider/core/helper/ssh.rb +15 -17
- data/lib/veewee/provider/core/helper/tcp.rb +4 -4
- data/lib/veewee/provider/core/helper/web.rb +6 -6
- data/lib/veewee/provider/core/provider.rb +20 -13
- data/lib/veewee/provider/core/provider/tunnel.rb +8 -8
- data/lib/veewee/provider/kvm/box/helper/console_type.rb +1 -1
- data/lib/veewee/provider/kvm/box/validate_kvm.rb +2 -2
- data/lib/veewee/provider/parallels/box/create.rb +1 -1
- data/lib/veewee/provider/parallels/box/destroy.rb +1 -1
- data/lib/veewee/provider/parallels/box/helper/buildinfo.rb +1 -1
- data/lib/veewee/provider/parallels/box/helper/console_type.rb +5 -5
- data/lib/veewee/provider/parallels/box/validate_parallels.rb +2 -2
- data/lib/veewee/provider/virtualbox/box/destroy.rb +7 -7
- data/lib/veewee/provider/virtualbox/box/export_vagrant.rb +18 -18
- data/lib/veewee/provider/virtualbox/box/helper/console_type.rb +8 -8
- data/lib/veewee/provider/virtualbox/box/helper/create.rb +8 -8
- data/lib/veewee/provider/virtualbox/box/helper/guest_additions.rb +1 -1
- data/lib/veewee/provider/virtualbox/box/poweroff.rb +1 -1
- data/lib/veewee/provider/virtualbox/box/up.rb +2 -2
- data/lib/veewee/provider/virtualbox/box/validate_vagrant.rb +3 -3
- data/lib/veewee/providers.rb +1 -1
- data/lib/veewee/ui.rb +2 -0
- data/lib/veewee/version.rb +1 -1
- data/templates/CentOS-5.7-i386-netboot/definition.rb +1 -1
- data/templates/CentOS-5.7-i386-netboot/ks.cfg +1 -1
- data/templates/Debian-6.0.3-amd64-netboot/definition.rb +1 -1
- data/templates/Debian-6.0.3-i386-netboot/definition.rb +1 -1
- metadata +3 -2
data/lib/veewee/command/kvm.rb
CHANGED
@@ -10,6 +10,7 @@ require 'veewee/command/vagrant/halt'
|
|
10
10
|
require 'veewee/command/vagrant/ssh'
|
11
11
|
require 'veewee/command/vagrant/define'
|
12
12
|
require 'veewee/command/vagrant/undefine'
|
13
|
+
require 'veewee/command/vagrant/validate'
|
13
14
|
require 'veewee/command/vagrant/export'
|
14
15
|
|
15
16
|
|
@@ -34,6 +35,7 @@ module Veewee
|
|
34
35
|
@subcommands.register(:define) { Veewee::Command::Vagrant::Define }
|
35
36
|
@subcommands.register(:undefine) { Veewee::Command::Vagrant::Undefine }
|
36
37
|
@subcommands.register(:export) { Veewee::Command::Vagrant::Export }
|
38
|
+
@subcommands.register(:validate) { Veewee::Command::Vagrant::Validate }
|
37
39
|
|
38
40
|
end
|
39
41
|
|
@@ -37,7 +37,7 @@ module Veewee
|
|
37
37
|
venv.ui.info "You can now edit the definition files stored in definitions/#{definition_name} or build the box with:"
|
38
38
|
venv.ui.info "vagrant basebox build '#{definition_name}'"
|
39
39
|
rescue Veewee::Error => ex
|
40
|
-
venv.ui.error
|
40
|
+
venv.ui.error(ex,:prefix => false)
|
41
41
|
exit -1
|
42
42
|
end
|
43
43
|
|
@@ -25,10 +25,10 @@ module Veewee
|
|
25
25
|
venv=Veewee::Environment.new(options)
|
26
26
|
venv.ui = @env.ui
|
27
27
|
venv.definitions.each do |name,definition|
|
28
|
-
venv.ui.info
|
28
|
+
venv.ui.info("- #{name}", :prefix => false)
|
29
29
|
end
|
30
30
|
rescue Veewee::Error => ex
|
31
|
-
venv.ui.error
|
31
|
+
venv.ui.error(ex,:prefix => false)
|
32
32
|
exit -1
|
33
33
|
end
|
34
34
|
end
|
@@ -25,10 +25,10 @@ module Veewee
|
|
25
25
|
venv=Veewee::Environment.new(options)
|
26
26
|
venv.ui = @env.ui
|
27
27
|
venv.ostypes.each do |name|
|
28
|
-
venv.ui.info
|
28
|
+
venv.ui.info("- #{name}", :prefix => false)
|
29
29
|
end
|
30
30
|
rescue Veewee::Error => ex
|
31
|
-
venv.ui.error
|
31
|
+
venv.ui.error(ex,:prefix => false)
|
32
32
|
exit -1
|
33
33
|
end
|
34
34
|
end
|
@@ -21,14 +21,13 @@ module Veewee
|
|
21
21
|
# Parse the options
|
22
22
|
argv = parse_options(opts)
|
23
23
|
return if !argv
|
24
|
-
raise ::Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 2
|
25
24
|
|
26
25
|
begin
|
27
26
|
venv=Veewee::Environment.new(options)
|
28
27
|
venv.ui=@env.ui
|
29
28
|
venv.providers["virtualbox"].get_box(argv[0]).issh(arg[1])
|
30
29
|
rescue Veewee::Error => ex
|
31
|
-
venv.ui.error
|
30
|
+
venv.ui.error(ex,:prefix => false)
|
32
31
|
exit -1
|
33
32
|
end
|
34
33
|
|
@@ -24,12 +24,12 @@ module Veewee
|
|
24
24
|
begin
|
25
25
|
venv=Veewee::Environment.new(options)
|
26
26
|
venv.ui = @env.ui
|
27
|
-
venv.ui.info
|
27
|
+
venv.ui.info("The following templates are available:",:prefix => false)
|
28
28
|
venv.templates.each do |name,template|
|
29
|
-
venv.ui.info
|
29
|
+
venv.ui.info("vagrant basebox define '<boxname>' '#{name}'",:prefix => false)
|
30
30
|
end
|
31
31
|
rescue Veewee::Error => ex
|
32
|
-
venv.ui.error
|
32
|
+
venv.ui.error(ex,:prefix => false)
|
33
33
|
exit -1
|
34
34
|
end
|
35
35
|
end
|
@@ -28,9 +28,9 @@ module Veewee
|
|
28
28
|
venv.ui=@env.ui
|
29
29
|
definition_name=argv[0]
|
30
30
|
venv.definitions.undefine(definition_name,options)
|
31
|
-
venv.ui.info
|
31
|
+
venv.ui.info("Definition '#{definition_name}' succesfully removed",:prefix => false)
|
32
32
|
rescue Veewee::Error => ex
|
33
|
-
venv.ui.error
|
33
|
+
venv.ui.error(ex,:prefix => false)
|
34
34
|
exit -1
|
35
35
|
end
|
36
36
|
|
@@ -31,7 +31,7 @@ module Veewee
|
|
31
31
|
begin
|
32
32
|
venv=Veewee::Environment.new(options)
|
33
33
|
venv.ui=@env.ui
|
34
|
-
venv.providers["virtualbox"].get_box(argv[0]).
|
34
|
+
venv.providers["virtualbox"].get_box(argv[0]).up(options)
|
35
35
|
rescue Veewee::Error => ex
|
36
36
|
venv.ui.error ex
|
37
37
|
exit -1
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
|
3
|
+
module Veewee
|
4
|
+
module Command
|
5
|
+
module Vagrant
|
6
|
+
class Validate < ::Vagrant::Command::Base
|
7
|
+
def execute
|
8
|
+
options = {}
|
9
|
+
|
10
|
+
opts = OptionParser.new do |opts|
|
11
|
+
opts.banner = "Validates a box against vagrant compliancy rules"
|
12
|
+
opts.separator ""
|
13
|
+
opts.separator "Usage: vagrant basebox validate <boxname>"
|
14
|
+
|
15
|
+
opts.on("-d", "--debug", "enable debugging") do |d|
|
16
|
+
options['debug'] = d
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on("-f", "--force", "force overwrite") do |f|
|
20
|
+
options['force'] = f
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
# Parse the options
|
26
|
+
argv = parse_options(opts)
|
27
|
+
return if !argv
|
28
|
+
raise ::Vagrant::Errors::CLIInvalidUsage, :help => opts.help.chomp if argv.length < 1
|
29
|
+
|
30
|
+
begin
|
31
|
+
venv=Veewee::Environment.new(options)
|
32
|
+
venv.ui=@env.ui
|
33
|
+
box_name=argv[0]
|
34
|
+
venv.providers["virtualbox"].get_box(box_name).validate_vagrant(options)
|
35
|
+
rescue Veewee::Error => ex
|
36
|
+
venv.ui.error(ex,:prefix => false)
|
37
|
+
exit -1
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -75,7 +75,7 @@ module Veewee
|
|
75
75
|
venv.definitions.undefine(definition_name,options)
|
76
76
|
env.ui.info "Definition #{definition_name} succesfully removed" , :prefix => false
|
77
77
|
rescue Error => ex
|
78
|
-
env.ui.error
|
78
|
+
env.ui.error("#{ex}",:prefix => false)
|
79
79
|
exit -1
|
80
80
|
end
|
81
81
|
end
|
@@ -108,7 +108,7 @@ module Veewee
|
|
108
108
|
venv=Veewee::Environment.new(options)
|
109
109
|
venv.ui=env.ui
|
110
110
|
venv.definitions.each do |name,definition|
|
111
|
-
env.ui.info "- #{name}"
|
111
|
+
env.ui.info "- #{name}",:prefix => false
|
112
112
|
end
|
113
113
|
end
|
114
114
|
|
@@ -121,7 +121,7 @@ module Veewee
|
|
121
121
|
|
122
122
|
venv.providers["virtualbox"].get_box(box_name).validate_vagrant(options)
|
123
123
|
rescue Veewee::Error => ex
|
124
|
-
venv.ui.error
|
124
|
+
venv.ui.error(ex, :prefix => false)
|
125
125
|
exit -1
|
126
126
|
end
|
127
127
|
end
|
@@ -14,20 +14,20 @@ module Veewee
|
|
14
14
|
@env=config.env
|
15
15
|
@components=Hash.new
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
# Currently not used, this is in case we will specify the a definition in the Veeweefile
|
19
19
|
# This is for future needs
|
20
20
|
def define(name)
|
21
21
|
# Depending on type, we create a variable of that type
|
22
22
|
definition_stub=OpenStruct.new
|
23
23
|
|
24
|
-
begin
|
24
|
+
begin
|
25
25
|
# Get a real definition object
|
26
26
|
real_definition=::Veewee::Definition.new(name,env)
|
27
27
|
rescue Error => e
|
28
|
-
env.ui.error
|
28
|
+
env.ui.error("Error loading provider with #{name},#{$!}",:prefix => false)
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
definition_stub.definition=real_definition
|
32
32
|
|
33
33
|
env.logger.debug("config definition"){ "Start defining definition"}
|
data/lib/veewee/definition.rb
CHANGED
@@ -7,9 +7,9 @@ module Veewee
|
|
7
7
|
|
8
8
|
# Requires valid definition
|
9
9
|
|
10
|
-
|
10
|
+
ui.info "Building Box #{name} with Definition #{definition.name}:"
|
11
11
|
options.each do |name,value|
|
12
|
-
|
12
|
+
ui.info "- #{name} : #{value}"
|
13
13
|
end
|
14
14
|
|
15
15
|
# Checking regexp of postinstall include/excludes
|
@@ -24,14 +24,14 @@ module Veewee
|
|
24
24
|
self.destroy
|
25
25
|
self.reload
|
26
26
|
else
|
27
|
-
|
27
|
+
ui.error("you need to provide --force because the box #{name} already exists",:prefix => false)
|
28
28
|
raise Veewee::Error,"you need to provide --force because the box #{name} already exists"
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
# By now the box should have been gone, just checking again
|
33
33
|
if self.exists?
|
34
|
-
|
34
|
+
ui.error("The box should have been deleted by now. Something went terribly wrong. Sorry",:prefix => false)
|
35
35
|
raise Veewee::Error, "The box should have been deleted by now. Something went terribly wrong. Sorry"
|
36
36
|
end
|
37
37
|
|
@@ -42,14 +42,14 @@ module Veewee
|
|
42
42
|
self.up(options)
|
43
43
|
|
44
44
|
# Waiting for it to boot
|
45
|
-
|
45
|
+
ui.info "Waiting #{definition.boot_wait.to_i} seconds for the machine to boot"
|
46
46
|
sleep definition.boot_wait.to_i
|
47
47
|
|
48
48
|
# Calculate an available kickstart port
|
49
49
|
unless definition.kickstart_port.nil?
|
50
50
|
guessed_port=guess_free_port(definition.kickstart_port.to_i,7199).to_s
|
51
51
|
if guessed_port.to_s!=definition.kickstart_port
|
52
|
-
|
52
|
+
ui.warn "Changing kickstart port from #{definition.kickstart_port} to #{guessed_port}"
|
53
53
|
definition.kickstart_port=guessed_port.to_s
|
54
54
|
end
|
55
55
|
end
|
@@ -78,9 +78,9 @@ module Veewee
|
|
78
78
|
self.handle_postinstall(options)
|
79
79
|
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
ui.success "The box #{name} was built succesfully!"
|
82
|
+
ui.info "You can now login to the box with:"
|
83
|
+
ui.info ssh_command_string
|
84
84
|
|
85
85
|
return self
|
86
86
|
end
|
@@ -164,10 +164,10 @@ module Veewee
|
|
164
164
|
kickstartfiles=definition.kickstart_file
|
165
165
|
|
166
166
|
if kickstartfiles.nil? || kickstartfiles.length == 0
|
167
|
-
|
167
|
+
ui.info "Skipping webserver as no kickstartfile was specified"
|
168
168
|
end
|
169
169
|
|
170
|
-
|
170
|
+
ui.info "Starting a webserver #{definition.kickstart_ip}:#{definition.kickstart_port}\n"
|
171
171
|
|
172
172
|
# Check if the kickstart is an array or a single string
|
173
173
|
if kickstartfiles.is_a?(String)
|
@@ -239,7 +239,7 @@ module Veewee
|
|
239
239
|
self.scp(infofile.path,info[:filename])
|
240
240
|
infofile.delete
|
241
241
|
rescue RuntimeError => ex
|
242
|
-
|
242
|
+
ui.error("Error transfering file #{info[:filename]} failed, possible not enough permissions to write? #{ex}",:prefix => false)
|
243
243
|
raise Veewee::Error,"Error transfering file #{info[:filename]} failed, possible not enough permissions to write? #{ex}"
|
244
244
|
end
|
245
245
|
end
|
@@ -18,12 +18,12 @@ module Veewee
|
|
18
18
|
result=self.ssh_execute(self.ip_address,command,new_options)
|
19
19
|
return result
|
20
20
|
rescue RuntimeError => ex
|
21
|
-
|
21
|
+
ui.error("Error executing command #{command} : #{ex}",:prefix => false)
|
22
22
|
raise Veewee::SshError, ex
|
23
23
|
end
|
24
24
|
end
|
25
25
|
rescue Net::SSH::AuthenticationFailed => ex
|
26
|
-
|
26
|
+
ui.error("Authentication failure",:prefix => false)
|
27
27
|
raise Veewee::SshError, ex
|
28
28
|
end
|
29
29
|
|
@@ -13,12 +13,12 @@ module Veewee
|
|
13
13
|
env.logger.info "About to transfer #{localfile} to #{remotefile} to the box #{name} - #{self.ip_address} - #{new_options}"
|
14
14
|
self.ssh_transfer_file(self.ip_address,localfile,remotefile,new_options)
|
15
15
|
rescue RuntimeError => ex
|
16
|
-
|
16
|
+
ui.error("Error transfering file #{localfile} failed, possible not enough permissions to write? #{ex}",:prefix => false)
|
17
17
|
raise Veewee::SshError,ex
|
18
18
|
end
|
19
19
|
end
|
20
20
|
rescue Net::SSH::AuthenticationFailed => ex
|
21
|
-
|
21
|
+
ui.error("Authentication failure",:prefix => false)
|
22
22
|
raise Veewee::SshError,ex
|
23
23
|
end
|
24
24
|
|
@@ -20,7 +20,7 @@ module Veewee
|
|
20
20
|
fg_exec(ssh_command,options)
|
21
21
|
|
22
22
|
else
|
23
|
-
|
23
|
+
ui.error("Can't ssh into '#{@name} as we couldn't figure out it's ip-address",:prefix => false)
|
24
24
|
end
|
25
25
|
else
|
26
26
|
ssh_options={:user => definition.ssh_user,:password => definition.ssh_password, :port => definition.ssh_host_port}
|
@@ -16,7 +16,7 @@ module Veewee
|
|
16
16
|
sequence.each { |s|
|
17
17
|
counter=counter+1
|
18
18
|
|
19
|
-
|
19
|
+
ui.info "Typing:[#{counter}]: "+s
|
20
20
|
|
21
21
|
keycodes=string_to_vnccode(s)
|
22
22
|
|
@@ -29,8 +29,8 @@ module Veewee
|
|
29
29
|
end
|
30
30
|
}
|
31
31
|
vnc.close
|
32
|
-
|
33
|
-
|
32
|
+
ui.info "Done typing."
|
33
|
+
ui.info ""
|
34
34
|
|
35
35
|
end
|
36
36
|
|
@@ -11,15 +11,15 @@ module Veewee
|
|
11
11
|
|
12
12
|
def download_iso(url,filename)
|
13
13
|
if !File.exists?(env.config.veewee.iso_dir)
|
14
|
-
|
14
|
+
ui.info "Creating an iso directory"
|
15
15
|
FileUtils.mkdir(env.config.veewee.iso_dir)
|
16
16
|
end
|
17
|
-
|
17
|
+
ui.info "Checking if isofile #{filename} already exists."
|
18
18
|
full_path=File.join(env.config.veewee.iso_dir,filename)
|
19
|
-
|
19
|
+
ui.info "Full path: #{full_path}"
|
20
20
|
if File.exists?(full_path)
|
21
|
-
|
22
|
-
|
21
|
+
ui.info ""
|
22
|
+
ui.info "The isofile #{filename} already exists."
|
23
23
|
else
|
24
24
|
download_progress(url,full_path)
|
25
25
|
end
|
@@ -39,7 +39,7 @@ module Veewee
|
|
39
39
|
}) { |src|
|
40
40
|
# We assume large 10K files, so this is tempfile object
|
41
41
|
env.logger.info "#{src.class}"
|
42
|
-
|
42
|
+
ui.info "Moving #{src.path} to #{localfile}"
|
43
43
|
# Force the close of the src stream to release handle before moving
|
44
44
|
# Not forcing the close may cause an issue on windows (Permission Denied)
|
45
45
|
src.close
|
@@ -58,7 +58,7 @@ module Veewee
|
|
58
58
|
counter = 0
|
59
59
|
while (!io.eof)
|
60
60
|
readBuf = io.readpartial(buflen)
|
61
|
-
env.ui.info('.',{:new_line => false}) if ((counter+=1) % 20000 == 0)
|
61
|
+
env.ui.info('.',{:new_line => false,:prefix => false }) if ((counter+=1) % 20000 == 0)
|
62
62
|
checksum.update(readBuf)
|
63
63
|
end
|
64
64
|
end
|
@@ -71,51 +71,51 @@ module Veewee
|
|
71
71
|
full_path=File.join(env.config.veewee.iso_dir,filename)
|
72
72
|
|
73
73
|
if File.exists?(full_path)
|
74
|
-
|
75
|
-
|
74
|
+
ui.info ""
|
75
|
+
ui.info "The isofile #{filename} already exists."
|
76
76
|
else
|
77
77
|
|
78
78
|
path1=Pathname.new(full_path)
|
79
79
|
path2=Pathname.new(Dir.pwd)
|
80
80
|
rel_path=path1.relative_path_from(path2).to_s
|
81
81
|
|
82
|
-
|
83
|
-
|
82
|
+
ui.info ""
|
83
|
+
ui.info "We did not find an isofile in <currentdir>/iso. \n\nThe definition provided the following download information:"
|
84
84
|
unless "#{self.iso_src}"==""
|
85
|
-
|
85
|
+
ui.info "- Download url: #{self.iso_src}"
|
86
86
|
end
|
87
|
-
|
88
|
-
|
89
|
-
|
87
|
+
ui.info "- Md5 Checksum: #{self.iso_md5}"
|
88
|
+
ui.info "#{self.iso_download_instructions}"
|
89
|
+
ui.info ""
|
90
90
|
|
91
91
|
if self.iso_src == ""
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
92
|
+
ui.info "Please follow the instructions above:"
|
93
|
+
ui.info "- to get the ISO"
|
94
|
+
ui.info" - put it in <currentdir>/iso"
|
95
|
+
ui.info "- then re-run the command"
|
96
|
+
ui.info ""
|
97
97
|
raise Veewee::Error, "No ISO src is available, can't download it automatically"
|
98
98
|
else
|
99
99
|
answer=nil
|
100
100
|
answer="yes" if options["auto"]==true
|
101
101
|
env.logger.info "Auto download enabled?#{answer} #{!options['auto'].nil?}"
|
102
102
|
if answer.nil?
|
103
|
-
answer=
|
103
|
+
answer=ui.ask("Download? (Yes/No)") {|q| q.default="No"}
|
104
104
|
end
|
105
105
|
|
106
106
|
if answer.downcase == "yes"
|
107
107
|
begin
|
108
108
|
download_iso(self.iso_src,filename)
|
109
109
|
rescue OpenURI::HTTPError => ex
|
110
|
-
|
111
|
-
|
110
|
+
ui.error "There was an error downloading #{self.iso_src}:"
|
111
|
+
ui.error "#{ex}"
|
112
112
|
raise Veewee::Error, "There was an error downloading #{self.iso_src}:\n#{ex}"
|
113
113
|
end
|
114
114
|
else
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
115
|
+
ui.info "You have selected manual download: "
|
116
|
+
ui.info "curl -C - -L '#{self.iso_src}' -o '#{rel_path}'"
|
117
|
+
ui.info "md5 '#{rel_path}' "
|
118
|
+
ui.info ""
|
119
119
|
exit
|
120
120
|
end
|
121
121
|
|
@@ -123,12 +123,12 @@ module Veewee
|
|
123
123
|
raise Veewee::Error, "The provided iso #{full_path} is not readable"
|
124
124
|
end
|
125
125
|
|
126
|
-
|
126
|
+
ui.info "Verifying md5 checksum : #{self.iso_md5}"
|
127
127
|
file_md5=hashsum(full_path)
|
128
128
|
|
129
129
|
unless file_md5==self.iso_md5
|
130
|
-
|
131
|
-
|
130
|
+
ui.error "The MD5 checksums for file #{filename } do not match: "
|
131
|
+
ui.error "- #{file_md5} (current) vs #{self.iso_md5} (specified)"
|
132
132
|
raise Veewee::Error, "The MD5 checksums for file #{filename } do not match: \n"+ "- #{file_md5} (current) vs #{self.iso_md5} (specified)"
|
133
133
|
end
|
134
134
|
|