kameleon-builder 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. data/.editorconfig +0 -0
  2. data/.env +2 -6
  3. data/CHANGELOG.rst +74 -1
  4. data/Gemfile +20 -2
  5. data/README.rst +35 -25
  6. data/Thorfile +29 -0
  7. data/contrib/kameleon_bashrc.sh +61 -0
  8. data/contrib/polipo_env.sh +3 -2
  9. data/kameleon-builder.gemspec +3 -10
  10. data/lib/kameleon.rb +10 -14
  11. data/lib/kameleon/cli.rb +92 -105
  12. data/lib/kameleon/context.rb +76 -43
  13. data/lib/kameleon/engine.rb +147 -103
  14. data/lib/kameleon/environment.rb +10 -5
  15. data/lib/kameleon/error.rb +1 -32
  16. data/lib/kameleon/persistent_cache.rb +127 -29
  17. data/lib/kameleon/recipe.rb +63 -106
  18. data/lib/kameleon/shell.rb +32 -17
  19. data/lib/kameleon/step.rb +18 -1
  20. data/lib/kameleon/ui.rb +141 -0
  21. data/lib/kameleon/utils.rb +9 -0
  22. data/templates/{debian7-chroot.yaml → chroot/debian7-amd64.yaml} +29 -21
  23. data/templates/{docker-debian7.yaml → docker/debian7.yaml} +5 -5
  24. data/templates/extend.erb +2 -2
  25. data/templates/{debian7-g5k.yaml → grid5000/debian7.yaml} +1 -1
  26. data/templates/{archlinux-desktop.yaml → qemu/archlinux-desktop-i686.yaml} +2 -2
  27. data/templates/qemu/archlinux-desktop-x86_64.yaml +25 -0
  28. data/templates/qemu/archlinux-i686.yaml +25 -0
  29. data/templates/{archlinux.yaml → qemu/archlinux-x86_64.yaml} +37 -34
  30. data/templates/qemu/centos6.5-x86_64.yaml +113 -0
  31. data/templates/qemu/centos7-x86_64.yaml +119 -0
  32. data/templates/{debian7.yaml → qemu/debian7-amd64.yaml} +45 -40
  33. data/templates/{debian7-desktop.yaml → qemu/debian7-desktop-amd64.yaml} +2 -3
  34. data/templates/{debian7-kameleon.yaml → qemu/debian7-kameleon-amd64.yaml} +3 -6
  35. data/templates/{debian7-oar-dev.yaml → qemu/debian7-oar-amd64.yaml} +2 -2
  36. data/templates/qemu/debian8-amd64.yaml +25 -0
  37. data/templates/{fedora20-desktop.yaml → qemu/fedora20-desktop-x86_64.yaml} +2 -2
  38. data/templates/qemu/fedora20-x86_64.yaml +116 -0
  39. data/templates/{ubuntu-12.04.yaml → qemu/ubuntu-12.04-amd64.yaml} +42 -38
  40. data/templates/{ubuntu-12.04-desktop.yaml → qemu/ubuntu-12.04-desktop-amd64.yaml} +3 -3
  41. data/templates/{ubuntu-14.04.yaml → qemu/ubuntu-14.04-amd64.yaml} +2 -2
  42. data/templates/{ubuntu-14.04-desktop.yaml → qemu/ubuntu-14.04-desktop-amd64.yaml} +2 -2
  43. data/templates/steps/aliases/defaults.yaml +19 -13
  44. data/templates/steps/bootstrap/archlinux/arch_bootstrap.yaml +11 -19
  45. data/templates/steps/bootstrap/debian/debootstrap.yaml +10 -11
  46. data/templates/steps/bootstrap/debian/debootstrap_arm.yaml +11 -19
  47. data/templates/steps/bootstrap/fedora/init_pxeboot.yaml +13 -0
  48. data/templates/steps/bootstrap/fedora/yum_bootstrap.yaml +45 -0
  49. data/templates/steps/bootstrap/initialize_disk.yaml +16 -0
  50. data/templates/steps/bootstrap/initialize_disk_chroot.yaml +10 -14
  51. data/templates/steps/bootstrap/install_requirements.yaml +3 -0
  52. data/templates/steps/bootstrap/prepare_docker.yaml +7 -7
  53. data/templates/steps/bootstrap/prepare_qemu.yaml +20 -26
  54. data/templates/steps/bootstrap/prepare_virtualbox.yaml +63 -0
  55. data/templates/steps/bootstrap/start_chroot.yaml +2 -13
  56. data/templates/steps/bootstrap/start_qemu.yaml +50 -53
  57. data/templates/steps/bootstrap/start_virtualbox.yaml +37 -0
  58. data/templates/steps/bootstrap/switch_context_qemu.yaml +64 -0
  59. data/templates/steps/bootstrap/switch_context_virtualbox.yaml +66 -0
  60. data/templates/steps/breakpoint.yaml +2 -1
  61. data/templates/steps/checkpoints/docker.yaml +14 -11
  62. data/templates/steps/checkpoints/qcow2.yaml +26 -24
  63. data/templates/steps/checkpoints/qemu.yaml +30 -36
  64. data/templates/steps/checkpoints/virtualbox.yaml +21 -0
  65. data/templates/steps/disable_checkpoint.yaml +3 -0
  66. data/templates/steps/enable_checkpoint.yaml +5 -0
  67. data/templates/steps/export/qemu_save_appliance.yaml +52 -0
  68. data/templates/steps/export/virtualbox_save_appliance.yaml +67 -0
  69. data/templates/steps/setup/archlinux/install_bootloader.yaml +23 -0
  70. data/templates/steps/setup/centos/6.5/configure_network.yaml +31 -0
  71. data/templates/steps/setup/centos/6.5/configure_system.yaml +27 -0
  72. data/templates/steps/setup/debian/configure_apt.yaml +1 -6
  73. data/templates/steps/setup/debian/configure_kernel.yaml +0 -5
  74. data/templates/steps/setup/debian/install_bootloader.yaml +36 -0
  75. data/templates/steps/setup/debian/setup_vagrant_box.yaml +48 -18
  76. data/templates/steps/setup/debian/upgrade_system.yaml +2 -7
  77. data/templates/steps/setup/fedora/configure_kernel.yaml +9 -0
  78. data/templates/steps/setup/fedora/configure_keyboard.yaml +12 -0
  79. data/templates/steps/setup/fedora/configure_network.yaml +9 -1
  80. data/templates/steps/setup/fedora/configure_system.yaml +20 -45
  81. data/templates/steps/setup/fedora/install_bootloader.yaml +58 -0
  82. data/templates/steps/setup/fedora/minimal_install.yaml +3 -0
  83. data/templates/steps/setup/fedora/update_system.yaml +13 -5
  84. data/templates/steps/setup/ubuntu/configure_apt.yaml +4 -9
  85. data/templates/vagrant/debian7-amd64.yaml +130 -0
  86. data/templates/virtualbox/archlinux-desktop-i686.yaml +25 -0
  87. data/templates/virtualbox/archlinux-desktop-x86_64.yaml +28 -0
  88. data/templates/virtualbox/archlinux-i686.yaml +28 -0
  89. data/templates/virtualbox/archlinux-x86_64.yaml +109 -0
  90. data/templates/virtualbox/centos6.5-i386.yaml +39 -0
  91. data/templates/virtualbox/centos6.5-x86_64.yaml +111 -0
  92. data/templates/virtualbox/centos7-x86_64.yaml +116 -0
  93. data/{docs/source/debian7.yaml → templates/virtualbox/debian7-amd64.yaml} +53 -52
  94. data/templates/virtualbox/debian7-desktop-amd64.yaml +25 -0
  95. data/templates/{fedora-rawhide.yaml → virtualbox/debian7-i386.yaml} +12 -11
  96. data/templates/virtualbox/debian7-kameleon-amd64.yaml +38 -0
  97. data/templates/virtualbox/debian7-oar-amd64.yaml +51 -0
  98. data/templates/{debian-testing.yaml → virtualbox/debian8-amd64.yaml} +3 -3
  99. data/templates/virtualbox/debian8-i386.yaml +31 -0
  100. data/templates/virtualbox/fedora20-x86_64.yaml +116 -0
  101. data/templates/virtualbox/ubuntu-12.04-amd64.yaml +128 -0
  102. data/templates/virtualbox/ubuntu-12.04-desktop-amd64.yaml +25 -0
  103. data/templates/virtualbox/ubuntu-14.04-amd64.yaml +25 -0
  104. data/templates/virtualbox/ubuntu-14.04-desktop-amd64.yaml +27 -0
  105. data/version.txt +1 -1
  106. metadata +67 -212
  107. data/Rakefile +0 -24
  108. data/docs/.gitignore +0 -1
  109. data/docs/Makefile +0 -181
  110. data/docs/README.md +0 -17
  111. data/docs/make.bat +0 -242
  112. data/docs/source/_static/.gitignore +0 -0
  113. data/docs/source/_static/centos.png +0 -0
  114. data/docs/source/_static/debian.png +0 -0
  115. data/docs/source/_static/kameleon-logo.png +0 -0
  116. data/docs/source/_static/kameleon-logo.xcf +0 -0
  117. data/docs/source/_static/kameleon-long.png +0 -0
  118. data/docs/source/_static/ubuntu.png +0 -0
  119. data/docs/source/_themes/sphinx_rtd_theme/__init__.py +0 -17
  120. data/docs/source/_themes/sphinx_rtd_theme/breadcrumbs.html +0 -19
  121. data/docs/source/_themes/sphinx_rtd_theme/footer.html +0 -32
  122. data/docs/source/_themes/sphinx_rtd_theme/layout.html +0 -160
  123. data/docs/source/_themes/sphinx_rtd_theme/layout_old.html +0 -205
  124. data/docs/source/_themes/sphinx_rtd_theme/search.html +0 -50
  125. data/docs/source/_themes/sphinx_rtd_theme/searchbox.html +0 -7
  126. data/docs/source/_themes/sphinx_rtd_theme/static/css/badge_only.css +0 -1
  127. data/docs/source/_themes/sphinx_rtd_theme/static/css/theme.css +0 -4
  128. data/docs/source/_themes/sphinx_rtd_theme/static/fonts/FontAwesome.otf +0 -0
  129. data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.eot +0 -0
  130. data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.svg +0 -414
  131. data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.ttf +0 -0
  132. data/docs/source/_themes/sphinx_rtd_theme/static/fonts/fontawesome-webfont.woff +0 -0
  133. data/docs/source/_themes/sphinx_rtd_theme/static/js/theme.js +0 -47
  134. data/docs/source/_themes/sphinx_rtd_theme/theme.conf +0 -8
  135. data/docs/source/_themes/sphinx_rtd_theme/versions.html +0 -37
  136. data/docs/source/aliases.rst +0 -31
  137. data/docs/source/atlas_debian_g5k.yaml +0 -36
  138. data/docs/source/checkpoint.rst +0 -30
  139. data/docs/source/commands.rst +0 -63
  140. data/docs/source/conf.py +0 -262
  141. data/docs/source/context.rst +0 -47
  142. data/docs/source/debian_customized.yaml +0 -28
  143. data/docs/source/debian_customized_g5k.yaml +0 -21
  144. data/docs/source/faq.rst +0 -43
  145. data/docs/source/getting_started.rst +0 -260
  146. data/docs/source/grid5000_tutorial.rst +0 -525
  147. data/docs/source/index.rst +0 -53
  148. data/docs/source/install_atlas.yaml +0 -25
  149. data/docs/source/install_hpl.yaml +0 -24
  150. data/docs/source/installation.rst +0 -51
  151. data/docs/source/persistent_cache.rst +0 -34
  152. data/docs/source/recipe.rst +0 -177
  153. data/docs/source/tau_install.yaml +0 -19
  154. data/docs/source/tau_install_g5k.yaml +0 -25
  155. data/docs/source/use_cases.rst +0 -93
  156. data/docs/source/workspace.rst +0 -13
  157. data/lib/kameleon/logger.rb +0 -56
  158. data/omnibus/.gitignore +0 -11
  159. data/omnibus/.kitchen.yml +0 -25
  160. data/omnibus/Berksfile +0 -9
  161. data/omnibus/Berksfile.lock +0 -25
  162. data/omnibus/Gemfile +0 -12
  163. data/omnibus/README.md +0 -94
  164. data/omnibus/config/projects/kameleon.rb +0 -23
  165. data/omnibus/config/software/kameleon.rb +0 -24
  166. data/omnibus/config/software/polipo.rb +0 -30
  167. data/omnibus/config/software/ruby.rb +0 -158
  168. data/omnibus/files/mac_dmg/Resources/background.png +0 -0
  169. data/omnibus/files/mac_dmg/Resources/icon.png +0 -0
  170. data/omnibus/files/mac_pkg/Resources/background.png +0 -0
  171. data/omnibus/files/mac_pkg/Resources/license.html +0 -1
  172. data/omnibus/files/mac_pkg/Resources/welcome.html +0 -9
  173. data/omnibus/omnibus.rb +0 -27
  174. data/omnibus/package-scripts/kameleon/makeselfinst +0 -27
  175. data/omnibus/package-scripts/kameleon/postrm +0 -9
  176. data/templates/fedora20.yaml +0 -105
  177. data/templates/steps/bootstrap/archlinux/install_bootloader.yaml +0 -46
  178. data/templates/steps/bootstrap/archlinux/populate_disk.yaml +0 -39
  179. data/templates/steps/bootstrap/fedora/liveos_bootstrap.yaml +0 -123
  180. data/templates/steps/bootstrap/initialize_disk_qemu.yaml +0 -72
  181. data/templates/steps/bootstrap/install_bootloader.yaml +0 -42
  182. data/templates/steps/bootstrap/ubuntu/debootstrap.yaml +0 -27
  183. data/templates/steps/export/save_appliance.yaml +0 -58
  184. data/templates/steps/export/save_vagrant_box.yaml +0 -29
  185. data/templates/vagrant-debian7.yaml +0 -31
