kameleon-builder 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (157) hide show
  1. data/.editorconfig +0 -0
  2. data/.env +63 -15
  3. data/.gitignore +1 -0
  4. data/README.rst +4 -2
  5. data/Vagrantfile +13 -52
  6. data/bin/kameleon +5 -0
  7. data/completion/_kameleon.zsh +18 -0
  8. data/completion/kameleon.bash +13 -0
  9. data/completion/kameleon.fish +10 -0
  10. data/contrib/polipo_env.sh +2 -0
  11. data/contrib/steps/export/save_as_g5k.yaml +63 -0
  12. data/contrib/steps/setup/add_to_sudoers.yaml +5 -0
  13. data/docs/Makefile +10 -6
  14. data/docs/README.md +17 -0
  15. data/docs/source/_static/kameleon-logo.png +0 -0
  16. data/docs/source/_static/kameleon-logo.xcf +0 -0
  17. data/docs/source/_static/kameleon-long.png +0 -0
  18. data/docs/source/aliases.rst +4 -2
  19. data/docs/source/checkpoint.rst +2 -0
  20. data/docs/source/commands.rst +4 -3
  21. data/docs/source/conf.py +15 -7
  22. data/docs/source/context.rst +7 -4
  23. data/docs/source/faq.rst +39 -1
  24. data/docs/source/getting_started.rst +227 -1
  25. data/docs/source/grid5000_tutorial.rst +110 -0
  26. data/docs/source/index.rst +7 -2
  27. data/docs/source/installation.rst +12 -4
  28. data/docs/source/persistent_cache.rst +34 -0
  29. data/docs/source/recipe.rst +23 -16
  30. data/docs/source/use_cases.rst +93 -0
  31. data/docs/source/workspace.rst +2 -0
  32. data/kameleon-builder.gemspec +7 -1
  33. data/lib/kameleon.rb +3 -6
  34. data/lib/kameleon/cli.rb +104 -50
  35. data/lib/kameleon/compat.rb +39 -0
  36. data/lib/kameleon/context.rb +43 -13
  37. data/lib/kameleon/engine.rb +118 -77
  38. data/lib/kameleon/environment.rb +3 -5
  39. data/lib/kameleon/error.rb +15 -9
  40. data/lib/kameleon/logger.rb +7 -4
  41. data/lib/kameleon/persistent_cache.rb +139 -0
  42. data/lib/kameleon/recipe.rb +200 -81
  43. data/lib/kameleon/shell.rb +51 -16
  44. data/omnibus/.gitignore +11 -0
  45. data/omnibus/.kitchen.yml +25 -0
  46. data/omnibus/Berksfile +9 -0
  47. data/omnibus/Berksfile.lock +25 -0
  48. data/omnibus/Gemfile +12 -0
  49. data/omnibus/README.md +94 -0
  50. data/omnibus/config/projects/kameleon.rb +23 -0
  51. data/omnibus/config/software/kameleon.rb +24 -0
  52. data/omnibus/config/software/polipo.rb +30 -0
  53. data/omnibus/config/software/ruby.rb +158 -0
  54. data/omnibus/files/mac_dmg/Resources/background.png +0 -0
  55. data/omnibus/files/mac_dmg/Resources/icon.png +0 -0
  56. data/omnibus/files/mac_pkg/Resources/background.png +0 -0
  57. data/omnibus/files/mac_pkg/Resources/license.html +1 -0
  58. data/omnibus/files/mac_pkg/Resources/welcome.html +9 -0
  59. data/omnibus/omnibus.rb +27 -0
  60. data/omnibus/package-scripts/kameleon/makeselfinst +27 -0
  61. data/omnibus/package-scripts/kameleon/postrm +9 -0
  62. data/templates/archlinux-desktop.yaml +25 -0
  63. data/templates/archlinux.yaml +106 -0
  64. data/templates/debian-testing.yaml +25 -0
  65. data/templates/debian7-desktop.yaml +25 -0
  66. data/templates/{debian-wheezy-docker.yaml → debian7-docker.yaml} +30 -16
  67. data/templates/debian7-g5k.yaml +97 -0
  68. data/templates/debian7-oar-dev.yaml +51 -0
  69. data/templates/debian7.yaml +128 -0
  70. data/templates/extend.erb +23 -0
  71. data/templates/fedora-rawhide.yaml +30 -0
  72. data/templates/fedora20-desktop.yaml +21 -0
  73. data/templates/fedora20.yaml +105 -0
  74. data/templates/{debian-wheezy-chroot.yaml → old-debian7.yaml} +51 -38
  75. data/templates/{aliases → steps/aliases}/defaults.yaml +37 -12
  76. data/templates/steps/bootstrap/archlinux/arch_bootstrap.yaml +219 -0
  77. data/templates/steps/bootstrap/archlinux/install_bootloader.yaml +46 -0
  78. data/templates/steps/bootstrap/archlinux/populate_disk.yaml +39 -0
  79. data/templates/steps/bootstrap/debian/debootstrap.yaml +18 -10
  80. data/templates/steps/bootstrap/debian/debootstrap_arm.yaml +31 -0
  81. data/templates/steps/bootstrap/fedora/liveos_bootstrap.yaml +123 -0
  82. data/templates/steps/bootstrap/g5k_reserv.yaml +70 -0
  83. data/templates/steps/bootstrap/initialize_disk_chroot.yaml +84 -0
  84. data/templates/steps/bootstrap/initialize_disk_qemu.yaml +72 -0
  85. data/templates/steps/bootstrap/install_bootloader.yaml +42 -0
  86. data/templates/steps/bootstrap/prepare_chroot.yaml +126 -0
  87. data/templates/steps/bootstrap/prepare_docker.yaml +19 -8
  88. data/templates/steps/bootstrap/prepare_qemu.yaml +47 -0
  89. data/templates/steps/bootstrap/start_chroot.yaml +11 -2
  90. data/templates/steps/bootstrap/start_docker.yaml +2 -2
  91. data/templates/steps/bootstrap/start_qemu.yaml +75 -0
  92. data/templates/steps/bootstrap/ubuntu/debootstrap.yaml +27 -0
  93. data/templates/steps/breakpoint.yaml +2 -0
  94. data/templates/{checkpoints → steps/checkpoints}/docker.yaml +0 -0
  95. data/templates/steps/checkpoints/qcow2.yaml +38 -0
  96. data/templates/steps/checkpoints/qemu.yaml +39 -0
  97. data/templates/steps/export/clean_appliance.yaml +7 -1
  98. data/templates/steps/export/compact_qcow_img.yaml +12 -0
  99. data/templates/steps/export/save_appliance.yaml +58 -0
  100. data/templates/steps/export/save_appliance_from_g5k.yaml +47 -0
  101. data/templates/steps/export/save_vagrant_box.yaml +29 -0
  102. data/templates/steps/setup/archlinux/configure_keyboard.yaml +9 -0
  103. data/templates/steps/setup/archlinux/configure_network.yaml +9 -0
  104. data/templates/steps/setup/archlinux/configure_ruby.yaml +7 -0
  105. data/templates/steps/setup/archlinux/configure_system.yaml +20 -0
  106. data/templates/steps/setup/archlinux/install_dev_tools.yaml +18 -0
  107. data/templates/steps/setup/archlinux/install_gnome.yaml +27 -0
  108. data/templates/steps/setup/archlinux/install_software.yaml +9 -0
  109. data/templates/steps/setup/archlinux/install_yaourt.yaml +29 -0
  110. data/templates/steps/setup/autologin.yaml +16 -0
  111. data/templates/steps/setup/create_group.yaml +12 -0
  112. data/templates/steps/setup/create_user.yaml +9 -10
  113. data/templates/steps/setup/debian/configure_apt.yaml +65 -0
  114. data/templates/steps/setup/debian/configure_kernel.yaml +18 -0
  115. data/templates/steps/setup/debian/{keyboard_config.yaml → configure_keyboard.yaml} +1 -1
  116. data/templates/steps/setup/debian/{network_config.yaml → configure_network.yaml} +0 -0
  117. data/templates/steps/setup/debian/{system_config.yaml → configure_system.yaml} +0 -0
  118. data/templates/steps/setup/debian/install_gnome.yaml +13 -0
  119. data/templates/steps/setup/debian/install_kde.yaml +13 -0
  120. data/templates/steps/setup/debian/install_software.yaml +2 -0
  121. data/templates/steps/setup/debian/oar/oar_debian_config_frontend.yaml +8 -0
  122. data/templates/steps/setup/debian/oar/oar_debian_config_node.yaml +5 -0
  123. data/templates/steps/setup/debian/oar/oar_debian_config_server.yaml +5 -0
  124. data/templates/steps/setup/debian/oar/oar_prereq_install.yaml +16 -0
  125. data/templates/steps/setup/debian/setup_vagrant_box.yaml +52 -0
  126. data/templates/steps/setup/debian/upgrade_system.yaml +15 -0
  127. data/templates/steps/setup/fedora/configure_network.yaml +30 -0
  128. data/templates/steps/setup/fedora/configure_system.yaml +59 -0
  129. data/templates/steps/setup/fedora/install_software.yaml +3 -0
  130. data/templates/steps/setup/fedora/update_system.yaml +10 -0
  131. data/templates/steps/setup/oar/oar_config_devel.yaml +21 -0
  132. data/templates/steps/setup/oar/oar_config_frontend.yaml +38 -0
  133. data/templates/steps/setup/oar/oar_config_node.yaml +4 -0
  134. data/templates/steps/setup/oar/oar_config_server.yaml +25 -0
  135. data/templates/steps/setup/oar/oar_config_system.yaml +34 -0
  136. data/templates/steps/setup/oar/oar_devel_prereq_install.yaml +5 -0
  137. data/templates/steps/setup/oar/oar_git_install.yaml +21 -0
  138. data/templates/steps/setup/ubuntu/configure_apt.yaml +67 -0
  139. data/templates/ubuntu-12.04-desktop.yaml +25 -0
  140. data/templates/ubuntu-12.04.yaml +128 -0
  141. data/templates/ubuntu-14.04-desktop.yaml +27 -0
  142. data/templates/ubuntu-14.04.yaml +25 -0
  143. data/templates/vagrant-debian7.yaml +31 -0
  144. data/version.txt +1 -1
  145. metadata +155 -28
  146. checksums.yaml +0 -7
  147. data/templates/checkpoints/qcow2.yaml +0 -44
  148. data/templates/fedora-docker.yaml +0 -96
  149. data/templates/steps/bootstrap/fedora/docker_bootstrap.yaml +0 -25
  150. data/templates/steps/bootstrap/fedora/yum_bootstrap.yaml +0 -22
  151. data/templates/steps/bootstrap/prepare_appliance_with_nbd.yaml +0 -93
  152. data/templates/steps/export/build_appliance_from_docker.yaml +0 -105
  153. data/templates/steps/export/save_appliance_from_nbd.yaml +0 -54
  154. data/templates/steps/setup/debian/kernel_install.yaml +0 -20
  155. data/templates/steps/setup/debian/software_install.yaml +0 -15
  156. data/templates/steps/setup/fedora/kernel_install.yaml +0 -27
  157. data/templates/steps/setup/fedora/software_install.yaml +0 -10
