kameleon-builder 2.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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