@@ -0,0 +1,63 @@
1
+ - insecure_ssh_key: $$kameleon_cwd/insecure_ssh_key
2
+
3
+ - download_boot2kameleon_iso:
4
+ - download_file_local:
5
+ - $$boot2kameleon_url
6
+ - $$kameleon_cwd/boot2kameleon.iso
7
+
8
+ - create_vdi_disk:
9
+ - exec_local: rm -f $$virtualbox_image_disk
10
+ - exec_local: VBoxManage createhd --filename $$virtualbox_image_disk --size $$virtualbox_image_size 2>&1
11
+
12
+ - register_vm:
13
+ - exec_local: echo "Creating virtual machine"
14
+ - exec_local: VBoxManage createvm --name $$virtualbox_vmid --register
15
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --ostype $$virtualbox_os_type
16
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --boot1 dvd
17
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --boot2 disk
18
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --memory $$virtualbox_memory_size
19
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --acpi on
20
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --nic1 nat --nictype1 82540EM --cableconnected1 on
21
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --natpf1 guestssh,tcp,,$$virtualbox_ssh_port,,22
22
+ - exec_local: VBoxManage storagectl $$virtualbox_vmid --name "IDE Controller" --add ide
23
+ - exec_local: |
24
+ VBoxManage storageattach $$virtualbox_vmid \
25
+ --storagectl "IDE Controller" \
26
+ --port 0 \
27
+ --device 0 \
28
+ --type hdd \
29
+ --medium $$virtualbox_image_disk
30
+ - exec_local: VBoxManage storageattach $$virtualbox_vmid --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium $$kameleon_cwd/boot2kameleon.iso
31
+
32
+ - delete_vm:
33
+ - on_checkpoint: skip
34
+ - on_export_clean:
35
+ - exec_local: |
36
+ if VBoxManage list vms | grep -q $$virtualbox_vmid; then
37
+ echo "Removing the virtualbox vm ($$virtualbox_vmid)..."
38
+ VBoxManage unregistervm --delete $$virtualbox_vmid 2>&1
39
+ fi
40
+
41
+ - configure_ssh_access:
42
+ - download_file_local:
43
+ - $$insecure_ssh_key_url
44
+ - $$insecure_ssh_key
45
+ - exec_local: chmod 600 $$insecure_ssh_key
46
+
47
+ - create_ssh_config:
48
+ - write_local:
49
+ - $$ssh_config_file
50
+ - |
51
+ Host $${kameleon_recipe_name}
52
+ HostName 127.0.0.1
53
+ Port $${virtualbox_ssh_port}
54
+ User root
55
+ IdentityFile $$insecure_ssh_key
56
+ UserKnownHostsFile /dev/null
57
+ StrictHostKeyChecking no
58
+ PasswordAuthentication no
59
+ IdentitiesOnly yes
60
+ LogLevel FATAL
61
+ ForwardAgent yes
62
+ Compression yes
63
+ Protocol 2
@@ -1,13 +1,14 @@
1
1
  # # Bootstrap