@@ -1,4 +1,14 @@
1
1
 
2
+ - check_docker:
3
+ - on_bootstrap_init:
4
+ - exec_out: DOCKER=${DOCKER:-docker}
5
+ - rescue:
6
+ - exec_out: command -V $DOCKER
7
+ - breakpoint: >
8
+ error: Docker executable no found. Make sure Docker
9
+ is installed and/or use the DOCKER variable to set Docker
10
+ executable.
11
+
2
12
  - clean_containers:
3
13
  - on_checkpoint: redo
4
14
  - on_export_clean:
@@ -19,15 +29,16 @@
19
29
 
20
30
  - configure_sshd:
21
31
  - on_checkpoint: redo
22
- - exec_out: echo -e 'y\n' | ssh-keygen -q -t dsa -f $$insecure_ssh_key -N ''
23
- - exec_out: chmod 600 $$insecure_ssh_key*
32
+ - exec_out: echo -e 'y\n' | ssh-keygen -q -t rsa -f $$insecure_ssh_key -N ''
33
+ - exec_out: cat $$insecure_ssh_key
24
34
  - exec_out: |
25
- CID=$(docker run --dns $$dns -d -v "$(pwd):/tmp" $$image:latest \
26
- /bin/bash -c "rm -fr /root/.ssh ; \
27
- mkdir -p /root/.ssh ; \
28
- ssh-keygen -q -t dsa -f /root/.ssh/id_dsa -N '' ; \
29
- cat /tmp/$${insecure_ssh_key}.pub > /root/.ssh/authorized_keys")
30
- - exec_out: bash -c "exit $(docker wait $CID)"
35
+ CID="kameleon_container_$[($RANDOM % ($[50000 - 50] + 1)) + 50]"
36
+ cat $${insecure_ssh_key}.pub | \
37
+ docker run -i -a stdin --dns $$dns --name $CID $$image:latest \
38
+ /bin/bash -c "mkdir -p /root/.ssh ; \
39
+ tee -a /root/.ssh/authorized_keys"
40
+ - on_export_init:
41
+ - exec_in: rm -rf /root/.ssh
31
42
  - exec_out: echo "$CID" >> CONTAINERS_TO_CLEAN
32
43
  - exec_out: |
33
44
  docker images | grep $$image \
@@ -0,0 +1,47 @@
1
+ - insecure_ssh_key: $$kameleon_cwd/insecure_ssh_key
2
+
3
+ - mount_chroot:
4
+ - check_cmd_out: chroot
5
+ - exec_out: mount -o bind /dev $$rootfs/dev
6
+ - exec_out: mount -o bind /dev/pts $$rootfs/dev/pts
7
+ - exec_out: mount -t proc /proc $$rootfs/proc
8
+ - exec_out: mount -t sysfs /sys $$rootfs/sys
9
+ - exec_out: test -f $$rootfs/etc/mtab || cat /proc/mounts > $$rootfs/etc/mtab
10
+
11
+ - umount_chroot:
12
+ - on_bootstrap_clean:
13
+ - exec_out: echo try umount $$rootfs/sys... ; mountpoint -q $$rootfs/sys && umount -f -l $$rootfs/sys || true
14
+ - exec_out: echo try umount $$rootfs/proc... ; mountpoint -q $$rootfs/proc && umount -f -l $$rootfs/proc || true
15
+ - exec_out: echo try umount $$rootfs/dev/pts... ; mountpoint -q $$rootfs/dev/pts && umount -f -l $$rootfs/dev/pts || true
16
+ - exec_out: echo try umount $$rootfs/dev... ; mountpoint -q $$rootfs/dev && umount -f -l $$rootfs/dev || true
17
+
18
+ - configure_ssh_access:
19
+ - exec_out: echo -e 'y\n' | ssh-keygen -q -t dsa -f $$insecure_ssh_key -N ''
20
+ - exec_out: cat $$insecure_ssh_key
21
+ - exec_out: chroot $$rootfs mkdir -p /root/.ssh
22
+ - exec_out: |
23
+ cat $${insecure_ssh_key}.pub | tee -a $$rootfs/root/.ssh/authorized_keys
24
+ cat $${insecure_ssh_key}.pub > $$rootfs/root/.ssh/kameleon_insecure_public_key
25
+ chmod 600 $$rootfs/root/.ssh/authorized_keys
26
+ chmod 755 $$rootfs/root/.ssh
27
+
28
+ - create_ssh_config:
29
+ - write_out:
30
+ - $$ssh_config_file
31
+ - |
32
+ Host $$kameleon_recipe_name
33
+ HostName 127.0.0.1
34
+ Port $${qemu_ssh_port}
35
+ User root
36
+ IdentityFile $$insecure_ssh_key
37
+ UserKnownHostsFile /dev/null
38
+ StrictHostKeyChecking no
39
+ PasswordAuthentication no
40
+ IdentitiesOnly yes
41
+ LogLevel FATAL
42
+ ForwardAgent yes
43
+ ControlPath $(pwd)/master-%l-%r@%h:%p
44
+ ControlMaster auto
45
+ ControlPersist yes
46
+ Compression yes
47
+ Protocol 2
@@ -7,7 +7,7 @@
7
7
  - exec_out: mount -t proc /proc $$rootfs/proc
8
8
  - exec_out: mount -t sysfs /sys $$rootfs/sys
9
9
  - exec_out: test -f $$rootfs/etc/mtab || cat /proc/mounts > $$rootfs/etc/mtab
10
- - on_export_clean:
10
+ - on_setup_clean:
11
11
  - exec_out: echo try umount $$rootfs/sys... ; mountpoint -q $$rootfs/sys && umount -f -l $$rootfs/sys || true
12
12
  - exec_out: echo try umount $$rootfs/proc... ; mountpoint -q $$rootfs/proc && umount -f -l $$rootfs/proc || true
13
13
  - exec_out: echo try umount $$rootfs/dev/pts... ; mountpoint -q $$rootfs/dev/pts && umount -f -l $$rootfs/dev/pts || true
@@ -33,7 +33,7 @@
33
33
 
34
34
  - clean_cpuset:
35
35
  - on_checkpoint: redo
36
- - on_export_clean:
36
+ - on_setup_clean:
37
37
  - exec_out: CPUSET_DIR="$$rootfs/$$cpuset_base_name"
38
38
  - exec_out: |
39
39
  if [ -f $CPUSET_DIR/$$cpuset_name/tasks ]; then
@@ -51,3 +51,12 @@
51
51
  fi
52
52
  - exec_out: echo try umount $CPUSET_DIR... ; mountpoint -q $CPUSET_DIR && umount -f -l $CPUSET_DIR || true
53
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,8 +1,8 @@
1
1
  - start_sshd:
2
2
  - on_checkpoint: redo
3
3
  - exec_out: |
4
- CID=$(docker run -d -p 22 -i --dns $$dns -h $$hostname -privileged "$$image:latest" \
5
- /bin/bash -c "mkdir /var/run/sshd ; /usr/sbin/sshd -D")
4
+ CID=$(docker run -d -p 127.0.0.1::22 -i --dns $$dns -h $$hostname --privileged "$$image:latest" \
5
+ /bin/bash -c "service ssh restart ; tail -f /dev/null")
6
6
  - exec_out: echo "$CID" >> CONTAINERS_TO_CLEAN
7
7
  - exec_out: echo $CID > MAIN_CONTAINER_ID
8
8
  - on_export_clean:
@@ -0,0 +1,75 @@
1
+ - start_qemu_vm:
2
+ - 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: |
7
+ if [ $$qemu_enable_kvm = true ]; then
8
+ ENABLE_KVM="-enable-kvm"
9
+ fi
10
+ - exec_out: |
11
+ if [ -f "vm_state_to_load.txt" ]
12
+ then
13
+ SAVED_STATE="$(cat vm_state_to_load.txt)"
14
+ LOADVM="-loadvm $SAVED_STATE"
15
+ rm -f vm_state_to_load.txt
16
+ 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 \
21
+ -smp $${qemu_cpu} \
22
+ -m $$qemu_memory_size \
23
+ -rtc base=localtime \
24
+ -net nic,model=virtio -net user \
25
+ -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
32
+ do
33
+ echo -n "."
34
+ sleep 1
35
+ 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 0 -z localhost $$qemu_monitor_port
51
+ do
52
+ sleep 1
53
+ echo -n "."
54
+ done
55
+ echo " ~> OK"
56
+
57
+ - force_shutdown_qemu_vm:
58
+ - on_checkpoint: redo
59
+ - on_export_clean:
60
+ - exec_out: |
61
+ if nc -w 0 -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
74
+ - on_setup_clean:
75
+ - exec_out: rm -f $$kameleon_cwd/checkpoint_enabled
@@ -0,0 +1,27 @@
1
+ # # Bootstrap
2
+ - enable_cache: true
3
+
4
+ - debootstrap:
5
+ - check_cmd_out: debootstrap
6
+ - exec_out: mkdir -p $$rootfs_download_path
7
+ - exec_out: |
8
+ if [ $$enable_cache = true ]; then
9
+ [[ ! -f "$$rootfs_download_path/.kameleon_timestamp" ]] || CACHE_AVAILABLE=1
10
+ fi
11
+ [[ -n $CACHE_AVAILABLE ]] || \
12
+ debootstrap --no-check-gpg --arch=$$arch --include="$$include_pkg" $$release $$rootfs_download_path $$repository \
13
+ && date +%s > $$rootfs_download_path/.kameleon_timestamp
14
+ - write_out:
15
+ - $$rootfs_download_path/etc/apt/sources.list
16
+ - |
17
+ deb $$repository $$release main restricted universe multiverse
18
+ - exec_out: chroot $$rootfs_download_path apt-get update
19
+ - exec_out: chroot $$rootfs_download_path apt-get install -y extlinux
20
+ - exec_out: cat /etc/resolv.conf > $$rootfs_download_path/etc/resolv.conf
21
+ - write_out:
22
+ - $$rootfs_download_path/etc/network/interfaces
23
+ - |
24
+ auto lo
25
+ iface lo inet loopback
26
+ auto eth0
27
+ iface eth0 inet dhcp
@@ -0,0 +1,2 @@
1
+ - breakpoint:
2
+ - breakpoint: "Kameleon breakpoint"
@@ -0,0 +1,38 @@
1
+ create: |
2
+ if [ -f "$$kameleon_cwd/checkpoint_enabled" ] ; then
3
+ if [ -e "$$image_disk" ] ; then
4
+ parent_of_@microstep_id="$(readlink $$image_disk)"
5
+ pushd $$kameleon_cwd/checkpoints
6
+ rm -f @microstep_id_checkpoint.qcow2
7
+ qemu-img create -f qcow2 "@microstep_id_checkpoint.qcow2" \
8
+ -o backing_file=$(basename "$parent_of_@microstep_id")
9
+ popd
10
+ ln -sf $$kameleon_cwd/checkpoints/@microstep_id_checkpoint.qcow2 $$image_disk
11
+
12
+ lsmod | grep nbd >/dev/null || modprobe nbd max_part=63
13
+
14
+ echo "sync" ; sync
15
+ qemu-nbd -d $$nbd_device
16
+ qemu-nbd -c $$nbd_device "$(readlink $$image_disk)"
17
+ fi
18
+ fi
19
+
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"
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
34
+
35
+ list: |
36
+ if [ -d "$$kameleon_cwd/checkpoints" ] ; then
37
+ ls $$kameleon_cwd/checkpoints/ | sed -e 's/\(.*\)_checkpoint.qcow2/\1/p' | uniq
38
+ fi
@@ -0,0 +1,39 @@
1
+ create: |
2
+ if [ -f "$$kameleon_cwd/checkpoint_enabled" ] ; then
3
+ if nc -w 0 -z localhost $$qemu_monitor_port 2>/dev/null
4
+ then
5
+ echo "savevm @microstep_id" | nc localhost $$qemu_monitor_port
6
+ fi
7
+ fi
8
+
9
+ apply: |
10
+ [[ ! -f "$$kameleon_cwd/vm_state_to_load.txt" ]] || rm -f $$kameleon_cwd/vm_state_to_load.txt
11
+ if [ -f "$$image_disk" ] ; then
12
+ _checkpoints=$(qemu-img snapshot -l $$image_disk | tail -n +3 | awk '{print $2}')
13
+ _checkpoints=($_checkpoints)
14
+ for checkpoint in "${_checkpoints[@]}"; do
15
+ if [ -f "$$kameleon_cwd/vm_state_to_load.txt" ]; then
16
+ echo "Removing old checkpoint $checkpoint"
17
+ qemu-img snapshot -d $checkpoint $$image_disk
18
+ fi
19
+ if [[ "$checkpoint" == "@microstep_id" ]]; then
20
+ echo "@microstep_id" > $$kameleon_cwd/vm_state_to_load.txt
21
+ qemu-img snapshot -a $checkpoint $$image_disk
22
+ fi
23
+ done
24
+ fi
25
+
26
+ clear: |
27
+ if [ -f "$$image_disk" ] ; then
28
+ _checkpoints=$(qemu-img snapshot -l $$image_disk | tail -n +3 | awk '{print $2}')
29
+ _checkpoints=($_checkpoints)
30
+ for checkpoint in "${_checkpoints[@]}"; do
31
+ echo "Removing old checkpoint $checkpoint"
32
+ qemu-img snapshot -d $checkpoint $$image_disk
33
+ done
34
+ fi
35
+
36
+ list: |
37
+ if [ -f "$$image_disk" ] ; then
38
+ qemu-img snapshot -l $$image_disk | tail -n +3 | awk '{print $2}'
39
+ fi
@@ -1,3 +1,9 @@
1
1
  # # Clean Appliance
2
2
  - clean_udev:
3
- - exec_in: rm -f /etc/udev/rules.d/*persistent-net.rules*
3
+ - on_setup_clean:
4
+ - exec_in: rm -f /etc/udev/rules.d/*persistent-net.rules*
5
+
6
+ - clean_tmp:
7
+ - on_setup_clean:
8
+ - exec_in: rm -rf /tmp/* || true
9
+ - exec_in: rm -rf /var/tmp/* || true
@@ -0,0 +1,12 @@
1
+
2
+
3
+ - nullify_freespace:
4
+ - exec_out: |
5
+ echo "Nullify freespace..."
6
+ dd if=/dev/zero of=$$mountdir/bigemptyfile bs=1M 2>&1 >/dev/null || true
7
+ rm -f $$mountdir/bigemptyfile
8
+ echo "sync..." ; sync
9
+
10
+ - compact_qcow_img:
11
+ - exec_out: qemu-img convert -c -O qcow2 $$filename compressed_$$filename
12
+ - exec_out: mv compressed_$$filename $$filename
@@ -0,0 +1,58 @@
1
+ # Save Appliance
2
+
3
+ - save_as_tgz:
4
+ - check_cmd_out: qemu-nbd
5
+ - exec_out: echo "Exporting appliance to tar.gz..."
6
+ - exec_out: qemu-nbd -c $$nbd_device $$input -n || fail nbd device $$nbd_device is unavailable
7
+ - exec_out: mkdir -p $$rootfs
8
+ - exec_out: mount $${nbd_device}p1 $$rootfs || fail cannot mount /
9
+ - exec_out: cp $$rootfs/etc/fstab $$kameleon_cwd/fstab.orig
10
+ - write_out:
11
+ - $$rootfs/etc/fstab
12
+ - |
13
+ # UNCONFIGURED FSTAB FOR BASE SYSTEM
14
+ - exec_out: |
15
+ tar -zcf $$output.tar.gz --numeric-owner \
16
+ --exclude=tmp/* \
17
+ --exclude=dev/* \
18
+ --exclude=proc/* \
19
+ --exclude=sys/* \
20
+ --exclude=run/* \
21
+ --exclude=mnt/* \
22
+ --exclude=media/* \
23
+ --exclude=lost+found/* \
24
+ -C $$rootfs .
25
+ - exec_out: cat $$kameleon_cwd/fstab.orig > $$rootfs/etc/fstab
26
+ - exec_out: sync
27
+ - exec_out: echo "Saved tar.gz appliance to $$output.tar.gz"
28
+ - on_export_clean:
29
+ - exec_out: sync
30
+ - exec_out: "echo try umount $$rootfs... ; mountpoint -q $$rootfs && umount -f -l $$rootfs || true"
31
+ - exec_out: qemu-nbd -d $$nbd_device
32
+ - exec_out: pgrep qemu-nbd | xargs -I {} kill -9 {} || true
33
+
34
+ - save_as_raw:
35
+ - exec_out: qemu-img convert -O raw $$input $$output.raw
36
+ - exec_out: echo "Saved raw appliance to $$output.raw"
37
+
38
+ - save_as_qcow2:
39
+ - exec_out: qemu-img convert -O qcow2 $$input $$output.qcow2
40
+ - exec_out: echo "Saved qcow2 appliance to $$output.qcow2"
41
+
42
+ - save_as_qed:
43
+ - exec_out: qemu-img convert -O qed $$input $$output.qed
44
+ - exec_out: echo "Saved qed appliance to $$output.qed"
45
+
46
+ - save_as_vmdk:
47
+ - exec_out: qemu-img convert -O vmdk $$input $$output.vmdk
48
+ - exec_out: echo "Saved vmdk appliance to $$output.vmdk"
49
+
50
+ - save_as_vdi:
51
+ - exec_out: qemu-img convert -O vdi $$input $$output.vdi
52
+ - rescue:
53
+ - exec_out: |
54
+ echo "Compact the vdi disk"
55
+ VBoxManage modifyhd $$output.vdi --compact 2>&1
56
+ - exec_out: |
57
+ echo "Cannot compact the vdi disk : VBoxManage is missing."
58
+ - exec_out: echo "Saved vdi appliance to $$output.vdi"
@@ -0,0 +1,47 @@
1
+ # # Save G5k Appliance
2
+
3
+ - save_as_g5k:
4
+ - exec_out: echo "Using tgz g5k to Export the machine"
5
+ - exec_in: tgz-g5k $$filename.tar.gz
6
+ - exec_out: |
7
+ rsync -avz -e "ssh -F $$out_cwd/ssh_config" \
8
+ $$kameleon_recipe_name:/root/$$filename.tar.gz \
9
+ $$out_cwd/$$filename.tar.gz
10
+ - exec_out: echo "Saved tar.gz appliance to $$out_cwd/$$filename.tar.gz"
11
+ - exec_in: rm -f $$in_cwd/$$filename.tar.gz
12
+ - exec_out: echo "Getting the appropiate post install"
13
+ - pipe:
14
+ - exec_out: kaenv3 -p $$kenv | grep archive
15
+ - exec_in: cat > /tmp/postinstall
16
+
17
+ - write_in:
18
+ - $$in_cwd/$${kameleon_recipe_name}_img.yaml
19
+ - |
20
+ #
21
+ # Kameleon generated based on kadeploy description file
22
+ #
23
+ ---
24
+ name: $${kameleon_recipe_name}
25
+
26
+ version: 1
27
+
28
+ os: linux
29
+
30
+ image:
31
+ file: $$filename.tar.gz
32
+ kind: tar
33
+ compression: gzip
34
+
35
+ postinstalls:
36
+ `cat /tmp/postinstall`
37
+ compression: gzip
38
+ script: traitement.ash /rambin
39
+
40
+ boot:
41
+ kernel: /boot/`basename /boot/vmlinu*`
42
+ initrd: /boot/`basename /boot/init*`
43
+
44
+ filesystem: $$filesystem
45
+ - in2out:
46
+ - $$in_cwd/$${kameleon_recipe_name}_img.yaml
47
+ - $$out_cwd/$${kameleon_recipe_name}_img.yaml