kameleon-builder 2.2.3 → 2.2.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rst +13 -0
- data/contrib/kameleon_bashrc.sh +6 -6
- data/lib/kameleon/engine.rb +5 -2
- data/lib/kameleon/persistent_cache.rb +43 -25
- data/lib/kameleon/recipe.rb +12 -7
- data/lib/kameleon/step.rb +2 -0
- data/templates/qemu/centos6.5-x86_64.yaml +18 -9
- data/templates/qemu/centos7-x86_64.yaml +4 -1
- data/templates/qemu/fedora20-x86_64.yaml +4 -1
- data/templates/steps/bootstrap/centos/6.5/yum_bootstrap.yaml +65 -0
- data/templates/steps/bootstrap/start_qemu.yaml +4 -2
- data/templates/steps/bootstrap/start_virtualbox.yaml +3 -2
- data/templates/steps/bootstrap/switch_context_qemu.yaml +5 -4
- data/templates/steps/bootstrap/switch_context_virtualbox.yaml +4 -3
- data/templates/steps/export/save_appliance_from_g5k.yaml +1 -1
- data/templates/steps/export/vagrant_save_appliance.yaml +7 -0
- data/templates/steps/export/virtualbox_save_appliance.yaml +0 -6
- data/templates/steps/setup/centos/6.5/configure_repo.yaml +9 -0
- data/templates/steps/setup/centos/6.5/configure_system.yaml +19 -0
- data/templates/steps/setup/centos/6.5/minimal_install.yaml +3 -0
- data/templates/steps/setup/centos/6.5/setup_vagrant_box.yaml +76 -0
- data/templates/steps/setup/debian/setup_vagrant_box.yaml +6 -8
- data/templates/steps/setup/fedora/configure_system.yaml +18 -0
- data/templates/steps/setup/fedora/install_bootloader.yaml +1 -6
- data/templates/steps/setup/fedora/update_system.yaml +1 -1
- data/templates/virtualbox/archlinux-x86_64.yaml +0 -1
- data/templates/virtualbox/centos6.5-vagrant-x86_64.yaml +33 -0
- data/templates/virtualbox/centos6.5-x86_64.yaml +20 -10
- data/templates/virtualbox/centos7-x86_64.yaml +4 -2
- data/templates/virtualbox/debian7-amd64.yaml +11 -13
- data/templates/virtualbox/debian7-vagrant-amd64.yaml +32 -0
- data/templates/virtualbox/fedora20-x86_64.yaml +4 -2
- data/templates/virtualbox/ubuntu-12.04-amd64.yaml +2 -2
- data/version.txt +1 -1
- metadata +26 -12
- checksums.yaml +0 -7
- data/templates/vagrant/debian7-amd64.yaml +0 -130
data/CHANGELOG.rst
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
Kameleon CHANGELOG
|
2
2
|
==================
|
3
3
|
|
4
|
+
version 2.2.4
|
5
|
+
-------------
|
6
|
+
Released on Sep 2nd 2014
|
7
|
+
|
8
|
+
- [template] Added the ``-cpu host`` option to qemu to improve performances
|
9
|
+
- [template] Made centos image as close as possible as default Centos installation
|
10
|
+
- [template] Configured SELinux for Fedora and Centos
|
11
|
+
- [template] Fixed Grid'5000 export step
|
12
|
+
- [template] Extended vagrant recipes from virtualbox recipes
|
13
|
+
- [core] Adding the step elapsed time to the Kamelon output
|
14
|
+
- [proxy cache] Restructured persistent cache and improved caching of pipes
|
15
|
+
- [proxy cache] Added ``ProxyAdrres`` paramter to polipo to take into account all the host network interfaces
|
16
|
+
|
4
17
|
version 2.2.3
|
5
18
|
-------------
|
6
19
|
Released on Aug 19th 2014
|
data/contrib/kameleon_bashrc.sh
CHANGED
@@ -139,14 +139,14 @@ fi
|
|
139
139
|
|
140
140
|
function __download {
|
141
141
|
echo "Downloading: $1..."
|
142
|
-
if which
|
143
|
-
|
142
|
+
if which wget >/dev/null; then
|
143
|
+
wget --progress=bar:force "$1" -O "$2" 2>&1
|
144
144
|
else
|
145
|
-
fail "
|
146
|
-
if which
|
147
|
-
|
145
|
+
fail "wget is missing, trying with curl..."
|
146
|
+
if which curl >/dev/null; then
|
147
|
+
curl -# -L --retry 999 --retry-max-time 0 "$1" -o "$2" 2>&1
|
148
148
|
else
|
149
|
-
fail "
|
149
|
+
fail "curl is missing, trying with python..."
|
150
150
|
if which python >/dev/null; then
|
151
151
|
python -c "
|
152
152
|
import sys
|
data/lib/kameleon/engine.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'kameleon/recipe'
|
2
2
|
require 'kameleon/context'
|
3
3
|
require 'kameleon/persistent_cache'
|
4
|
+
# require 'pry'
|
4
5
|
module Kameleon
|
5
6
|
|
6
7
|
class Engine
|
@@ -38,7 +39,7 @@ module Kameleon
|
|
38
39
|
@cache.name = @recipe.name
|
39
40
|
@cache.mode = @options[:cache] ? :build : :from
|
40
41
|
@cache.cache_path = @options[:from_cache]
|
41
|
-
@cache.recipe_files = @recipe.files # I'm passing the Pathname objects
|
42
|
+
@cache.recipe_files = @recipe.files + @recipe.base_recipes_files# I'm passing the Pathname objects
|
42
43
|
@cache.recipe_path = @recipe.path
|
43
44
|
|
44
45
|
if @recipe.global["in_context"]["proxy_cache"].nil? then
|
@@ -151,6 +152,7 @@ module Kameleon
|
|
151
152
|
def do_steps(section_name)
|
152
153
|
section = @recipe.sections.fetch(section_name)
|
153
154
|
section.sequence do |macrostep|
|
155
|
+
macrostep_time = Time.now.to_i
|
154
156
|
if @cache then
|
155
157
|
Kameleon.ui.info("Starting proxy cache server for macrostep '#{macrostep.name}'...")
|
156
158
|
# the following function start a polipo web proxy and stops a previous run
|
@@ -186,6 +188,7 @@ module Kameleon
|
|
186
188
|
end
|
187
189
|
end
|
188
190
|
end
|
191
|
+
Kameleon.ui.info("Step #{macrostep.name} took: #{Time.now.to_i-macrostep_time} secs")
|
189
192
|
end
|
190
193
|
@cleaned_sections.push(section.name)
|
191
194
|
end
|
@@ -235,7 +238,7 @@ module Kameleon
|
|
235
238
|
end
|
236
239
|
first_context = map[first_cmd.key]
|
237
240
|
second_context = map[second_cmd.key]
|
238
|
-
@cache.
|
241
|
+
@cache.cache_cmd_raw(cmd.raw_cmd_id) if @cache
|
239
242
|
first_context.pipe(first_cmd.value, second_cmd.value, second_context)
|
240
243
|
when "rescue"
|
241
244
|
first_cmd, second_cmd = cmd.value
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'childprocess'
|
2
2
|
require 'singleton'
|
3
3
|
require 'socket'
|
4
|
+
|
4
5
|
module Kameleon
|
5
6
|
#This ruby class will control the execution of Polipo web proxy
|
6
7
|
class Persistent_cache
|
@@ -36,6 +37,7 @@ module Kameleon
|
|
36
37
|
:proxyPort => @polipo_port,
|
37
38
|
:relaxTransparency =>"true",
|
38
39
|
:daemonise => false,
|
40
|
+
:proxyAddress => "0.0.0.0",
|
39
41
|
:logFile => File.join(Kameleon.env.build_path, 'polipo.log')
|
40
42
|
}
|
41
43
|
|
@@ -45,10 +47,9 @@ module Kameleon
|
|
45
47
|
@cache_dir = Kameleon.env.cache_path
|
46
48
|
@polipo_path = nil
|
47
49
|
@cwd = ""
|
48
|
-
#structure {:cmd => "cmd", :stdout_filename => "file_name"}
|
49
50
|
@cmd_cached = []
|
50
51
|
@cache_path = ""
|
51
|
-
@
|
52
|
+
@current_raw_cmd = nil
|
52
53
|
@current_step_dir = nil
|
53
54
|
@recipe_file = nil
|
54
55
|
@steps_files = []
|
@@ -93,7 +94,7 @@ module Kameleon
|
|
93
94
|
|
94
95
|
def create_cache_directory(step_name)
|
95
96
|
Kameleon.ui.debug("Creating cache directory #{step_name} for Polipo")
|
96
|
-
directory_name = File.join(@cache_dir,"#{step_name}")
|
97
|
+
directory_name = File.join(@cache_dir,"DATA","#{step_name}")
|
97
98
|
FileUtils.mkdir_p directory_name
|
98
99
|
directory_name
|
99
100
|
end
|
@@ -135,10 +136,9 @@ module Kameleon
|
|
135
136
|
end
|
136
137
|
|
137
138
|
|
138
|
-
# This function caches the command
|
139
|
-
|
140
|
-
|
141
|
-
@current_cmd_id = cmd_identifier
|
139
|
+
# This function caches the raw command specified in the recipe
|
140
|
+
def cache_cmd_raw(raw_cmd_id)
|
141
|
+
@current_raw_cmd = raw_cmd_id
|
142
142
|
return true
|
143
143
|
end
|
144
144
|
|
@@ -147,16 +147,18 @@ module Kameleon
|
|
147
147
|
Kameleon.ui.debug("command: cp #{file_path} #{@cwd}/cache/files/")
|
148
148
|
FileUtils.mkdir_p @current_step_dir + "/data/"
|
149
149
|
FileUtils.cp file_path, @current_step_dir + "/data/"
|
150
|
-
@cmd_cached.push({:
|
151
|
-
:cmd => cmd ,
|
150
|
+
@cmd_cached.push({:raw_cmd_id => @current_raw_cmd,
|
152
151
|
:stdout_filename => File.basename(file_path)})
|
153
152
|
end
|
154
153
|
|
155
154
|
def get_cache_cmd(cmd)
|
156
155
|
return false if @mode == :build
|
157
|
-
cache_line = @cmd_cached.select{ |reg|
|
158
|
-
|
159
|
-
|
156
|
+
cache_line = @cmd_cached.select{ |reg| reg[:raw_cmd_id] == @current_raw_cmd }.first
|
157
|
+
if cache_line.nil? then
|
158
|
+
# This error can be due to the improper format of the file cache_cmd_index
|
159
|
+
Kameleon.ui.error("Persistent cache missing file")
|
160
|
+
raise BuildError, "Failed to use persistent cache"
|
161
|
+
end
|
160
162
|
return File.new("#{@current_step_dir}/data/#{cache_line[:stdout_filename]}","r")
|
161
163
|
end
|
162
164
|
|
@@ -164,22 +166,34 @@ module Kameleon
|
|
164
166
|
@polipo_process.stop
|
165
167
|
Kameleon.ui.info("Stopping web proxy polipo")
|
166
168
|
Kameleon.ui.info("Finishing persistent cache with last files")
|
167
|
-
|
169
|
+
cache_metadata_dir = File.join(@cache_dir,"metadata")
|
168
170
|
if @mode == :build then
|
169
|
-
File.open("#{
|
171
|
+
File.open("#{cache_metadata_dir}/cache_cmd_index",'w+') do |f|
|
170
172
|
f.puts(@cmd_cached.to_yaml)
|
171
173
|
end
|
172
174
|
|
173
175
|
unless @recipe_files.empty?
|
174
|
-
recipe_dir = Pathname.new(common_prefix(@recipe_files))
|
175
176
|
all_files = @recipe_files.push(@recipe_path)
|
176
|
-
|
177
|
+
recipe_dir = Pathname.new(common_prefix(all_files))
|
178
|
+
cached_recipe_dir = Pathname.new(File.join(@cache_dir,"recipe"))
|
179
|
+
# binding.pry
|
180
|
+
Kameleon::Utils.copy_files(recipe_dir, cached_recipe_dir, all_files)
|
177
181
|
end
|
178
182
|
## Saving metadata information
|
179
183
|
Kameleon.ui.info("Caching recipe")
|
180
|
-
|
181
|
-
|
184
|
+
|
185
|
+
File.open("#{cache_metadata_dir}/header",'w+') do |f|
|
186
|
+
f.puts({:recipe_path => @recipe_path.basename.to_s}.to_yaml)
|
187
|
+
f.puts({:date => Time.now.to_i}.to_yaml)
|
188
|
+
end
|
189
|
+
|
190
|
+
#Removing empty directories
|
191
|
+
cache_data_dir = File.join(@cache_dir,"DATA")
|
192
|
+
Dir.foreach(cache_data_dir) do |item|
|
193
|
+
dir_temp = File.join(cache_data_dir,item)
|
194
|
+
Dir.delete(dir_temp) if File.stat(dir_temp).nlink == 2
|
182
195
|
end
|
196
|
+
|
183
197
|
pack
|
184
198
|
end
|
185
199
|
end
|
@@ -193,20 +207,24 @@ module Kameleon
|
|
193
207
|
raise BuildError, "Failed to untar the persistent cache file"
|
194
208
|
end
|
195
209
|
## We have to load the file
|
196
|
-
|
210
|
+
metadata_dir = File.join(@cache_dir,"metadata")
|
211
|
+
@cmd_cached = YAML.load(File.read("#{metadata_dir}/cache_cmd_index"))
|
197
212
|
end
|
198
213
|
@activated = true
|
199
|
-
|
200
|
-
FileUtils.mkdir_p @
|
214
|
+
#@cached_recipe_dir = @cache_dir
|
215
|
+
FileUtils.mkdir_p @cache_dir
|
216
|
+
# Creating sctructure of the cache
|
217
|
+
FileUtils.mkdir_p File.join(@cache_dir,"recipe")
|
218
|
+
FileUtils.mkdir_p File.join(@cache_dir,"DATA")
|
219
|
+
FileUtils.mkdir_p File.join(@cache_dir,"metadata")
|
201
220
|
end
|
202
221
|
|
203
222
|
def get_recipe()
|
204
223
|
cached_recipe=Dir.mktmpdir("cache")
|
205
|
-
|
206
|
-
execute("tar","-xf #{@cache_path} -C #{cached_recipe} .")
|
224
|
+
execute("tar","-xf #{@cache_path} -C #{cached_recipe} ./recipe ./metadata")
|
207
225
|
Kameleon.ui.info("Getting cached recipe")
|
208
|
-
recipe_header = YAML::load(File.read("
|
209
|
-
recipe_file = recipe_header[:recipe_path]
|
226
|
+
recipe_header = YAML::load(File.read(File.join(cached_recipe,"metadata","header")))
|
227
|
+
recipe_file = File.join(cached_recipe,"recipe",recipe_header[:recipe_path])
|
210
228
|
return recipe_file
|
211
229
|
end
|
212
230
|
|
data/lib/kameleon/recipe.rb
CHANGED
@@ -327,13 +327,6 @@ module Kameleon
|
|
327
327
|
consistency_check
|
328
328
|
resolve_checkpoint unless @checkpoint.nil?
|
329
329
|
|
330
|
-
Kameleon.ui.info("Resolving variables")
|
331
|
-
@sections.values.each do |section|
|
332
|
-
section.macrosteps.each do |macrostep|
|
333
|
-
macrostep.resolve_variables!(@global)
|
334
|
-
end
|
335
|
-
end
|
336
|
-
|
337
330
|
@sections.values.each do |section|
|
338
331
|
section.macrosteps.each do |macrostep|
|
339
332
|
# First pass : resolve aliases
|
@@ -347,6 +340,18 @@ module Kameleon
|
|
347
340
|
# flatten for multiple-command alias + variables
|
348
341
|
Kameleon.ui.debug("Resolving check statements for macrostep '#{macrostep.name}'")
|
349
342
|
macrostep.microsteps.each { |microstep| microstep.commands.flatten! }
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
Kameleon.ui.info("Resolving variables")
|
347
|
+
@sections.values.each do |section|
|
348
|
+
section.macrosteps.each do |macrostep|
|
349
|
+
macrostep.resolve_variables!(@global)
|
350
|
+
end
|
351
|
+
end
|
352
|
+
|
353
|
+
@sections.values.each do |section|
|
354
|
+
section.macrosteps.each do |macrostep|
|
350
355
|
# Second pass : resolve variables + clean/init hooks
|
351
356
|
macrostep.microsteps.each do |microstep|
|
352
357
|
microstep.commands.map! do |cmd|
|
data/lib/kameleon/step.rb
CHANGED
@@ -3,11 +3,13 @@ module Kameleon
|
|
3
3
|
class Command
|
4
4
|
|
5
5
|
attr_accessor :string_cmd
|
6
|
+
attr_accessor :raw_cmd_id
|
6
7
|
attr_accessor :microstep_name
|
7
8
|
attr_accessor :identifier
|
8
9
|
|
9
10
|
def initialize(yaml_cmd, microstep_name)
|
10
11
|
@string_cmd = YAML.dump(yaml_cmd).gsub("---", "").strip
|
12
|
+
@raw_cmd_id = Digest::SHA1.hexdigest(YAML.dump(yaml_cmd).gsub("---", "").strip)
|
11
13
|
@microstep_name = microstep_name
|
12
14
|
@identifier = nil
|
13
15
|
end
|
@@ -50,7 +50,10 @@ global:
|
|
50
50
|
- $$distrib
|
51
51
|
- "fedora"
|
52
52
|
|
53
|
-
|
53
|
+
# SELinux configuration
|
54
|
+
selinux: permissive ## Can take one of these three values: enforcing, permissive or disabled
|
55
|
+
selinuxtype: targeted # Possible values are: strict, targeted
|
56
|
+
|
54
57
|
ssh_config_file: $$kameleon_cwd/ssh_config
|
55
58
|
out_context:
|
56
59
|
cmd: ssh -F $$ssh_config_file $${kameleon_recipe_name} -t /bin/bash
|
@@ -58,7 +61,7 @@ global:
|
|
58
61
|
proxy_cache: 10.0.2.2
|
59
62
|
|
60
63
|
in_context:
|
61
|
-
cmd: ssh -F $$ssh_config_file $${kameleon_recipe_name} -t
|
64
|
+
cmd: ssh -F $$ssh_config_file $${kameleon_recipe_name} -t /bin/bash
|
62
65
|
workdir: /root/kameleon_workdir
|
63
66
|
proxy_cache: 10.0.2.2
|
64
67
|
|
@@ -67,12 +70,14 @@ bootstrap:
|
|
67
70
|
- prepare_qemu
|
68
71
|
- start_qemu
|
69
72
|
- install_requirements:
|
70
|
-
- packages: parted e2fsprogs yum rpm lynx
|
71
|
-
- initialize_disk
|
73
|
+
- packages: parted e2fsprogs yum rpm lynx extlinux
|
74
|
+
- initialize_disk
|
72
75
|
- yum_bootstrap:
|
73
76
|
- mirror_packages_url: http://mirrors.kernel.org/$$distrib/$$release/os/$$arch/Packages/
|
74
|
-
- include_pkgs:
|
75
|
-
|
77
|
+
- include_pkgs: >
|
78
|
+
findutils yum util-linux dhclient vim-minimal net-tools openssh-server
|
79
|
+
kernel kernel-devel acpid
|
80
|
+
- switch_context_qemu
|
76
81
|
|
77
82
|
#== Install and configuration steps
|
78
83
|
setup:
|
@@ -81,9 +86,13 @@ setup:
|
|
81
86
|
- minimal_install
|
82
87
|
- install_software:
|
83
88
|
- packages: >
|
84
|
-
|
85
|
-
|
86
|
-
|
89
|
+
syslinux-extlinux kbd sudo openssh-clients ntp ntpdate
|
90
|
+
rsync bridge-utils bzip2 cronie cronie-anacron crontabs
|
91
|
+
dash dhclient dhcp-common dracut dracut-kernel file fuse gnupg2
|
92
|
+
iptables-ipv6 libuser logrotate m4 openssh-server passwd
|
93
|
+
pciutils-libs rsyslog dbus system-config-firewall-base which
|
94
|
+
findutils yum util-linux vim-minimal net-tools openssh-server
|
95
|
+
kernel kernel-devel acpid
|
87
96
|
- install_bootloader
|
88
97
|
- configure_system:
|
89
98
|
- locales: POSIX C en_US fr_FR de_DE
|
@@ -50,7 +50,10 @@ global:
|
|
50
50
|
- $$distrib
|
51
51
|
- "fedora"
|
52
52
|
|
53
|
-
|
53
|
+
# SELinux configuration
|
54
|
+
selinux: permissive ## Can take one of these three values: enforcing, permissive or disabled
|
55
|
+
selinuxtype: targeted # Possible values are: strict, targeted
|
56
|
+
|
54
57
|
ssh_config_file: $$kameleon_cwd/ssh_config
|
55
58
|
out_context:
|
56
59
|
cmd: ssh -F $$ssh_config_file $${kameleon_recipe_name} -t /bin/bash
|
@@ -49,7 +49,10 @@ global:
|
|
49
49
|
- $$distrib/$$release
|
50
50
|
- $$distrib
|
51
51
|
|
52
|
-
|
52
|
+
# SELinux configuration
|
53
|
+
selinux: permissive ## Can take one of these three values: enforcing, permissive or disabled
|
54
|
+
selinuxtype: targeted # Possible values are: strict, targeted
|
55
|
+
|
53
56
|
ssh_config_file: $$kameleon_cwd/ssh_config
|
54
57
|
out_context:
|
55
58
|
cmd: ssh -F $$ssh_config_file $${kameleon_recipe_name} -t /bin/bash
|
@@ -0,0 +1,65 @@
|
|
1
|
+
- fix_yum:
|
2
|
+
- check_cmd_out: yum
|
3
|
+
- exec_out: sed -i "s/opts.ssl_verify_host/2/g" /usr/lib/pymodules/python2.7/urlgrabber/grabber.py
|
4
|
+
|
5
|
+
- init_rpm_db:
|
6
|
+
- check_cmd_out: rpm
|
7
|
+
- exec_out: mkdir -p $$rootfs/var/lib/rpm
|
8
|
+
- exec_out: rpm --root $$rootfs --initdb
|
9
|
+
|
10
|
+
- fetch_release_package:
|
11
|
+
- check_cmd_out: lynx
|
12
|
+
- exec_out: RELEASE_PACKAGE_URL=$(lynx $$mirror_packages_url -dump -listonly -nonumbers | grep $${distrib}-release | head -1)
|
13
|
+
- exec_out: |
|
14
|
+
if [ -z "${RELEASE_PACKAGE_URL-unset}" ]; then
|
15
|
+
fail "$${distrib}-release package not found!"
|
16
|
+
fi
|
17
|
+
|
18
|
+
- install_distrib_release:
|
19
|
+
- download_file_out:
|
20
|
+
- $RELEASE_PACKAGE_URL
|
21
|
+
- $KAMELEON_WORKDIR/$${distrib}-release.rpm
|
22
|
+
- exec_out: rpm --root $$rootfs -ivh --force-debian --nodeps $KAMELEON_WORKDIR/$${distrib}-release.rpm
|
23
|
+
|
24
|
+
- install_yum:
|
25
|
+
- exec_out: ln -sf $$rootfs/etc/pki/ /etc/pki
|
26
|
+
- exec_out: yum --installroot $$rootfs -y install yum
|
27
|
+
- exec_out: echo $${release} > $$rootfs/etc/yum/vars/releasever
|
28
|
+
|
29
|
+
- mount_chroot:
|
30
|
+
- exec_out: mount -o bind /dev $$rootfs/dev
|
31
|
+
- exec_out: mount -o bind /dev/pts $$rootfs/dev/pts
|
32
|
+
- exec_out: mount -t proc /proc $$rootfs/proc
|
33
|
+
- exec_out: mount -t sysfs /sys $$rootfs/sys
|
34
|
+
- exec_out: cp /etc/resolv.conf $$rootfs/etc/resolv.conf
|
35
|
+
|
36
|
+
- install_packages:
|
37
|
+
- exec_out: chroot $$rootfs yum install --releasever=$$release -y $$include_pkgs
|
38
|
+
|
39
|
+
- enable_services:
|
40
|
+
- exec_out: chroot $$rootfs chkconfig network on
|
41
|
+
- exec_out: chroot $$rootfs chkconfig sshd on
|
42
|
+
|
43
|
+
- set_interface:
|
44
|
+
- write_out:
|
45
|
+
- $$rootfs/etc/sysconfig/network-scripts/ifcfg-eth0
|
46
|
+
- |
|
47
|
+
DEVICE=eth0
|
48
|
+
BOOTPROTO=dhcp
|
49
|
+
ONBOOT=yes
|
50
|
+
HOSTNAME=$$hostname
|
51
|
+
NM_CONTROLLED=no
|
52
|
+
TYPE=Ethernet
|
53
|
+
- write_out:
|
54
|
+
- $$rootfs/etc/sysconfig/network
|
55
|
+
- |
|
56
|
+
NETWORKING=yes
|
57
|
+
HOSTNAME=$$hostname
|
58
|
+
|
59
|
+
- umount_chroot:
|
60
|
+
- on_clean:
|
61
|
+
- umount_out: $$rootfs/sys
|
62
|
+
- umount_out: $$rootfs/proc
|
63
|
+
- umount_out: $$rootfs/dev/pts
|
64
|
+
- umount_out: $$rootfs/dev
|
65
|
+
- exec_out: rm -f $$rootfs/etc/resolv.conf
|
@@ -22,6 +22,7 @@
|
|
22
22
|
-cdrom $$kameleon_cwd/boot2kameleon.iso \
|
23
23
|
-drive file="$$qemu_image_disk",cache=unsafe,media=disk,if=virtio,id=drive0 \
|
24
24
|
-smp $${qemu_cpu} \
|
25
|
+
-cpu host \
|
25
26
|
-m $$qemu_memory_size \
|
26
27
|
-rtc base=localtime \
|
27
28
|
-net nic,model=virtio -net user \
|
@@ -31,13 +32,14 @@
|
|
31
32
|
-daemonize -vnc :1 $LOADVM
|
32
33
|
- exec_local: |
|
33
34
|
NEXT_WAIT_TIME=0
|
34
|
-
|
35
|
+
SSH_AVAILABLE=0
|
36
|
+
until ssh-keyscan -T 1 -4 -p $$qemu_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null && SSH_AVAILABLE=1 || [ $NEXT_WAIT_TIME -eq $$boot_timeout ];
|
35
37
|
do
|
36
38
|
echo -en "\rWaiting for SSH to become available for out_context...($(( $$boot_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
|
37
39
|
done
|
38
40
|
echo ""
|
39
41
|
- rescue:
|
40
|
-
- exec_local:
|
42
|
+
- exec_local: test $SSH_AVAILABLE -eq 1
|
41
43
|
- breakpoint: Failed to connect to VM via SSH. Please verify the VM successfully booted with a vnc client.
|
42
44
|
|
43
45
|
- force_shutdown_qemu_vm:
|