2
2
  - mount_chroot:
3
- - on_checkpoint: redo
4
3
  - check_cmd_out: chroot
5
4
  - exec_out: mount -o bind /dev $$rootfs/dev
6
5
  - exec_out: mount -o bind /dev/pts $$rootfs/dev/pts
7
6
  - exec_out: mount -t proc /proc $$rootfs/proc
8
7
  - exec_out: mount -t sysfs /sys $$rootfs/sys
9
8
  - exec_out: test -f $$rootfs/etc/mtab || cat /proc/mounts > $$rootfs/etc/mtab
9
+ - exec_out: cat /etc/resolv.conf > $$rootfs/etc/resolv.conf
10
10
  - on_setup_clean:
11
+ - exec_out: rm -f $$rootfs/etc/resolv.conf
11
12
  - exec_out: echo try umount $$rootfs/sys... ; mountpoint -q $$rootfs/sys && umount -f -l $$rootfs/sys || true
12
13
  - exec_out: echo try umount $$rootfs/proc... ; mountpoint -q $$rootfs/proc && umount -f -l $$rootfs/proc || true
13
14
  - exec_out: echo try umount $$rootfs/dev/pts... ; mountpoint -q $$rootfs/dev/pts && umount -f -l $$rootfs/dev/pts || true
@@ -17,7 +18,6 @@
17
18
  - cpuset_name: kameleon
