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.
- data/.editorconfig +0 -0
- data/.env +63 -15
- data/.gitignore +1 -0
- data/README.rst +4 -2
- data/Vagrantfile +13 -52
- data/bin/kameleon +5 -0
- data/completion/_kameleon.zsh +18 -0
- data/completion/kameleon.bash +13 -0
- data/completion/kameleon.fish +10 -0
- data/contrib/polipo_env.sh +2 -0
- data/contrib/steps/export/save_as_g5k.yaml +63 -0
- data/contrib/steps/setup/add_to_sudoers.yaml +5 -0
- data/docs/Makefile +10 -6
- data/docs/README.md +17 -0
- data/docs/source/_static/kameleon-logo.png +0 -0
- data/docs/source/_static/kameleon-logo.xcf +0 -0
- data/docs/source/_static/kameleon-long.png +0 -0
- data/docs/source/aliases.rst +4 -2
- data/docs/source/checkpoint.rst +2 -0
- data/docs/source/commands.rst +4 -3
- data/docs/source/conf.py +15 -7
- data/docs/source/context.rst +7 -4
- data/docs/source/faq.rst +39 -1
- data/docs/source/getting_started.rst +227 -1
- data/docs/source/grid5000_tutorial.rst +110 -0
- data/docs/source/index.rst +7 -2
- data/docs/source/installation.rst +12 -4
- data/docs/source/persistent_cache.rst +34 -0
- data/docs/source/recipe.rst +23 -16
- data/docs/source/use_cases.rst +93 -0
- data/docs/source/workspace.rst +2 -0
- data/kameleon-builder.gemspec +7 -1
- data/lib/kameleon.rb +3 -6
- data/lib/kameleon/cli.rb +104 -50
- data/lib/kameleon/compat.rb +39 -0
- data/lib/kameleon/context.rb +43 -13
- data/lib/kameleon/engine.rb +118 -77
- data/lib/kameleon/environment.rb +3 -5
- data/lib/kameleon/error.rb +15 -9
- data/lib/kameleon/logger.rb +7 -4
- data/lib/kameleon/persistent_cache.rb +139 -0
- data/lib/kameleon/recipe.rb +200 -81
- data/lib/kameleon/shell.rb +51 -16
- data/omnibus/.gitignore +11 -0
- data/omnibus/.kitchen.yml +25 -0
- data/omnibus/Berksfile +9 -0
- data/omnibus/Berksfile.lock +25 -0
- data/omnibus/Gemfile +12 -0
- data/omnibus/README.md +94 -0
- data/omnibus/config/projects/kameleon.rb +23 -0
- data/omnibus/config/software/kameleon.rb +24 -0
- data/omnibus/config/software/polipo.rb +30 -0
- data/omnibus/config/software/ruby.rb +158 -0
- data/omnibus/files/mac_dmg/Resources/background.png +0 -0
- data/omnibus/files/mac_dmg/Resources/icon.png +0 -0
- data/omnibus/files/mac_pkg/Resources/background.png +0 -0
- data/omnibus/files/mac_pkg/Resources/license.html +1 -0
- data/omnibus/files/mac_pkg/Resources/welcome.html +9 -0
- data/omnibus/omnibus.rb +27 -0
- data/omnibus/package-scripts/kameleon/makeselfinst +27 -0
- data/omnibus/package-scripts/kameleon/postrm +9 -0
- data/templates/archlinux-desktop.yaml +25 -0
- data/templates/archlinux.yaml +106 -0
- data/templates/debian-testing.yaml +25 -0
- data/templates/debian7-desktop.yaml +25 -0
- data/templates/{debian-wheezy-docker.yaml → debian7-docker.yaml} +30 -16
- data/templates/debian7-g5k.yaml +97 -0
- data/templates/debian7-oar-dev.yaml +51 -0
- data/templates/debian7.yaml +128 -0
- data/templates/extend.erb +23 -0
- data/templates/fedora-rawhide.yaml +30 -0
- data/templates/fedora20-desktop.yaml +21 -0
- data/templates/fedora20.yaml +105 -0
- data/templates/{debian-wheezy-chroot.yaml → old-debian7.yaml} +51 -38
- data/templates/{aliases → steps/aliases}/defaults.yaml +37 -12
- data/templates/steps/bootstrap/archlinux/arch_bootstrap.yaml +219 -0
- data/templates/steps/bootstrap/archlinux/install_bootloader.yaml +46 -0
- data/templates/steps/bootstrap/archlinux/populate_disk.yaml +39 -0
- data/templates/steps/bootstrap/debian/debootstrap.yaml +18 -10
- data/templates/steps/bootstrap/debian/debootstrap_arm.yaml +31 -0
- data/templates/steps/bootstrap/fedora/liveos_bootstrap.yaml +123 -0
- data/templates/steps/bootstrap/g5k_reserv.yaml +70 -0
- data/templates/steps/bootstrap/initialize_disk_chroot.yaml +84 -0
- data/templates/steps/bootstrap/initialize_disk_qemu.yaml +72 -0
- data/templates/steps/bootstrap/install_bootloader.yaml +42 -0
- data/templates/steps/bootstrap/prepare_chroot.yaml +126 -0
- data/templates/steps/bootstrap/prepare_docker.yaml +19 -8
- data/templates/steps/bootstrap/prepare_qemu.yaml +47 -0
- data/templates/steps/bootstrap/start_chroot.yaml +11 -2
- data/templates/steps/bootstrap/start_docker.yaml +2 -2
- data/templates/steps/bootstrap/start_qemu.yaml +75 -0
- data/templates/steps/bootstrap/ubuntu/debootstrap.yaml +27 -0
- data/templates/steps/breakpoint.yaml +2 -0
- data/templates/{checkpoints → steps/checkpoints}/docker.yaml +0 -0
- data/templates/steps/checkpoints/qcow2.yaml +38 -0
- data/templates/steps/checkpoints/qemu.yaml +39 -0
- data/templates/steps/export/clean_appliance.yaml +7 -1
- data/templates/steps/export/compact_qcow_img.yaml +12 -0
- data/templates/steps/export/save_appliance.yaml +58 -0
- data/templates/steps/export/save_appliance_from_g5k.yaml +47 -0
- data/templates/steps/export/save_vagrant_box.yaml +29 -0
- data/templates/steps/setup/archlinux/configure_keyboard.yaml +9 -0
- data/templates/steps/setup/archlinux/configure_network.yaml +9 -0
- data/templates/steps/setup/archlinux/configure_ruby.yaml +7 -0
- data/templates/steps/setup/archlinux/configure_system.yaml +20 -0
- data/templates/steps/setup/archlinux/install_dev_tools.yaml +18 -0
- data/templates/steps/setup/archlinux/install_gnome.yaml +27 -0
- data/templates/steps/setup/archlinux/install_software.yaml +9 -0
- data/templates/steps/setup/archlinux/install_yaourt.yaml +29 -0
- data/templates/steps/setup/autologin.yaml +16 -0
- data/templates/steps/setup/create_group.yaml +12 -0
- data/templates/steps/setup/create_user.yaml +9 -10
- data/templates/steps/setup/debian/configure_apt.yaml +65 -0
- data/templates/steps/setup/debian/configure_kernel.yaml +18 -0
- data/templates/steps/setup/debian/{keyboard_config.yaml → configure_keyboard.yaml} +1 -1
- data/templates/steps/setup/debian/{network_config.yaml → configure_network.yaml} +0 -0
- data/templates/steps/setup/debian/{system_config.yaml → configure_system.yaml} +0 -0
- data/templates/steps/setup/debian/install_gnome.yaml +13 -0
- data/templates/steps/setup/debian/install_kde.yaml +13 -0
- data/templates/steps/setup/debian/install_software.yaml +2 -0
- data/templates/steps/setup/debian/oar/oar_debian_config_frontend.yaml +8 -0
- data/templates/steps/setup/debian/oar/oar_debian_config_node.yaml +5 -0
- data/templates/steps/setup/debian/oar/oar_debian_config_server.yaml +5 -0
- data/templates/steps/setup/debian/oar/oar_prereq_install.yaml +16 -0
- data/templates/steps/setup/debian/setup_vagrant_box.yaml +52 -0
- data/templates/steps/setup/debian/upgrade_system.yaml +15 -0
- data/templates/steps/setup/fedora/configure_network.yaml +30 -0
- data/templates/steps/setup/fedora/configure_system.yaml +59 -0
- data/templates/steps/setup/fedora/install_software.yaml +3 -0
- data/templates/steps/setup/fedora/update_system.yaml +10 -0
- data/templates/steps/setup/oar/oar_config_devel.yaml +21 -0
- data/templates/steps/setup/oar/oar_config_frontend.yaml +38 -0
- data/templates/steps/setup/oar/oar_config_node.yaml +4 -0
- data/templates/steps/setup/oar/oar_config_server.yaml +25 -0
- data/templates/steps/setup/oar/oar_config_system.yaml +34 -0
- data/templates/steps/setup/oar/oar_devel_prereq_install.yaml +5 -0
- data/templates/steps/setup/oar/oar_git_install.yaml +21 -0
- data/templates/steps/setup/ubuntu/configure_apt.yaml +67 -0
- data/templates/ubuntu-12.04-desktop.yaml +25 -0
- data/templates/ubuntu-12.04.yaml +128 -0
- data/templates/ubuntu-14.04-desktop.yaml +27 -0
- data/templates/ubuntu-14.04.yaml +25 -0
- data/templates/vagrant-debian7.yaml +31 -0
- data/version.txt +1 -1
- metadata +155 -28
- checksums.yaml +0 -7
- data/templates/checkpoints/qcow2.yaml +0 -44
- data/templates/fedora-docker.yaml +0 -96
- data/templates/steps/bootstrap/fedora/docker_bootstrap.yaml +0 -25
- data/templates/steps/bootstrap/fedora/yum_bootstrap.yaml +0 -22
- data/templates/steps/bootstrap/prepare_appliance_with_nbd.yaml +0 -93
- data/templates/steps/export/build_appliance_from_docker.yaml +0 -105
- data/templates/steps/export/save_appliance_from_nbd.yaml +0 -54
- data/templates/steps/setup/debian/kernel_install.yaml +0 -20
- data/templates/steps/setup/debian/software_install.yaml +0 -15
- data/templates/steps/setup/fedora/kernel_install.yaml +0 -27
- 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
|
23
|
-
- exec_out:
|
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
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
-
|
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
|
-
-
|
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
|
-
-
|
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
|
5
|
-
/bin/bash -c "
|
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
|
File without changes
|
@@ -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
|
-
-
|
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
|