HeSYINUvSBZfxqA-veewee 0.2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +15 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +69 -0
- data/HeSYINUvSBZfxqA-veewee.gemspec +33 -0
- data/README.md +198 -0
- data/Rakefile +92 -0
- data/bin/veewee +79 -0
- data/lib/java/README.txt +5 -0
- data/lib/java/dir2floppy.jar +0 -0
- data/lib/java/dir2floppy.java +137 -0
- data/lib/vagrant_init.rb +6 -0
- data/lib/veewee/command.rb +82 -0
- data/lib/veewee/config.rb +5 -0
- data/lib/veewee/export.rb +81 -0
- data/lib/veewee/scancode.rb +151 -0
- data/lib/veewee/session.rb +783 -0
- data/lib/veewee/shell.rb +54 -0
- data/lib/veewee/ssh.rb +193 -0
- data/lib/veewee/transaction.rb +122 -0
- data/lib/veewee/utils.rb +26 -0
- data/lib/veewee/version.rb +3 -0
- data/lib/veewee/web.rb +48 -0
- data/lib/veewee.rb +2 -0
- data/templates/CentOS-4.8-i386/definition.rb +14 -0
- data/templates/CentOS-4.8-i386/ks.cfg +45 -0
- data/templates/CentOS-4.8-i386/postinstall.sh +55 -0
- data/templates/CentOS-5.6-i386/definition.rb +17 -0
- data/templates/CentOS-5.6-i386/ks.cfg +45 -0
- data/templates/CentOS-5.6-i386/postinstall.sh +50 -0
- data/templates/CentOS-5.6-i386-netboot/definition.rb +16 -0
- data/templates/CentOS-5.6-i386-netboot/ks.cfg +45 -0
- data/templates/CentOS-5.6-i386-netboot/postinstall.sh +52 -0
- data/templates/CentOS-5.6-x86_64-netboot/definition.rb +16 -0
- data/templates/CentOS-5.6-x86_64-netboot/ks.cfg +45 -0
- data/templates/CentOS-5.6-x86_64-netboot/postinstall.sh +60 -0
- data/templates/CentOS-6.0-i386/definition.rb +17 -0
- data/templates/CentOS-6.0-i386/ks.cfg +47 -0
- data/templates/CentOS-6.0-i386/postinstall.sh +48 -0
- data/templates/CentOS-6.0-i386-netboot/definition.rb +16 -0
- data/templates/CentOS-6.0-i386-netboot/ks.cfg +52 -0
- data/templates/CentOS-6.0-i386-netboot/postinstall.sh +30 -0
- data/templates/CentOS-6.0-x86_64/definition.rb +17 -0
- data/templates/CentOS-6.0-x86_64/ks.cfg +47 -0
- data/templates/CentOS-6.0-x86_64/postinstall.sh +48 -0
- data/templates/CentOS-6.0-x86_64-netboot/definition.rb +16 -0
- data/templates/CentOS-6.0-x86_64-netboot/ks.cfg +52 -0
- data/templates/CentOS-6.0-x86_64-netboot/postinstall.sh +30 -0
- data/templates/Debian-5.0.8-amd64-netboot/definition.rb +39 -0
- data/templates/Debian-5.0.8-amd64-netboot/postinstall.sh +60 -0
- data/templates/Debian-5.0.8-amd64-netboot/preseed.cfg +312 -0
- data/templates/Debian-5.0.8-i386-netboot/definition.rb +39 -0
- data/templates/Debian-5.0.8-i386-netboot/postinstall.sh +60 -0
- data/templates/Debian-5.0.8-i386-netboot/preseed.cfg +312 -0
- data/templates/Debian-6.0.2-amd64-netboot/definition.rb +39 -0
- data/templates/Debian-6.0.2-amd64-netboot/postinstall.sh +71 -0
- data/templates/Debian-6.0.2-amd64-netboot/preseed.cfg +312 -0
- data/templates/Debian-6.0.2-i386-netboot/definition.rb +41 -0
- data/templates/Debian-6.0.2-i386-netboot/postinstall.sh +83 -0
- data/templates/Debian-6.0.2-i386-netboot/preseed.cfg +312 -0
- data/templates/Fedora-14-amd64/definition.rb +16 -0
- data/templates/Fedora-14-amd64/ks.cfg +41 -0
- data/templates/Fedora-14-amd64/postinstall.sh +54 -0
- data/templates/Fedora-14-amd64-netboot/definition.rb +16 -0
- data/templates/Fedora-14-amd64-netboot/ks.cfg +40 -0
- data/templates/Fedora-14-amd64-netboot/postinstall.sh +54 -0
- data/templates/Fedora-14-i386/definition.rb +16 -0
- data/templates/Fedora-14-i386/ks.cfg +41 -0
- data/templates/Fedora-14-i386/postinstall.sh +54 -0
- data/templates/Fedora-14-i386-netboot/definition.rb +16 -0
- data/templates/Fedora-14-i386-netboot/ks.cfg +40 -0
- data/templates/Fedora-14-i386-netboot/postinstall.sh +54 -0
- data/templates/Fedora-15-i386/definition.rb +17 -0
- data/templates/Fedora-15-i386/ks.cfg +64 -0
- data/templates/Fedora-15-i386/postinstall.sh +33 -0
- data/templates/Fedora-15-i386-netboot/definition.rb +17 -0
- data/templates/Fedora-15-i386-netboot/ks.cfg +82 -0
- data/templates/Fedora-15-i386-netboot/postinstall.sh +18 -0
- data/templates/Sysrescuecd-2.0.0-experimental/autorun0 +3 -0
- data/templates/Sysrescuecd-2.0.0-experimental/definition.rb +20 -0
- data/templates/archlinux-i386/aif.cfg +33 -0
- data/templates/archlinux-i386/definition.rb +29 -0
- data/templates/archlinux-i386/postinstall.sh +95 -0
- data/templates/archlinux-x86_64/aif.cfg +33 -0
- data/templates/archlinux-x86_64/definition.rb +29 -0
- data/templates/archlinux-x86_64/postinstall.sh +95 -0
- data/templates/freebsd-8.2-experimental/definition.rb +19 -0
- data/templates/freebsd-8.2-experimental/postinstall.sh +191 -0
- data/templates/freebsd-8.2-pcbsd-i386/definition.rb +31 -0
- data/templates/freebsd-8.2-pcbsd-i386/pcinstall.fbg.cfg +57 -0
- data/templates/freebsd-8.2-pcbsd-i386/postinstall.sh +93 -0
- data/templates/freebsd-8.2-pcbsd-i386-netboot/definition.rb +34 -0
- data/templates/freebsd-8.2-pcbsd-i386-netboot/pcinstall.fbg.cfg +58 -0
- data/templates/freebsd-8.2-pcbsd-i386-netboot/postinstall.sh +93 -0
- data/templates/gentoo-latest-i386-experimental/definition.rb +29 -0
- data/templates/gentoo-latest-i386-experimental/postinstall.sh +184 -0
- data/templates/openindiana-148-ai-x86/auto_install/ai.dtd +58 -0
- data/templates/openindiana-148-ai-x86/auto_install/ai_manifest.xml +241 -0
- data/templates/openindiana-148-ai-x86/auto_install/configuration.dtd +44 -0
- data/templates/openindiana-148-ai-x86/auto_install/default.xml +121 -0
- data/templates/openindiana-148-ai-x86/auto_install/default.xml.orig +124 -0
- data/templates/openindiana-148-ai-x86/auto_install/sc_profiles/static_network.xml +105 -0
- data/templates/openindiana-148-ai-x86/auto_install/software.dtd +105 -0
- data/templates/openindiana-148-ai-x86/auto_install/target.dtd +196 -0
- data/templates/openindiana-148-ai-x86/default.xml +121 -0
- data/templates/openindiana-148-ai-x86/definition.rb +59 -0
- data/templates/openindiana-148-ai-x86/postinstall.sh +103 -0
- data/templates/opensuse-11.4-i386-experimental/README +11 -0
- data/templates/opensuse-11.4-i386-experimental/autoinst.xml +1269 -0
- data/templates/opensuse-11.4-i386-experimental/autoinst.xml.generated +1269 -0
- data/templates/opensuse-11.4-i386-experimental/autoinst.xml.tweaked +1269 -0
- data/templates/opensuse-11.4-i386-experimental/definition.rb +31 -0
- data/templates/opensuse-11.4-i386-experimental/postinstall.sh +90 -0
- data/templates/solaris-11-express-i386/auto_install/ai.dtd +58 -0
- data/templates/solaris-11-express-i386/auto_install/ai_manifest.xml +241 -0
- data/templates/solaris-11-express-i386/auto_install/configuration.dtd +44 -0
- data/templates/solaris-11-express-i386/auto_install/default.xml +124 -0
- data/templates/solaris-11-express-i386/auto_install/default.xml.orig +124 -0
- data/templates/solaris-11-express-i386/auto_install/sc_profiles/static_network.xml +105 -0
- data/templates/solaris-11-express-i386/auto_install/software.dtd +105 -0
- data/templates/solaris-11-express-i386/auto_install/target.dtd +196 -0
- data/templates/solaris-11-express-i386/default.xml +121 -0
- data/templates/solaris-11-express-i386/definition.rb +65 -0
- data/templates/solaris-11-express-i386/postinstall.sh +98 -0
- data/templates/ubuntu-10.04.2-amd64-netboot/definition.rb +23 -0
- data/templates/ubuntu-10.04.2-amd64-netboot/postinstall.sh +90 -0
- data/templates/ubuntu-10.04.2-amd64-netboot/preseed.cfg +89 -0
- data/templates/ubuntu-10.04.2-server-amd64/definition.rb +57 -0
- data/templates/ubuntu-10.04.2-server-amd64/postinstall.sh +90 -0
- data/templates/ubuntu-10.04.2-server-amd64/preseed.cfg +87 -0
- data/templates/ubuntu-10.04.2-server-amd64-alt/definition.rb +57 -0
- data/templates/ubuntu-10.04.2-server-amd64-alt/postinstall.sh +249 -0
- data/templates/ubuntu-10.04.2-server-amd64-alt/preseed.cfg +124 -0
- data/templates/ubuntu-10.04.2-server-i386/definition.rb +24 -0
- data/templates/ubuntu-10.04.2-server-i386/postinstall.sh +91 -0
- data/templates/ubuntu-10.04.2-server-i386/preseed.cfg +87 -0
- data/templates/ubuntu-10.04.2-server-i386-netboot/definition.rb +23 -0
- data/templates/ubuntu-10.04.2-server-i386-netboot/postinstall.sh +90 -0
- data/templates/ubuntu-10.04.2-server-i386-netboot/preseed.cfg +89 -0
- data/templates/ubuntu-10.10-server-amd64/definition.rb +24 -0
- data/templates/ubuntu-10.10-server-amd64/postinstall.sh +90 -0
- data/templates/ubuntu-10.10-server-amd64/preseed.cfg +87 -0
- data/templates/ubuntu-10.10-server-amd64-netboot/definition.rb +24 -0
- data/templates/ubuntu-10.10-server-amd64-netboot/postinstall.sh +90 -0
- data/templates/ubuntu-10.10-server-amd64-netboot/preseed.cfg +89 -0
- data/templates/ubuntu-10.10-server-i386/definition.rb +24 -0
- data/templates/ubuntu-10.10-server-i386/postinstall.sh +90 -0
- data/templates/ubuntu-10.10-server-i386/preseed.cfg +87 -0
- data/templates/ubuntu-10.10-server-i386-netboot/definition.rb +24 -0
- data/templates/ubuntu-10.10-server-i386-netboot/postinstall.sh +90 -0
- data/templates/ubuntu-10.10-server-i386-netboot/preseed.cfg +89 -0
- data/templates/ubuntu-11.04-server-amd64/definition.rb +24 -0
- data/templates/ubuntu-11.04-server-amd64/postinstall.sh +90 -0
- data/templates/ubuntu-11.04-server-amd64/preseed.cfg +87 -0
- data/templates/ubuntu-11.04-server-i386/definition.rb +24 -0
- data/templates/ubuntu-11.04-server-i386/postinstall.sh +90 -0
- data/templates/ubuntu-11.04-server-i386/preseed.cfg +87 -0
- data/templates/ubuntu-8.04.4-server-amd64/definition.rb +25 -0
- data/templates/ubuntu-8.04.4-server-amd64/postinstall.sh +68 -0
- data/templates/ubuntu-8.04.4-server-amd64/preseed.cfg +88 -0
- data/templates/ubuntu-8.04.4-server-i386/definition.rb +25 -0
- data/templates/ubuntu-8.04.4-server-i386/postinstall.sh +47 -0
- data/templates/ubuntu-8.04.4-server-i386/preseed.cfg +87 -0
- data/templates/windows-2008R2-amd64/Autounattend.xml +132 -0
- data/templates/windows-2008R2-amd64/README.md +68 -0
- data/templates/windows-2008R2-amd64/cygwin-setup.exe +0 -0
- data/templates/windows-2008R2-amd64/definition.rb +16 -0
- data/templates/windows-2008R2-amd64/install-cygwin-sshd.bat +38 -0
- data/templates/windows-2008R2-amd64/install-winrm.bat +6 -0
- data/templates/windows-2008R2-amd64/oracle-cert.cer +0 -0
- data/templates/windows-2008R2-amd64/postinstall.sh +122 -0
- data/templates/windows-2008R2-amd64/winrm.rb +8 -0
- data/trials/docu-vbox.txt +83 -0
- data/trials/f.rb +29 -0
- data/trials/t.rb +15 -0
- data/validation/features/steps/ssh_steps.rb +170 -0
- data/validation/support/env.rb +1 -0
- data/validation/vagrant-private.key +27 -0
- data/validation/vagrant.feature +52 -0
- data/validation/vagrant.pub +1 -0
- data/veewee.gemspec +33 -0
- data/vendor/cache/Platform-0.4.0.gem +0 -0
- data/vendor/cache/archive-tar-minitar-0.5.2.gem +0 -0
- data/vendor/cache/builder-3.0.0.gem +0 -0
- data/vendor/cache/cucumber-1.0.2.gem +0 -0
- data/vendor/cache/diff-lcs-1.1.2.gem +0 -0
- data/vendor/cache/erubis-2.7.0.gem +0 -0
- data/vendor/cache/ffi-1.0.9.gem +0 -0
- data/vendor/cache/gherkin-2.4.6.gem +0 -0
- data/vendor/cache/highline-1.6.2.gem +0 -0
- data/vendor/cache/i18n-0.5.0.gem +0 -0
- data/vendor/cache/json-1.5.3.gem +0 -0
- data/vendor/cache/net-scp-1.0.4.gem +0 -0
- data/vendor/cache/net-ssh-2.1.4.gem +0 -0
- data/vendor/cache/open4-1.1.0.gem +0 -0
- data/vendor/cache/popen4-0.1.2.gem +0 -0
- data/vendor/cache/progressbar-0.9.1.gem +0 -0
- data/vendor/cache/rspec-2.5.0.gem +0 -0
- data/vendor/cache/rspec-core-2.5.2.gem +0 -0
- data/vendor/cache/rspec-expectations-2.5.0.gem +0 -0
- data/vendor/cache/rspec-mocks-2.5.0.gem +0 -0
- data/vendor/cache/term-ansicolor-1.0.6.gem +0 -0
- data/vendor/cache/thor-0.14.6.gem +0 -0
- data/vendor/cache/vagrant-0.8.2.gem +0 -0
- data/vendor/cache/virtualbox-0.9.1.gem +0 -0
- metadata +417 -0
data/lib/veewee/shell.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
#require 'open4'
|
2
|
+
|
3
|
+
module Veewee
|
4
|
+
class Shell
|
5
|
+
|
6
|
+
def self.execute2(command,options = {})
|
7
|
+
|
8
|
+
IO.popen("#{command}") { |f| print f }
|
9
|
+
end
|
10
|
+
|
11
|
+
#pty allows you to gradually see the output of a local command
|
12
|
+
#http://www.shanison.com/?p=415
|
13
|
+
def self.execute(command, options = {} )
|
14
|
+
require "pty"
|
15
|
+
begin
|
16
|
+
PTY.spawn( command ) do |r, w, pid|
|
17
|
+
begin
|
18
|
+
r.each { }
|
19
|
+
#r.each { |line| print line;}
|
20
|
+
|
21
|
+
rescue Errno::EIO
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue PTY::ChildExited => e
|
25
|
+
puts "The child process exited!"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#occassinally fails with 'no child processes
|
30
|
+
def self.execute3(command, options = {} )
|
31
|
+
defaults= { :port => "22", :exitcode => "0", :user => "root"}
|
32
|
+
options=defaults.merge(options)
|
33
|
+
|
34
|
+
status = POpen4::popen4(command) do |stdout,stderr,stdin|
|
35
|
+
stdout.each do |line|
|
36
|
+
puts line
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
@status=status.to_i
|
41
|
+
|
42
|
+
if (@status.to_s != options[:exitcode] )
|
43
|
+
if (options[:exitcode]=="*")
|
44
|
+
#its a test so we don't need to worry
|
45
|
+
else
|
46
|
+
raise "Exitcode was not what we expected"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end #Class
|
54
|
+
end #Module
|
data/lib/veewee/ssh.rb
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
module Veewee
|
2
|
+
class Ssh
|
3
|
+
|
4
|
+
def self.when_ssh_login_works(ip="localhost", options = { } , &block)
|
5
|
+
|
6
|
+
defaults={ :port => '22', :timeout => 200 , :user => 'vagrant', :password => 'vagrant'}
|
7
|
+
|
8
|
+
options=defaults.merge(options)
|
9
|
+
|
10
|
+
puts
|
11
|
+
puts "Waiting for ssh login with user #{options[:user]} to sshd on port => #{options[:port]} to work"
|
12
|
+
|
13
|
+
begin
|
14
|
+
Timeout::timeout(options[:timeout]) do
|
15
|
+
connected=false
|
16
|
+
@key_auth_tried = false
|
17
|
+
ssh_options = { :port => options[:port] , :password => options[:password], :paranoid => false, :timeout => options[:timeout] }
|
18
|
+
while !connected do
|
19
|
+
begin
|
20
|
+
print "."
|
21
|
+
Net::SSH.start(ip, options[:user], ssh_options) do |ssh|
|
22
|
+
block.call(ip);
|
23
|
+
puts ""
|
24
|
+
return true
|
25
|
+
end
|
26
|
+
rescue Net::SSH::AuthenticationFailed
|
27
|
+
options[:keys] = File.join(File.dirname(__FILE__),'./../../validation/vagrant')
|
28
|
+
options.delete(:password)
|
29
|
+
ssh_options = options
|
30
|
+
if @key_auth_tried
|
31
|
+
raise
|
32
|
+
else
|
33
|
+
@key_auth_tried = true
|
34
|
+
retry
|
35
|
+
end
|
36
|
+
rescue Net::SSH::Disconnect,Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH
|
37
|
+
sleep 5
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
rescue Timeout::Error
|
42
|
+
raise 'ssh timeout'
|
43
|
+
end
|
44
|
+
puts ""
|
45
|
+
return false
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
def self.transfer_file(host,filename,destination = '.' , options = {})
|
50
|
+
|
51
|
+
Net::SSH.start( host,options[:user],options ) do |ssh|
|
52
|
+
puts "Transferring #{filename} to #{destination} "
|
53
|
+
ssh.scp.upload!( filename, destination ) do |ch, name, sent, total|
|
54
|
+
# print "\r#{destination}: #{(sent.to_f * 100 / total.to_f).to_i}%"
|
55
|
+
print "."
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
puts
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
#we need to try the actual login because vbox gives us a connect
|
64
|
+
#after the machine boots
|
65
|
+
def self.execute_when_tcp_available(ip="localhost", options = { } , &block)
|
66
|
+
|
67
|
+
defaults={ :port => 22, :timeout => 2 , :pollrate => 5}
|
68
|
+
|
69
|
+
options=defaults.merge(options)
|
70
|
+
|
71
|
+
begin
|
72
|
+
Timeout::timeout(options[:timeout]) do
|
73
|
+
connected=false
|
74
|
+
while !connected do
|
75
|
+
begin
|
76
|
+
puts "trying connection"
|
77
|
+
s = TCPSocket.new(ip, options[:port])
|
78
|
+
s.close
|
79
|
+
block.call(ip);
|
80
|
+
return true
|
81
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
82
|
+
sleep options[:pollrate]
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
rescue Timeout::Error
|
87
|
+
raise 'timeout connecting to port'
|
88
|
+
end
|
89
|
+
|
90
|
+
return false
|
91
|
+
end
|
92
|
+
|
93
|
+
def self.execute(host,command, options = { :progress => "on"} )
|
94
|
+
defaults= { :port => "22", :exitcode => "0", :user => "root"}
|
95
|
+
options=defaults.merge(options)
|
96
|
+
@pid=""
|
97
|
+
@stdin=command
|
98
|
+
@stdout=""
|
99
|
+
@stderr=""
|
100
|
+
@status=-99999
|
101
|
+
|
102
|
+
puts "Executing command: #{command}"
|
103
|
+
|
104
|
+
@key_auth_tried = false
|
105
|
+
ssh_options = { :port => options[:port], :password => options[:password], :paranoid => false}
|
106
|
+
# ssh_options[:verbose] => :debug
|
107
|
+
begin
|
108
|
+
Net::SSH.start(host, options[:user], ssh_options) do |ssh|
|
109
|
+
|
110
|
+
# open a new channel and configure a minimal set of callbacks, then run
|
111
|
+
# the event loop until the channel finishes (closes)
|
112
|
+
channel = ssh.open_channel do |ch|
|
113
|
+
|
114
|
+
#request pty for sudo stuff and so
|
115
|
+
ch.request_pty do |ch, success|
|
116
|
+
raise "Error requesting pty" unless success
|
117
|
+
end
|
118
|
+
|
119
|
+
|
120
|
+
ch.exec "#{command}" do |ch, success|
|
121
|
+
raise "could not execute command" unless success
|
122
|
+
|
123
|
+
|
124
|
+
|
125
|
+
# "on_data" is called when the process writes something to stdout
|
126
|
+
ch.on_data do |c, data|
|
127
|
+
@stdout+=data
|
128
|
+
|
129
|
+
print data
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
# "on_extended_data" is called when the process writes something to stderr
|
134
|
+
ch.on_extended_data do |c, type, data|
|
135
|
+
@stderr+=data
|
136
|
+
|
137
|
+
print data
|
138
|
+
|
139
|
+
end
|
140
|
+
|
141
|
+
#exit code
|
142
|
+
#http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/a806b0f5dae4e1e2
|
143
|
+
channel.on_request("exit-status") do |ch, data|
|
144
|
+
exit_code = data.read_long
|
145
|
+
@status=exit_code
|
146
|
+
if exit_code > 0
|
147
|
+
puts "ERROR: exit code #{exit_code}"
|
148
|
+
else
|
149
|
+
#puts "Successfully executed"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
channel.on_request("exit-signal") do |ch, data|
|
154
|
+
puts "SIGNAL: #{data.read_long}"
|
155
|
+
end
|
156
|
+
|
157
|
+
ch.on_close {
|
158
|
+
#puts "done!"
|
159
|
+
}
|
160
|
+
#status=ch.exec "echo $?"
|
161
|
+
end
|
162
|
+
end
|
163
|
+
channel.wait
|
164
|
+
end
|
165
|
+
rescue Net::SSH::AuthenticationFailed
|
166
|
+
ssh_options[:keys] = Array.new([File.join(File.dirname(__FILE__),'./../../validation/vagrant')])
|
167
|
+
ssh_options.delete(:password)
|
168
|
+
ssh_options[:auth_methods] = ['publickey']
|
169
|
+
if @key_auth_tried
|
170
|
+
raise
|
171
|
+
else
|
172
|
+
@key_auth_tried = true
|
173
|
+
retry
|
174
|
+
end
|
175
|
+
rescue Net::SSH::Disconnect, Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Errno::ECONNABORTED, Errno::ECONNRESET, Errno::ENETUNREACH
|
176
|
+
sleep 1
|
177
|
+
end
|
178
|
+
|
179
|
+
if (@status.to_s != options[:exitcode] )
|
180
|
+
if (options[:exitcode]=="*")
|
181
|
+
#its a test so we don't need to worry
|
182
|
+
else
|
183
|
+
raise "Exitcode was not what we expected"
|
184
|
+
end
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
|
191
|
+
|
192
|
+
end #Class
|
193
|
+
end #Module
|
@@ -0,0 +1,122 @@
|
|
1
|
+
module Veewee
|
2
|
+
class Transaction
|
3
|
+
|
4
|
+
def transaction(name,params, &block)
|
5
|
+
end
|
6
|
+
|
7
|
+
def transaction2(name,options= { :checksum => "nochecksum"}, &block)
|
8
|
+
if snapshot_exists(@vmname,name+"-"+options[:checksum])
|
9
|
+
load_snapshot_vmachine(@vmname,name+"-"+options[:checksum])
|
10
|
+
else
|
11
|
+
if snapshot_version_exists(@vmname,name)
|
12
|
+
rollback_snapshot(@vmname,name)
|
13
|
+
#rollback to snapshot prior to this one
|
14
|
+
end
|
15
|
+
yield
|
16
|
+
create_snapshot_vmachine(@vmname,name+"-"+options[:checksum])
|
17
|
+
end
|
18
|
+
#end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.remove_snapshot_vmachine(vmname,snapname)
|
22
|
+
@vboxcmd=Veewee::Session.determine_vboxcmd
|
23
|
+
|
24
|
+
Veewee::Shell.execute("#{@vboxcmd} snapshot '#{vmname}' delete '#{snapname}'")
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.create_snapshot_vmachine(vmname,snapname)
|
28
|
+
@vboxcmd=Veewee::Session.determine_vboxcmd
|
29
|
+
|
30
|
+
Veewee::Shell.execute("#{@vboxcmd} snapshot '#{vmname}' take '#{snapname}'")
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.load_snapshot_vmachine(vmname,snapname)
|
34
|
+
@vboxcmd=Veewee::Session.determine_vboxcmd
|
35
|
+
|
36
|
+
#if it running , shutdown first
|
37
|
+
if (state_vmachine(vmname)=="running")
|
38
|
+
stop_vmachine(vmname)
|
39
|
+
end
|
40
|
+
|
41
|
+
Veewee::Shell.execute("#{@vboxcmd} snapshot '#{vmname}' restore '#{snapname}'")
|
42
|
+
#sometimes it takes some time to shutdown
|
43
|
+
sleep 2
|
44
|
+
Veewee::Shell.execute("#{@vboxcmd} startvm '#{vmname}'")
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.snapshot_exists(vmname,snapname)
|
48
|
+
list_snapshots(vmname).each { |name|
|
49
|
+
if (name==snapname) then
|
50
|
+
return true
|
51
|
+
end
|
52
|
+
}
|
53
|
+
return false
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.snapshot_version_exists(vmname,snapname)
|
57
|
+
list_snapshots(vmname).each { |name|
|
58
|
+
if name.match(/^#{snapname}-/) then
|
59
|
+
return true
|
60
|
+
end
|
61
|
+
}
|
62
|
+
return false
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.rollback_snapshot(vmname,snapname)
|
66
|
+
delete_flag=false
|
67
|
+
@vboxcmd=Veewee::Session.determine_vboxcmd
|
68
|
+
|
69
|
+
savestate_recover=false
|
70
|
+
if (state_vmachine(vmname)=="running")
|
71
|
+
Veewee::Shell.execute("#{@vboxcmd} controlvm '#{vmname}' savestate")
|
72
|
+
savestate_recover=true
|
73
|
+
end
|
74
|
+
|
75
|
+
list_snapshots(vmname).each { |name|
|
76
|
+
if name.match(/^#{snapname}-/) then
|
77
|
+
delete_flag=true
|
78
|
+
end
|
79
|
+
if (delete_flag) then
|
80
|
+
remove_snapshot_vmachine(vmname,name)
|
81
|
+
sleep 1
|
82
|
+
end
|
83
|
+
}
|
84
|
+
|
85
|
+
|
86
|
+
sleep 2
|
87
|
+
|
88
|
+
Veewee::Shell.execute("#{@vboxcmd} startvm '#{vmname}'")
|
89
|
+
|
90
|
+
if (savestate_recover)
|
91
|
+
#Recovering from savestate nukes the network! This trick seem to work
|
92
|
+
#Also within the vm /etc/init.d/networking restart , but that is OS specific
|
93
|
+
#http://www.virtualbox.org/ticket/5666
|
94
|
+
#http://www.virtualbox.org/ticket/5654
|
95
|
+
#This is supposed to be fixed: http://www.virtualbox.org/changeset/25205 but alas
|
96
|
+
Veewee::Shell.execute("#{@vboxcmd} controlvm '#{vmname}' nic1 nat")
|
97
|
+
Veewee::Shell.execute("#{@vboxcmd} controlvm '#{vmname}' setlinkstate1 off")
|
98
|
+
Veewee::Shell.execute("#{@vboxcmd} controlvm '#{vmname}' setlinkstate1 on")
|
99
|
+
sleep 2
|
100
|
+
|
101
|
+
#hmmm, virtualbox => when recovering from a restore , it looses the nat settings!!! So we need to do this again!!
|
102
|
+
#thebox.ssh_enable_vmachine({:hostport => host_port , :guestport => 22} )
|
103
|
+
#http://www.virtualbox.org/changeset/25402
|
104
|
+
#[25402]: NAT: re-establish port-forwarding after savestate / restore state
|
105
|
+
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
109
|
+
|
110
|
+
|
111
|
+
def self.list_snapshots(vmname)
|
112
|
+
@vboxcmd=Veewee::Session.determine_vboxcmd
|
113
|
+
|
114
|
+
snapshotresult=Veewee::Shell.execute("#{@vboxcmd} showvminfo --machinereadable '#{vmname}' |grep ^SnapshotName| cut -d '=' -f 2").stdout
|
115
|
+
snapshotlist=snapshotresult.gsub(/\"/,'').split(/\n/)
|
116
|
+
return snapshotlist
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
|
data/lib/veewee/utils.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'socket'
|
2
|
+
require 'timeout'
|
3
|
+
|
4
|
+
module Veewee
|
5
|
+
class Utils
|
6
|
+
|
7
|
+
def self.is_port_open?(ip, port)
|
8
|
+
begin
|
9
|
+
Timeout::timeout(1) do
|
10
|
+
begin
|
11
|
+
s = TCPSocket.new(ip, port)
|
12
|
+
s.close
|
13
|
+
return true
|
14
|
+
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH
|
15
|
+
return false
|
16
|
+
end
|
17
|
+
end
|
18
|
+
rescue Timeout::Error
|
19
|
+
end
|
20
|
+
|
21
|
+
return false
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
end #Class
|
26
|
+
end #Module
|
data/lib/veewee/web.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
module Veewee
|
2
|
+
class Web
|
3
|
+
|
4
|
+
require 'webrick'
|
5
|
+
include WEBrick
|
6
|
+
|
7
|
+
class FileServlet < WEBrick::HTTPServlet::AbstractServlet
|
8
|
+
|
9
|
+
def initialize(server,localfile)
|
10
|
+
super(server)
|
11
|
+
@server=server
|
12
|
+
@localfile=localfile
|
13
|
+
end
|
14
|
+
def do_GET(request,response)
|
15
|
+
response['Content-Type']='text/plain'
|
16
|
+
response.status = 200
|
17
|
+
puts "Serving file #{@localfile}"
|
18
|
+
displayfile=File.open(@localfile,'r')
|
19
|
+
content=displayfile.read()
|
20
|
+
response.body=content
|
21
|
+
#If we shut too fast it might not get the complete file
|
22
|
+
sleep 2
|
23
|
+
@server.shutdown
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.wait_for_request(filename,options={:timeout => 10, :web_dir => "", :port => 7125})
|
28
|
+
|
29
|
+
webrick_logger=WEBrick::Log.new("/dev/null", WEBrick::Log::INFO)
|
30
|
+
|
31
|
+
web_dir=options[:web_dir]
|
32
|
+
filename=filename
|
33
|
+
s= HTTPServer.new(
|
34
|
+
:Port => options[:port],
|
35
|
+
:Logger => webrick_logger,
|
36
|
+
:AccessLog => webrick_logger
|
37
|
+
)
|
38
|
+
s.mount("/#{filename}", FileServlet,File.join(web_dir,filename))
|
39
|
+
trap("INT"){
|
40
|
+
s.shutdown
|
41
|
+
puts "Stopping webserver"
|
42
|
+
exit
|
43
|
+
}
|
44
|
+
s.start
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
data/lib/veewee.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
Veewee::Session.declare({
|
2
|
+
:cpu_count => '1', :memory_size=> '384',
|
3
|
+
:disk_size => '10140', :disk_format => 'VDI',:hostiocache => 'off',:ioapic => 'on', :pae => 'on',
|
4
|
+
:os_type_id => 'RedHat',
|
5
|
+
:iso_file => "CentOS-4.8-i386-bin-DVD.iso", :iso_src => "", :iso_md5 => "", :iso_download_timeout => 1000,
|
6
|
+
:iso_download_instructions => "This iso is no more available, for instructions see http://isoredirect.centos.org/centos/4/isos/i386/"
|
7
|
+
:boot_wait => "10", :boot_cmd_sequence => [ 'linux text ks=http://%IP%:%PORT%/ks.cfg<Enter>' ],
|
8
|
+
:kickstart_port => "7122", :kickstart_timeout => 10000, :kickstart_file => "ks.cfg",
|
9
|
+
:ssh_login_timeout => "100", :ssh_user => "vagrant", :ssh_password => "vagrant", :ssh_key => "",
|
10
|
+
:ssh_host_port => "7222", :ssh_guest_port => "22",
|
11
|
+
:sudo_cmd => "echo '%p'|sudo -S sh '%f'",
|
12
|
+
:shutdown_cmd => "/sbin/halt -h -p",
|
13
|
+
:postinstall_files => [ "postinstall.sh"], :postinstall_timeout => 10000
|
14
|
+
})
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Kickstart file automatically generated by anaconda.
|
2
|
+
|
3
|
+
install
|
4
|
+
cdrom
|
5
|
+
lang en_US.UTF-8
|
6
|
+
langsupport --default=en_US.UTF-8 en_US.UTF-8
|
7
|
+
keyboard be-latin1
|
8
|
+
xconfig --card "VMWare" --videoram 16384 --hsync 31.5-37.9 --vsync 50-70 --resolution 800x600 --depth 16
|
9
|
+
network --device eth0 --bootproto dhcp
|
10
|
+
rootpw --iscrypted $1$vSG8FjAu$ekQ0grf16hS4G93HTPcco/
|
11
|
+
firewall --enabled --trust eth0 --ssh
|
12
|
+
selinux --enforcing
|
13
|
+
authconfig --enableshadow --enablemd5
|
14
|
+
timezone Europe/Brussels
|
15
|
+
bootloader --location=mbr
|
16
|
+
# The following is the partition information you requested
|
17
|
+
# Note that any partitions you deleted are not expressed
|
18
|
+
# here so unless you clear all partitions first, this is
|
19
|
+
# not guaranteed to work
|
20
|
+
clearpart --all --drives=sda --initlabel
|
21
|
+
part /boot --fstype ext3 --size=100 --ondisk=sda
|
22
|
+
part pv.2 --size=0 --grow --ondisk=sda
|
23
|
+
volgroup VolGroup00 --pesize=32768 pv.2
|
24
|
+
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=528 --grow --maxsize=1056
|
25
|
+
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
|
26
|
+
reboot
|
27
|
+
|
28
|
+
%packages
|
29
|
+
#@ admin-tools
|
30
|
+
#@ text-internet
|
31
|
+
#@ dialup
|
32
|
+
#@ smb-server
|
33
|
+
#@ web-server
|
34
|
+
#@ printing
|
35
|
+
#@ server-cfg
|
36
|
+
@ core
|
37
|
+
grub
|
38
|
+
e2fsprogs
|
39
|
+
lvm2
|
40
|
+
|
41
|
+
%post
|
42
|
+
/usr/sbin/groupadd vagrant
|
43
|
+
/usr/sbin/useradd vagrant -g vagrant -G wheel
|
44
|
+
echo "vagrant"|passwd --stdin vagrant
|
45
|
+
echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#http://chrisadams.me.uk/2010/05/10/setting-up-a-centos-base-box-for-development-and-testing-with-vagrant/
|
2
|
+
#kernel source is needed for vbox additions
|
3
|
+
|
4
|
+
date > /etc/vagrant_box_build_time
|
5
|
+
|
6
|
+
yum -y install gcc bzip2 make kernel-devel-`uname -r`
|
7
|
+
|
8
|
+
#yum -y update
|
9
|
+
#yum -y upgrade
|
10
|
+
|
11
|
+
yum -y install gcc-c++ zlib-devel openssl-devel readline-devel sqlite3-devel
|
12
|
+
|
13
|
+
yum -y erase wireless-tools gtk2 libX11 hicolor-icon-theme avahi freetype bitstream-vera-fonts
|
14
|
+
|
15
|
+
yum -y clean all
|
16
|
+
|
17
|
+
#Installing ruby
|
18
|
+
wget http://rubyforge.org/frs/download.php/71096/ruby-enterprise-1.8.7-2010.02.tar.gz
|
19
|
+
tar xzvf ruby-enterprise-1.8.7-2010.02.tar.gz
|
20
|
+
./ruby-enterprise-1.8.7-2010.02/installer -a /opt/ruby --no-dev-docs --dont-install-useful-gems
|
21
|
+
echo 'PATH=$PATH:/opt/ruby/bin'> /etc/profile.d/rubyenterprise.sh
|
22
|
+
rm -rf ./ruby-enterprise-1.8.7-2010.02/
|
23
|
+
rm ruby-enterprise-1.8.7-2010.02.tar.gz
|
24
|
+
|
25
|
+
#Installing chef & Puppet
|
26
|
+
/opt/ruby/bin/gem install chef --no-ri --no-rdoc
|
27
|
+
/opt/ruby/bin/gem install puppet --no-ri --no-rdoc
|
28
|
+
|
29
|
+
#Installing vagrant keys
|
30
|
+
mkdir /home/vagrant/.ssh
|
31
|
+
chmod 700 /home/vagrant/.ssh
|
32
|
+
cd /home/vagrant/.ssh
|
33
|
+
wget --no-check-certificate 'http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub' -O authorized_keys
|
34
|
+
chown -R vagrant /home/vagrant/.ssh
|
35
|
+
|
36
|
+
#Installing the virtualbox guest additions
|
37
|
+
VBOX_VERSION=$(cat /home/vagrant/.vbox_version)
|
38
|
+
cd /tmp
|
39
|
+
wget http://download.virtualbox.org/virtualbox/$VBOX_VERSION/VBoxGuestAdditions_$VBOX_VERSION.iso
|
40
|
+
mount -o loop VBoxGuestAdditions_$VBOX_VERSION.iso /mnt
|
41
|
+
sh /mnt/VBoxLinuxAdditions.run
|
42
|
+
umount /mnt
|
43
|
+
|
44
|
+
rm VBoxGuestAdditions_$VBOX_VERSION.iso
|
45
|
+
|
46
|
+
#poweroff -h
|
47
|
+
|
48
|
+
sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers
|
49
|
+
|
50
|
+
|
51
|
+
exit
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Veewee::Session.declare({
|
2
|
+
:cpu_count => '1', :memory_size=> '384',
|
3
|
+
:disk_size => '10140', :disk_format => 'VDI', :hostiocache => 'off', :ioapic => 'on', :pae => 'on',
|
4
|
+
:os_type_id => 'RedHat',
|
5
|
+
:iso_file => "CentOS-5.6-i386-bin-DVD.iso", :iso_src => "", :iso_md5 => "181142a5845586579d5d4d96e43a4827", :iso_download_timeout => 1000,
|
6
|
+
:iso_download_instructions => "We can not download the ISO , you need to download it yourself and put it in the iso directory\n"+
|
7
|
+
"- URL: http://isoredirect.centos.org/centos/5/isos/i386/ ",
|
8
|
+
:boot_wait => "10", :boot_cmd_sequence => [
|
9
|
+
'linux text ks=http://%IP%:%PORT%/ks.cfg<Enter>'
|
10
|
+
],
|
11
|
+
:kickstart_port => "7122", :kickstart_timeout => 10000, :kickstart_file => "ks.cfg",
|
12
|
+
:ssh_login_timeout => "100", :ssh_user => "vagrant", :ssh_password => "vagrant", :ssh_key => "",
|
13
|
+
:ssh_host_port => "7222", :ssh_guest_port => "22",
|
14
|
+
:sudo_cmd => "echo '%p'|sudo -S sh '%f'",
|
15
|
+
:shutdown_cmd => "/sbin/halt -h -p",
|
16
|
+
:postinstall_files => [ "postinstall.sh"], :postinstall_timeout => 10000
|
17
|
+
})
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# Kickstart file automatically generated by anaconda.
|
2
|
+
|
3
|
+
install
|
4
|
+
cdrom
|
5
|
+
lang en_US.UTF-8
|
6
|
+
langsupport --default=en_US.UTF-8 en_US.UTF-8
|
7
|
+
keyboard us
|
8
|
+
xconfig --card "VMWare" --videoram 16384 --hsync 31.5-37.9 --vsync 50-70 --resolution 800x600 --depth 16
|
9
|
+
network --device eth0 --bootproto dhcp
|
10
|
+
rootpw --iscrypted $1$vSG8FjAu$ekQ0grf16hS4G93HTPcco/
|
11
|
+
firewall --enabled --trust eth0 --ssh
|
12
|
+
selinux --enforcing
|
13
|
+
authconfig --enableshadow --enablemd5
|
14
|
+
timezone Europe/Brussels
|
15
|
+
bootloader --location=mbr
|
16
|
+
# The following is the partition information you requested
|
17
|
+
# Note that any partitions you deleted are not expressed
|
18
|
+
# here so unless you clear all partitions first, this is
|
19
|
+
# not guaranteed to work
|
20
|
+
clearpart --all --drives=sda --initlabel
|
21
|
+
part /boot --fstype ext3 --size=100 --ondisk=sda
|
22
|
+
part pv.2 --size=0 --grow --ondisk=sda
|
23
|
+
volgroup VolGroup00 --pesize=32768 pv.2
|
24
|
+
logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=528 --grow --maxsize=1056
|
25
|
+
logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
|
26
|
+
reboot
|
27
|
+
|
28
|
+
%packages
|
29
|
+
#@ admin-tools
|
30
|
+
#@ text-internet
|
31
|
+
#@ dialup
|
32
|
+
#@ smb-server
|
33
|
+
#@ web-server
|
34
|
+
#@ printing
|
35
|
+
#@ server-cfg
|
36
|
+
@ core
|
37
|
+
grub
|
38
|
+
e2fsprogs
|
39
|
+
lvm2
|
40
|
+
|
41
|
+
%post
|
42
|
+
/usr/sbin/groupadd vagrant
|
43
|
+
/usr/sbin/useradd vagrant -g vagrant -G wheel
|
44
|
+
echo "vagrant"|passwd --stdin vagrant
|
45
|
+
echo "vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#http://chrisadams.me.uk/2010/05/10/setting-up-a-centos-base-box-for-development-and-testing-with-vagrant/
|
2
|
+
#kernel source is needed for vbox additions
|
3
|
+
|
4
|
+
date > /etc/vagrant_box_build_time
|
5
|
+
|
6
|
+
yum -y install gcc bzip2 make kernel-devel-`uname -r`
|
7
|
+
|
8
|
+
#yum -y update
|
9
|
+
#yum -y upgrade
|
10
|
+
|
11
|
+
yum -y install gcc-c++ zlib-devel openssl-devel readline-devel sqlite3-devel
|
12
|
+
|
13
|
+
yum -y erase wireless-tools gtk2 libX11 hicolor-icon-theme avahi freetype bitstream-vera-fonts
|
14
|
+
|
15
|
+
yum -y clean all
|
16
|
+
|
17
|
+
#Installing ruby
|
18
|
+
wget http://rubyforge.org/frs/download.php/71096/ruby-enterprise-1.8.7-2010.02.tar.gz
|
19
|
+
tar xzvf ruby-enterprise-1.8.7-2010.02.tar.gz
|
20
|
+
./ruby-enterprise-1.8.7-2010.02/installer -a /opt/ruby --no-dev-docs --dont-install-useful-gems
|
21
|
+
echo 'PATH=$PATH:/opt/ruby/bin'> /etc/profile.d/rubyenterprise.sh
|
22
|
+
rm -rf ./ruby-enterprise-1.8.7-2010.02/
|
23
|
+
rm ruby-enterprise-1.8.7-2010.02.tar.gz
|
24
|
+
|
25
|
+
#Installing chef & Puppet
|
26
|
+
/opt/ruby/bin/gem install chef --no-ri --no-rdoc
|
27
|
+
/opt/ruby/bin/gem install puppet --no-ri --no-rdoc
|
28
|
+
|
29
|
+
#Installing vagrant keys
|
30
|
+
mkdir /home/vagrant/.ssh
|
31
|
+
chmod 700 /home/vagrant/.ssh
|
32
|
+
cd /home/vagrant/.ssh
|
33
|
+
wget --no-check-certificate 'http://github.com/mitchellh/vagrant/raw/master/keys/vagrant.pub' -O authorized_keys
|
34
|
+
chown -R vagrant /home/vagrant/.ssh
|
35
|
+
|
36
|
+
#Installing the virtualbox guest additions
|
37
|
+
VBOX_VERSION=$(cat /home/vagrant/.vbox_version)
|
38
|
+
cd /tmp
|
39
|
+
wget http://download.virtualbox.org/virtualbox/$VBOX_VERSION/VBoxGuestAdditions_$VBOX_VERSION.iso
|
40
|
+
mount -o loop VBoxGuestAdditions_$VBOX_VERSION.iso /mnt
|
41
|
+
sh /mnt/VBoxLinuxAdditions.run
|
42
|
+
umount /mnt
|
43
|
+
|
44
|
+
rm VBoxGuestAdditions_$VBOX_VERSION.iso
|
45
|
+
|
46
|
+
sed -i "s/^.*requiretty/#Defaults requiretty/" /etc/sudoers
|
47
|
+
|
48
|
+
#poweroff -h
|
49
|
+
|
50
|
+
exit
|