18
19
 
19
20
  - init_cpuset:
20
- - on_checkpoint: redo
21
21
  - on_setup_init:
22
22
  - exec_in: |
23
23
  if [ ! -f $$cpuset_base_name/cpus ]; then
@@ -32,7 +32,6 @@
32
32
  - exec_in: echo $$ > $$cpuset_base_name/$$cpuset_name/tasks
33
33
 
34
34
  - clean_cpuset:
35
- - on_checkpoint: redo
36
35
  - on_setup_clean:
37
36
  - exec_out: CPUSET_DIR="$$rootfs/$$cpuset_base_name"
38
37
  - exec_out: |
@@ -50,13 +49,3 @@
50
49
  rmdir $CPUSET_DIR/$$cpuset_name
51
50
  fi
52
51
  - exec_out: echo try umount $CPUSET_DIR... ; mountpoint -q $CPUSET_DIR && umount -f -l $CPUSET_DIR || true
53
-
54
- - enable_checkpoint:
55
- - on_checkpoint: redo
56
- - on_setup_init:
57
- - exec_out: touch $$kameleon_cwd/checkpoint_enabled
58
-
59
- - disable_checkpoint:
60
- - on_checkpoint: redo
61
- - on_setup_clean:
62
- - exec_out: rm -f $$kameleon_cwd/checkpoint_enabled
@@ -1,75 +1,72 @@
1
+ - boot_timeout: 30
2
+ - shutdown_timeout: 10
3
+
1
4
  - start_qemu_vm:
2
5
  - on_checkpoint: redo
3
- - check_cmd_out: qemu-system-$$qemu_arch
4
- - exec_out: echo "sync" ; sync
5
- - exec_out: echo "+++ Starting kvm..."
6
- - exec_out: |
6
+ - check_cmd_local: qemu-system-$$qemu_arch
7
+ - exec_local: echo "Starting qemu..."
8
+ - exec_local: |
7
9
  if [ $$qemu_enable_kvm = true ]; then
8
10
  ENABLE_KVM="-enable-kvm"
9
11
  fi
10
- - exec_out: |
12
+ - exec_local: |
11
13
  if [ -f "vm_state_to_load.txt" ]
12
14
  then
13
15
  SAVED_STATE="$(cat vm_state_to_load.txt)"
14
16
  LOADVM="-loadvm $SAVED_STATE"
15
17
  rm -f vm_state_to_load.txt
16
18
  fi
17
- - exec_out: |
18
- nohup qemu-system-$$qemu_arch \
19
- $ENABLE_KVM -no-reboot \
20
- -drive file="$$image_disk",cache=unsafe,media=disk,if=virtio,id=drive0 \
19
+ - exec_local: |
20
+ qemu-system-$$qemu_arch \
21
+ $ENABLE_KVM \
22
+ -cdrom $$kameleon_cwd/boot2kameleon.iso \
23
+ -drive file="$$qemu_image_disk",cache=unsafe,media=disk,if=virtio,id=drive0 \
21
24
  -smp $${qemu_cpu} \
22
25
  -m $$qemu_memory_size \
23
26
  -rtc base=localtime \
24
27
  -net nic,model=virtio -net user \
25
28
  -redir tcp:$${qemu_ssh_port}::22 \
26
- -monitor tcp::$$qemu_monitor_port,server,nowait \
27
- -vnc :1 $LOADVM \
28
- 1>qemu.log 2>&1 & disown
29
- - exec_out: |
30
- echo -n "Waiting for SSH to become available"
31
- until ssh-keyscan -4 -p $$qemu_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null
29
+ -monitor unix:$$qemu_monitor_socket,server,nowait \
30
+ -pidfile $$qemu_pidfile \
31
+ -daemonize -vnc :1 $LOADVM
32
+ - exec_local: |
33
+ NEXT_WAIT_TIME=0
34
+ until ssh-keyscan -T 1 -4 -p $$qemu_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null || [ $NEXT_WAIT_TIME -eq $$boot_timeout ];
32
35
  do
33
- echo -n "."
34
- sleep 1
36
+ echo -en "\rWaiting for SSH to become available for out_context...($(( $$boot_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
35
37
  done
36
- echo " ~> OK"
37
-
38
- - shutdown_qemu_vm:
39
- - on_checkpoint: redo
40
- - on_setup_clean:
41
- - exec_in: echo "Removing insecure ssh key..."
42
- - exec_in: |
43
- grep -f /root/.ssh/kameleon_insecure_public_key -v /root/.ssh/authorized_keys \
44
- | cat > /root/.ssh/authorized_keys
45
- rm -f /root/.ssh/kameleon_insecure_public_key
46
- - exec_out: echo -n "Shutting down qemu virtual machine"
47
- - exec_in: |
48
- sleep 2 && shutdown -h now &
49
- - exec_out: |
50
- while nc -w 1 -z localhost $$qemu_monitor_port
51
- do
52
- sleep 1
53
- echo -n "."
54
- done
55
- echo " ~> OK"
38
+ echo ""
39
+ - rescue:
40
+ - exec_local: ssh-keyscan -T 1 -4 -p $$qemu_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null
41
+ - breakpoint: Failed to connect to VM via SSH. Please verify the VM successfully booted with a vnc client.
56
42
 
57
43
  - force_shutdown_qemu_vm:
58
44
  - on_checkpoint: redo
59
- - on_export_clean:
60
- - exec_out: |
61
- if nc -w 1 -z localhost $$qemu_monitor_port 2>/dev/null
62
- then
63
- echo "Shutting down qemu virtual machine..."
64
- echo "system_reset" | nc localhost $$qemu_monitor_port 1>/dev/null 2>&1
65
- fi
66
-
67
- - enable_checkpoint:
68
- - on_checkpoint: redo
69
- - on_setup_init:
70
- - exec_out: touch $$kameleon_cwd/checkpoint_enabled
71
-
72
- - disable_checkpoint:
73
- - on_checkpoint: redo
45
+ - check_cmd_local: socat
74
46
  - on_setup_clean:
75
- - exec_out: rm -f $$kameleon_cwd/checkpoint_enabled
47
+ - exec_local: |
48
+ if [ -f $$qemu_pidfile ]; then
49
+ _QEMU_PID=$(cat $$qemu_pidfile)
50
+ if [ -S $$qemu_monitor_socket ]; then
51
+ NEXT_WAIT_TIME=0
52
+ echo system_powerdown | socat - UNIX-CONNECT:$$qemu_monitor_socket
53
+ while ps -p $_QEMU_PID > /dev/null && [ $NEXT_WAIT_TIME -lt $$shutdown_timeout ];
54
+ do
55
+ sleep 1
56
+ echo -en "\rWaiting for qemu virtual machine to shutdown...($(( $$shutdown_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
57
+ done
58
+ fi
59
+ if ps -p $_QEMU_PID > /dev/null; then
60
+ if [ -S $$qemu_monitor_socket ]; then
61
+ echo " ~> Failed"
62
+ fi
63
+ echo "Killing QEMU (pid: $_QEMU_PID)..."
64
+ kill -9 "$_QEMU_PID"
65
+ else
66
+ if [ -S $$qemu_monitor_socket ]; then
67
+ echo " ~> Done"
68
+ fi
69
+ fi
70
+ rm -f $$qemu_pidfile
71
+ fi
72
+ rm -f $$qemu_monitor_socket
@@ -0,0 +1,37 @@
1
+ - boot_timeout: 30
2
+ - shutdown_timeout: 10
3
+
4
+ - start_vm:
5
+ - on_checkpoint: redo
6
+ - exec_local: echo "Starting virtualbox..."
7
+ - exec_local: VBoxManage startvm $$virtualbox_vmid --type headless 2>&1
8
+ - exec_local: |
9
+ NEXT_WAIT_TIME=0
10
+ until ssh-keyscan -T 1 -4 -p $$virtualbox_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null || [ $NEXT_WAIT_TIME -eq $$boot_timeout ];
11
+ do
12
+ echo -en "\rWaiting for SSH to become available for out_context...($(( $$boot_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
13
+ done
14
+ echo ""
15
+ - rescue:
16
+ - exec_local: ssh-keyscan -T 1 -4 -p $$virtualbox_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null
17
+ - breakpoint: Failed to connect to VM via SSH. Please verify the VM successfully booted by looking at the VirtualBox GUI.
18
+
19
+ - shutdown_vm:
20
+ - on_checkpoint: redo
21
+ - on_setup_clean:
22
+ - exec_local: |
23
+ if VBoxManage list runningvms | grep -q $$virtualbox_vmid; then
24
+ VBoxManage controlvm $$virtualbox_vmid acpipowerbutton
25
+ NEXT_WAIT_TIME=0
26
+ until $(VBoxManage showvminfo --machinereadable $$virtualbox_vmid | grep -q ^VMState=.poweroff.) || [ $NEXT_WAIT_TIME -eq $$shutdown_timeout ];
27
+ do
28
+ sleep 1
29
+ echo -en "\rWaiting for machine $$virtualbox_vmid to shutdown...($(( $$shutdown_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
30
+ done
31
+ fi
32
+ - exec_local: |
33
+ if VBoxManage list runningvms | grep -q $$virtualbox_vmid; then
34
+ echo " ~> Failed"
35
+ echo "Forcing shutdown !"
36
+ VBoxManage controlvm $$virtualbox_vmid poweroff
37
+ fi
@@ -0,0 +1,64 @@
1
+ - reboot_timeout: 30
2
+
3
+ - prepare_sshd:
4
+ - exec_out: mkdir -p $$rootfs/root/.ssh/
5
+ - exec_out: cat /root/.ssh/authorized_keys >> $$rootfs/root/.ssh/authorized_keys
6
+ - exec_out: cat /root/.ssh/authorized_keys >> $$rootfs/root/.ssh/authorized_keys_to_remove
7
+ - exec_out: chmod 600 -R $$rootfs/root/.ssh
8
+ - on_setup_clean:
9
+ - exec_in: grep -v -f /root/.ssh/authorized_keys_to_remove /root/.ssh/authorized_keys || true
10
+ - exec_in: rm -f /root/.ssh/authorized_keys_to_remove
11
+
12
+ - mount_chroot:
13
+ - exec_out: mount -o bind /dev $$rootfs/dev
14
+ - exec_out: mount -o bind /dev/pts $$rootfs/dev/pts
15
+ - exec_out: mount -t proc /proc $$rootfs/proc
16
+ - exec_out: mount -t sysfs /sys $$rootfs/sys
17
+
18
+ - create_fstab:
19
+ - write_out:
20
+ - $$rootfs/etc/fstab
21
+ - |
22
+ # /etc/fstab: static file system information.
23
+ #
24
+ # <file system> <mount point> <type> <options> <dump> <pass>
25
+ UUID=`blkid -s UUID -o value $${disk_device}1` / $$filesystem_type errors=remount-ro 0 1
26
+
27
+ - install_initial_bootloader:
28
+ - exec_out: mkdir -p $$rootfs/boot/extlinux
29
+ - exec_out: extlinux --install $$rootfs/boot/extlinux 2>&1
30
+ - exec_out: MBR_PATH="/usr/lib/extlinux/mbr.bin"
31
+ - exec_out: dd if="$MBR_PATH" of="$$disk_device" bs=440 2>&1
32
+ - write_out:
33
+ - $$rootfs/boot/extlinux/extlinux.conf
34
+ - |
35
+ default linux
36
+ timeout 1
37
+
38
+ label linux
39
+ kernel ../`basename $$rootfs/boot/vmlinuz*`
40
+ append initrd=../`basename $$rootfs/boot/init*` root=UUID=`blkid -s UUID -o value $${disk_device}1` ro
41
+
42
+ - umount_all:
43
+ - umount_out: $$rootfs/sys
44
+ - umount_out: $$rootfs/proc
45
+ - umount_out: $$rootfs/dev/pts
46
+ - umount_out: $$rootfs/dev
47
+ - umount_out: $$rootfs
48
+
49
+ - switch_out2in:
50
+ - exec_local: echo "Rebooting qemu vm"
51
+ - exec_local: echo "eject -f ide1-cd0" | socat - UNIX-CONNECT:$$qemu_monitor_socket
52
+ - exec_local: echo system_reset | socat - UNIX-CONNECT:$$qemu_monitor_socket
53
+ - exec_local: |
54
+ NEXT_WAIT_TIME=0
55
+ until ssh-keyscan -T 1 -4 -p $$qemu_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null || [ $NEXT_WAIT_TIME -eq $$reboot_timeout ];
56
+ do
57
+ echo -en "\rWaiting for SSH to become available for in_context...($(( $$reboot_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
58
+ done
59
+ echo ""
60
+ - rescue:
61
+ - exec_local: ssh-keyscan -T 1 -4 -p $$qemu_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null
62
+ - breakpoint: Failed to connect to VM via SSH. Please verify the VM successfully booted by looking at the VirtualBox GUI.
63
+
64
+ - reload_context: out
@@ -0,0 +1,66 @@
1
+ - reboot_timeout: 30
2
+
3
+ - prepare_sshd:
4
+ - exec_out: mkdir -p $$rootfs/root/.ssh/
5
+ - exec_out: cat /root/.ssh/authorized_keys >> $$rootfs/root/.ssh/authorized_keys
6
+ - exec_out: cat /root/.ssh/authorized_keys >> $$rootfs/root/.ssh/authorized_keys_to_remove
7
+ - exec_out: chmod 600 -R $$rootfs/root/.ssh
8
+ - on_setup_clean:
9
+ - exec_in: grep -v -f /root/.ssh/authorized_keys_to_remove /root/.ssh/authorized_keys || true
10
+ - exec_in: rm -f /root/.ssh/authorized_keys_to_remove
11
+
12
+ - mount_chroot:
13
+ - exec_out: mount -o bind /dev $$rootfs/dev
14
+ - exec_out: mount -o bind /dev/pts $$rootfs/dev/pts
15
+ - exec_out: mount -t proc /proc $$rootfs/proc
16
+ - exec_out: mount -t sysfs /sys $$rootfs/sys
17
+
18
+ - create_fstab:
19
+ - write_out:
20
+ - $$rootfs/etc/fstab
21
+ - |
22
+ # /etc/fstab: static file system information.
23
+ #
24
+ # <file system> <mount point> <type> <options> <dump> <pass>
25
+ UUID=`blkid -s UUID -o value $${disk_device}1` / $$filesystem_type errors=remount-ro 0 1
26
+
27
+ - install_initial_bootloader:
28
+ - exec_out: mkdir -p $$rootfs/boot/extlinux
29
+ - exec_out: extlinux --install $$rootfs/boot/extlinux 2>&1
30
+ - exec_out: MBR_PATH="/usr/lib/extlinux/mbr.bin"
31
+ - exec_out: dd if="$MBR_PATH" of="$$disk_device" bs=440 2>&1
32
+ - write_out:
33
+ - $$rootfs/boot/extlinux/extlinux.conf
34
+ - |
35
+ default linux
36
+ timeout 1
37
+
38
+ label linux
39
+ kernel ../`basename $$rootfs/boot/vmlinuz*`
40
+ append initrd=../`basename $$rootfs/boot/init*` root=UUID=`blkid -s UUID -o value $${disk_device}1` ro
41
+
42
+ - umount_all:
43
+ - umount_out: $$rootfs/sys
44
+ - umount_out: $$rootfs/proc
45
+ - umount_out: $$rootfs/dev/pts
46
+ - umount_out: $$rootfs/dev
47
+ - umount_out: $$rootfs
48
+
49
+ - switch_out2in:
50
+ - exec_local: echo "Rebooting virtualbox vm ($$virtualbox_vmid)"
51
+ - exec_local: VBoxManage controlvm $$virtualbox_vmid poweroff 2>&1
52
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --boot1 disk
53
+ - exec_local: VBoxManage modifyvm $$virtualbox_vmid --boot2 dvd
54
+ - exec_local: VBoxManage startvm $$virtualbox_vmid --type headless 2>&1
55
+ - exec_local: |
56
+ NEXT_WAIT_TIME=0
57
+ until ssh-keyscan -T 1 -4 -p $$virtualbox_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null || [ $NEXT_WAIT_TIME -eq $$reboot_timeout ];
58
+ do
59
+ echo -en "\rWaiting for SSH to become available for in_context...($(( $$reboot_timeout - 1 - NEXT_WAIT_TIME++ ))s)"
60
+ done
61
+ echo ""
62
+ - rescue:
63
+ - exec_local: ssh-keyscan -T 1 -4 -p $$virtualbox_ssh_port localhost 2>&1 | grep -e ssh-rsa -e ssh-dsa &> /dev/null
64
+ - breakpoint: Failed to connect to VM via SSH. Please verify the VM successfully booted by looking at the VirtualBox GUI.
65
+
66
+ - reload_context: out
@@ -1,2 +1,3 @@
1
1
  - breakpoint:
2
- - breakpoint: "Kameleon breakpoint"
2
+ - on_checkpoint: redo
3
+ - breakpoint
@@ -1,14 +1,17 @@
1
- create: |
2
- if [ -f MAIN_CONTAINER_ID ] ; then
3
- docker commit $(cat MAIN_CONTAINER_ID) $$docker_image:@microstep_id
4
- fi
1
+ enabled?:
2
+ - exec_local: test -f $KAMELEON_WORKDIR/MAIN_CONTAINER_ID
5
3
 
6
- apply: |
7
- docker tag $$docker_image:@microstep_id $$docker_image:latest
4
+ create:
5
+ - exec_local: docker commit $(cat $KAMELEON_WORKDIR/MAIN_CONTAINER_ID) $$docker_image:@microstep_id
8
6
 
9
- list: |
10
- docker images | grep $$docker_image | awk '{print $2}'
7
+ apply:
8
+ - exec_local: docker tag $$docker_image:@microstep_id $$docker_image:latest
11
9
 
12
- clear: |
13
- docker images | grep $$docker_image | awk '{print $3}' \
14
- | xargs -I {} bash -c "docker rmi {} | cat || true"
10
+ list:
11
+ - exec_local: |
12
+ docker images | grep $$docker_image | awk '{print $2}'
13
+
14
+ clear:
15
+ - exec_local: |
16
+ docker images | grep $$docker_image | awk '{print $3}' \
17
+ | xargs -I {} bash -c "docker rmi {} | cat || true"
@@ -1,6 +1,9 @@
1
- create: |
2
- if [ -f "$$kameleon_cwd/checkpoint_enabled" ] ; then
3
- if [ -e "$$image_disk" ] ; then
1
+ enabled?:
2
+ - exec_local: test -f $$kameleon_cwd/checkpoint_enabled
3
+ - exec_local: test -e "$$image_disk"
4
+
5
+ create:
6
+ - exec_local: |
4
7
  parent_of_@microstep_id="$(readlink $$image_disk)"
5
8
  pushd $$kameleon_cwd/checkpoints
6
9
  rm -f @microstep_id_checkpoint.qcow2
@@ -8,31 +11,30 @@ create: |
8
11
  -o backing_file=$(basename "$parent_of_@microstep_id")
9
12
  popd
10
13
  ln -sf $$kameleon_cwd/checkpoints/@microstep_id_checkpoint.qcow2 $$image_disk
11
-
12
14
  lsmod | grep nbd >/dev/null || modprobe nbd max_part=63
13
-
14
15
  echo "sync" ; sync
15
16
  qemu-nbd -d $$nbd_device
16
17
  qemu-nbd -c $$nbd_device "$(readlink $$image_disk)"
17
- fi
18
- fi
19
18
 
20
- apply: |
21
- # apply command use the backing file that represent the real state to restore
22
- previous_id=$(qemu-img info "checkpoints/@microstep_id_checkpoint.qcow2" \
23
- | grep backing \
24
- | sed -e 's/.*checkpoints\/\(.*\)_checkpoint.qcow2\(.*\)/\1/p' \
25
- | uniq)
26
- ln -sf "$$kameleon_cwd/checkpoints/${previous_id}_checkpoint.qcow2" "$$image_disk"
19
+ apply:
20
+ - exec_local: |
21
+ # apply command use the backing file that represent the real state to restore
22
+ previous_id=$(qemu-img info "checkpoints/@microstep_id_checkpoint.qcow2" \
23
+ | grep backing \
24
+ | sed -e 's/.*checkpoints\/\(.*\)_checkpoint.qcow2\(.*\)/\1/p' \
25
+ | uniq)
26
+ ln -sf "$$kameleon_cwd/checkpoints/${previous_id}_checkpoint.qcow2" "$$image_disk"
27
27
 
28
- clear: |
29
- if [ -d "$$kameleon_cwd/checkpoints" ] ; then
30
- ls $$kameleon_cwd/checkpoints/ | \
31
- xargs -I {} bash -c "echo Removing $$kameleon_cwd/checkpoints/{} ; rm $$kameleon_cwd/checkpoints/{}"
32
- rm -f $$image_disk
33
- fi
28
+ clear:
29
+ - exec_local: |
30
+ if [ -d "$$kameleon_cwd/checkpoints" ] ; then
31
+ ls $$kameleon_cwd/checkpoints/ | \
32
+ xargs -I {} bash -c "echo Removing $$kameleon_cwd/checkpoints/{} ; rm $$kameleon_cwd/checkpoints/{}"
33
+ rm -f $$image_disk
34
+ fi
34
35
 
35
- list: |
36
- if [ -d "$$kameleon_cwd/checkpoints" ] ; then
37
- ls $$kameleon_cwd/checkpoints/ | sed -e 's/\(.*\)_checkpoint.qcow2/\1/p' | uniq
38
- fi
36
+ list:
37
+ - exec_local: |
38
+ if [ -d "$$kameleon_cwd/checkpoints" ] ; then
39
+ ls $$kameleon_cwd/checkpoints/ | sed -e 's/\(.*\)_checkpoint.qcow2/\1/p' | uniq
40
+ fi