kameleon-builder 2.0.0.dev

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. data/.editorconfig +23 -0
  2. data/.env +51 -0
  3. data/.gitignore +22 -0
  4. data/AUTHORS +19 -0
  5. data/CHANGELOG +36 -0
  6. data/COPYING +340 -0
  7. data/Gemfile +4 -0
  8. data/README.md +53 -0
  9. data/Rakefile +24 -0
  10. data/Vagrantfile +68 -0
  11. data/bin/kameleon +16 -0
  12. data/contrib/kameleon_bashrc.sh +138 -0
  13. data/contrib/scripts/VirtualBox_deploy.sh +12 -0
  14. data/contrib/scripts/chroot_env +9 -0
  15. data/contrib/scripts/create_passwd.py +17 -0
  16. data/contrib/scripts/umount-chroot.sh +290 -0
  17. data/contrib/steps/bootstrap/debian/bootstrap_if_needed.yaml +47 -0
  18. data/contrib/steps/bootstrap/debian/bootstrap_static.yaml +38 -0
  19. data/contrib/steps/setup/add_timestamp.yaml +6 -0
  20. data/contrib/steps/setup/autologin.yaml +16 -0
  21. data/contrib/steps/setup/copy_ssh_auth_file.yaml +10 -0
  22. data/contrib/steps/setup/debian/add_network_interface.yaml +7 -0
  23. data/contrib/steps/setup/debian/cluster_tools_install.yaml +16 -0
  24. data/contrib/steps/setup/debian/network_config_static.yaml +17 -0
  25. data/contrib/steps/setup/generate_user_ssh_key.yaml +15 -0
  26. data/contrib/steps/setup/install_my_ssh_key.yaml +26 -0
  27. data/contrib/steps/setup/make_swap_file.yaml +9 -0
  28. data/contrib/steps/setup/root_ssh_config.yaml +18 -0
  29. data/contrib/steps/setup/set_user_password.yaml +7 -0
  30. data/contrib/steps/setup/system_optimization.yaml +8 -0
  31. data/docs/.gitignore +1 -0
  32. data/docs/Makefile +177 -0
  33. data/docs/make.bat +242 -0
  34. data/docs/source/_static/.gitignore +0 -0
  35. data/docs/source/aliases.rst +29 -0
  36. data/docs/source/checkpoint.rst +28 -0
  37. data/docs/source/cli.rst +3 -0
  38. data/docs/source/commands.rst +62 -0
  39. data/docs/source/conf.py +254 -0
  40. data/docs/source/context.rst +42 -0
  41. data/docs/source/faq.rst +3 -0
  42. data/docs/source/getting_started.rst +3 -0
  43. data/docs/source/index.rst +38 -0
  44. data/docs/source/installation.rst +3 -0
  45. data/docs/source/recipe.rst +256 -0
  46. data/docs/source/why.rst +3 -0
  47. data/docs/source/workspace.rst +11 -0
  48. data/kameleon-builder.gemspec +37 -0
  49. data/lib/kameleon.rb +75 -0
  50. data/lib/kameleon/cli.rb +176 -0
  51. data/lib/kameleon/context.rb +83 -0
  52. data/lib/kameleon/engine.rb +357 -0
  53. data/lib/kameleon/environment.rb +38 -0
  54. data/lib/kameleon/error.rb +51 -0
  55. data/lib/kameleon/logger.rb +53 -0
  56. data/lib/kameleon/recipe.rb +474 -0
  57. data/lib/kameleon/shell.rb +290 -0
  58. data/lib/kameleon/step.rb +213 -0
  59. data/lib/kameleon/utils.rb +45 -0
  60. data/lib/kameleon/version.rb +3 -0
  61. data/templates/COPYRIGHT +21 -0
  62. data/templates/aliases/defaults.yaml +83 -0
  63. data/templates/checkpoints/docker.yaml +14 -0
  64. data/templates/checkpoints/qcow2.yaml +44 -0
  65. data/templates/debian-wheezy-chroot.yaml +98 -0
  66. data/templates/debian-wheezy-docker.yaml +97 -0
  67. data/templates/fedora-docker.yaml +96 -0
  68. data/templates/steps/bootstrap/debian/debootstrap.yaml +13 -0
  69. data/templates/steps/bootstrap/fedora/docker_bootstrap.yaml +25 -0
  70. data/templates/steps/bootstrap/fedora/yum_bootstrap.yaml +22 -0
  71. data/templates/steps/bootstrap/prepare_appliance_with_nbd.yaml +93 -0
  72. data/templates/steps/bootstrap/prepare_docker.yaml +38 -0
  73. data/templates/steps/bootstrap/start_chroot.yaml +53 -0
  74. data/templates/steps/bootstrap/start_docker.yaml +12 -0
  75. data/templates/steps/export/build_appliance_from_docker.yaml +105 -0
  76. data/templates/steps/export/clean_appliance.yaml +3 -0
  77. data/templates/steps/export/save_appliance_from_nbd.yaml +54 -0
  78. data/templates/steps/setup/create_user.yaml +12 -0
  79. data/templates/steps/setup/debian/kernel_install.yaml +20 -0
  80. data/templates/steps/setup/debian/keyboard_config.yaml +10 -0
  81. data/templates/steps/setup/debian/network_config.yaml +30 -0
  82. data/templates/steps/setup/debian/software_install.yaml +15 -0
  83. data/templates/steps/setup/debian/system_config.yaml +12 -0
  84. data/templates/steps/setup/fedora/kernel_install.yaml +27 -0
  85. data/templates/steps/setup/fedora/software_install.yaml +10 -0
  86. data/tests/helper.rb +22 -0
  87. data/tests/recipes/dummy_recipe.yaml +48 -0
  88. data/tests/recipes/steps/bootstrap/dummy_distro/dummy_bootstrap_static.yaml +4 -0
  89. data/tests/recipes/steps/export/dummy_save_appliance.yaml +9 -0
  90. data/tests/recipes/steps/setup/default/dummy_root_passwd.yaml +8 -0
  91. data/tests/recipes/steps/setup/dummy_distro/dummy_software_install.yaml +7 -0
  92. data/tests/test_context.rb +16 -0
  93. data/tests/test_recipe.rb +15 -0
  94. data/tests/test_version.rb +9 -0
  95. metadata +300 -0
@@ -0,0 +1,45 @@
1
+ module Kameleon
2
+ module Utils
3
+
4
+ def self.resolve_vars(raw, yaml_path, initial_variables)
5
+ raw.to_s.gsub(/\$\$\{[a-zA-Z0-9\-_]+\}|\$\$[a-zA-Z0-9\-_]+/) do |var|
6
+ # remove the dollars
7
+ if var.include? "{"
8
+ strip_var = var[3,(var.length - 4)]
9
+ else
10
+ strip_var = var[2,(var.length - 2)]
11
+ end
12
+ # check in local vars
13
+ if initial_variables.has_key? strip_var
14
+ value = initial_variables[strip_var]
15
+ else
16
+ fail RecipeError, "#{yaml_path}: variable #{var} not found in local or global"
17
+ end
18
+ return $` + resolve_vars(value.to_s + $', yaml_path, initial_variables)
19
+ end
20
+ end
21
+
22
+ def self.generate_slug(str)
23
+ value = str.strip
24
+ value.gsub!(/['`]/, "")
25
+ value.gsub!(/\s*@\s*/, " at ")
26
+ value.gsub!(/\s*&\s*/, " and ")
27
+ value.gsub!(/\s*[^A-Za-z0-9\.]\s*/, '_')
28
+ value.gsub!(/_+/, "_")
29
+ value.gsub!(/\A[_\.]+|[_\.]+\z/, "")
30
+ value
31
+ end
32
+
33
+ def self.extract_meta_var(name, content)
34
+ start_regex = Regexp.escape("# #{name.upcase}: ")
35
+ end_regex = Regexp.escape("\n#\n")
36
+ reg = %r/#{ start_regex }(.*?)#{ end_regex }/m
37
+ var = content.match(reg).captures.first
38
+ var.gsub!("\n#", "")
39
+ var.gsub!(" ", " ")
40
+ return var
41
+ rescue
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ module Kameleon
2
+ VERSION = "2.0.0.dev" unless defined?(::Kameleon::VERSION)
3
+ end
@@ -0,0 +1,21 @@
1
+ # Kameleon recipes and steps
2
+ # ==========================
3
+ #
4
+ # All the files and subdirectories in this directory are part of the
5
+ # kameleon tool distributed under this copyright.
6
+ # Copyright (C) 2009-2010 LIG <http://lig.imag.fr/>
7
+ #
8
+ # This program is free software; you can redistribute it and/or modify
9
+ # it under the terms of the GNU General Public License as published by
10
+ # the Free Software Foundation; either version 2 of the License, or
11
+ # (at your option) any later version.
12
+ #
13
+ # This program is distributed in the hope that it will be useful,
14
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
+ # GNU General Public License for more details.
17
+ #
18
+ # You should have received a copy of the GNU General Public License
19
+ # along with this program; if not, write to the Free Software
20
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21
+
@@ -0,0 +1,83 @@
1
+ write_local:
2
+ - exec_local: |
3
+ mkdir -p $(dirname @1);
4
+ cat >@1 <<<"@2"
5
+
6
+ write_in:
7
+ - exec_in: |
8
+ mkdir -p $(dirname @1);
9
+ cat >@1 <<<"@2"
10
+
11
+ write_out:
12
+ - exec_out: |
13
+ mkdir -p $(dirname @1);
14
+ cat >@1 <<<"@2"
15
+
16
+ append_local:
17
+ - exec_local: |
18
+ mkdir -p $(dirname @1);
19
+ cat >>@1 <<<"@2"
20
+ append_in:
21
+ - exec_in: |
22
+ mkdir -p $(dirname @1);
23
+ cat >>@1 <<<"@2"
24
+
25
+ append_out:
26
+ - exec_out: |
27
+ mkdir -p $(dirname @1);
28
+ cat >>@1 <<<"@2"
29
+
30
+ local2out:
31
+ - exec_out: |
32
+ mkdir -p $(dirname @2)"
33
+ - pipe:
34
+ - exec_local: cat @1
35
+ - exec_out: cat > @2
36
+
37
+ local2in:
38
+ - exec_in: mkdir -p $(dirname @2)
39
+ - pipe:
40
+ - exec_local: cat @1
41
+ - exec_in: cat > @2
42
+
43
+ out2local:
44
+ - exec_local: mkdir -p $(dirname @2)
45
+ - pipe:
46
+ - exec_out: cat @1
47
+ - exec_local: cat > @2
48
+
49
+ out2in:
50
+ - exec_in: mkdir -p $(dirname @2)
51
+ - pipe:
52
+ - exec_out: cat @1
53
+ - exec_in: cat > @2
54
+
55
+ in2local:
56
+ - exec_local: mkdir -p $(dirname @2)
57
+ - pipe:
58
+ - exec_in: cat @1
59
+ - exec_local: cat > @2
60
+
61
+ in2out:
62
+ - exec_out: mkdir -p $(dirname @2)
63
+ - pipe:
64
+ - exec_in: cat @1
65
+ - exec_out: cat > @2
66
+
67
+ check_cmd_out:
68
+ - on_bootstrap_init:
69
+ - rescue:
70
+ - exec_out: command -V @1 2> /dev/null
71
+ - breakpoint: "@1 is missing"
72
+
73
+ check_cmd_local:
74
+ - on_bootstrap_init:
75
+ - rescue:
76
+ - exec_local: command -V @1 2> /dev/null
77
+ - breakpoint: "@1 is missing"
78
+
79
+ check_cmd_in:
80
+ - on_bootstrap_init:
81
+ - rescue:
82
+ - exec_in: command -V @1 2> /dev/null
83
+ - breakpoint: "@1 is missing"
@@ -0,0 +1,14 @@
1
+ create: |
2
+ if [ -f MAIN_CONTAINER_ID ] ; then
3
+ docker commit $(cat MAIN_CONTAINER_ID) $$docker_image:@microstep_id
4
+ fi
5
+
6
+ apply: |
7
+ docker tag $$docker_image:@microstep_id $$docker_image:latest
8
+
9
+ list: |
10
+ docker images | grep $$docker_image | awk '{print $2}'
11
+
12
+ clear: |
13
+ docker images | grep $$docker_image | awk '{print $3}' \
14
+ | xargs -I {} bash -c "docker rmi {} | cat || true"
@@ -0,0 +1,44 @@
1
+ create: |
2
+ if [ -e "$$container" ] ; then
3
+ parent_of_@microstep_id="$(readlink $$container)"
4
+ mkdir -p checkpoints
5
+ pushd checkpoints
6
+ rm -f @microstep_id_$${container}
7
+ qemu-img create -f qcow2 "@microstep_id_$${container}" \
8
+ -o backing_file=$(basename "$parent_of_@microstep_id")
9
+ popd
10
+ ln -sf checkpoints/@microstep_id_$$container $$container
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 $$container)"
17
+ fi
18
+
19
+ apply: |
20
+ # apply command use the backing file that represent the real state to restore
21
+ previous_id=$(qemu-img info "checkpoints/@microstep_id_$${container}" \
22
+ | grep backing \
23
+ | sed -e 's/.*checkpoints\/\(.*\)_$${container}\(.*\)/\1/p' \
24
+ | uniq)
25
+
26
+ ln -sf "checkpoints/${previous_id}_$${container}" "$$container"
27
+
28
+ lsmod | grep nbd >/dev/null || modprobe nbd max_part=63
29
+
30
+ echo "sync" ; sync
31
+ qemu-nbd -d $$nbd_device
32
+ qemu-nbd -c $$nbd_device "$(readlink $$container)"
33
+
34
+ clear: |
35
+ if [ -d "checkpoints" ] ; then
36
+ ls checkpoints/ | \
37
+ xargs -I {} bash -c "echo Removing checkpoints/{} ; rm checkpoints/{}"
38
+ rm -f $$container
39
+ fi
40
+
41
+ list: |
42
+ if [ -d "checkpoints" ] ; then
43
+ ls checkpoints/ | sed -e 's/\(.*\)_$${container}/\1/p' | uniq
44
+ fi
@@ -0,0 +1,98 @@
1
+ #==============================================================================
2
+ # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
3
+ #==============================================================================
4
+ #
5
+ # RECIPE: <%= recipe_name %>
6
+ #
7
+ # DESCRIPTION: Build a debian wheezy appliance using chroot and qemu-nbd.
8
+ #
9
+ # TEMPLATE: <%= @name %>
10
+ #
11
+ #==============================================================================
12
+
13
+ ---
14
+ # Loads some helpful aliases
15
+ aliases: defaults.yaml
16
+ # Enables qcow2 checkpoint
17
+ checkpoint: qcow2.yaml
18
+ #== Global variables use by Kameleon engine and the steps
19
+ global:
20
+ ## User varibales : used by the recipe
21
+ cachedir: /var/cache/kameleon
22
+ rootfs: $$kameleon_cwd/rootfs
23
+ user_name: kameleon
24
+ arch: amd64
25
+
26
+ nbd_device: /dev/nbd10
27
+ container: "$${kameleon_recipe_name}_temp.qcow2"
28
+
29
+ distrib: debian
30
+ release: wheezy
31
+
32
+ ## System variables. Required by kameleon engine
33
+ # Include specific steps
34
+ include_steps: [$$distrib/$$release, $$distrib]
35
+
36
+ # Shell session from where we launch exec_out commands. There is often a
37
+ # local bash session, but it can be a remote shell on other machines or on
38
+ # any shell. (eg. bash, chroot, fakechroot, ssh, tmux, lxc...)
39
+ out_context:
40
+ cmd: bash
41
+ workdir: $$kameleon_cwd
42
+
43
+ # Shell session that allows us to connect to the building machine in order to
44
+ # configure it and setup additional programs
45
+ default_env: "USER=root HOME=/root LC_ALL=POSIX"
46
+ in_context:
47
+ cmd: $$default_env chroot $$rootfs bash
48
+ workdir: /
49
+
50
+ #== Bootstrap the new system and create the 'in_context'
51
+ bootstrap:
52
+ - debootstrap:
53
+ - release: $$release
54
+ - arch: $$arch
55
+ - repository: http://ftp.fr.debian.org/debian/
56
+ - rootfs_archive: $$cachedir/$$distrib/$$release/$$arch/debootstrap.tar.gz
57
+ - prepare_appliance_with_nbd:
58
+ - mountdir: $$rootfs
59
+ - image_size: 2G
60
+ - filesystem_type: ext4
61
+ - rootfs_archive: $$cachedir/$$distrib/$$release/$$arch/debootstrap.tar.gz
62
+ - start_chroot:
63
+ - rootfs: $$rootfs
64
+
65
+
66
+ #== Install and configuration steps
67
+ # WARNING: this part should be independante from the build context (whenever
68
+ # possible...)
69
+ setup:
70
+ # Install
71
+ - software_install:
72
+ - packages: >
73
+ debian-keyring ntp zip unzip rsync sudo less vim bash-completion
74
+ - kernel_install:
75
+ - arch: $$arch
76
+ # Configuration
77
+ - system_config:
78
+ - locales: fr_FR en_US
79
+ - lang: fr_FR.UTF-8
80
+ - timezone: Europe/Paris
81
+ - keyboard_config:
82
+ - layout: "fr,us"
83
+ - network_config:
84
+ - hostname: kameleon-$$distrib
85
+ - create_user:
86
+ - name: $$user_name
87
+ - group: admin
88
+ - password: $$user_name
89
+
90
+ #== Export the generated appliance in the format of your choice
91
+ export:
92
+ - save_appliance_from_nbd:
93
+ - filename: "$${kameleon_recipe_name}"
94
+ - save_as_qcow2
95
+ # - save_as_tgz
96
+ # - save_as_raw
97
+ # - save_as_vmdk
98
+ # - save_as_vdi
@@ -0,0 +1,97 @@
1
+ #==============================================================================
2
+ # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
3
+ #==============================================================================
4
+ #
5
+ # RECIPE: <%= recipe_name %>
6
+ #
7
+ # DESCRIPTION: Build a debian wheezy appliance using Docker.
8
+ #
9
+ # TEMPLATE: <%= @name %>
10
+ #
11
+ #==============================================================================
12
+
13
+ ---
14
+ # Loads some helpful aliases
15
+ aliases: defaults.yaml
16
+ # Enables qcow2 checkpoint
17
+ checkpoint: docker.yaml
18
+ #== Global variables use by Kameleon engine and the steps
19
+ global:
20
+ ## User varibales : used by the recipe
21
+ cachedir: /var/cache/kameleon
22
+ user_name: kameleon
23
+ arch: amd64
24
+
25
+ distrib: debian
26
+ release: wheezy
27
+ docker_image: kameleon-$${distrib}-$$release
28
+ # DNS servers : opendns
29
+ docker_dns: 208.67.222.222
30
+
31
+ ## System variables. Required by kameleon engine
32
+ # Include specific steps
33
+ include_steps: [$$distrib/$$release, $$distrib]
34
+
35
+ # Shell session from where we launch exec_out commands. There is often a
36
+ # local bash session, but it can be a remote shell on other machines or on
37
+ # any shell. (eg. bash, chroot, fakechroot, ssh, tmux, lxc...)
38
+ out_context:
39
+ cmd: bash
40
+ workdir: $$kameleon_cwd
41
+
42
+ # Shell session that allows us to connect to the building machine in order to
43
+ # configure it and setup additional programs
44
+ ssh_options: -o StrictHostKeyChecking=no -o ForwardAgent=yes
45
+ ssh_port: $(cat MAIN_CONTAINER_PORT)
46
+ insecure_ssh_key: insecure_ssh_dsa_key
47
+ in_context:
48
+ cmd: LC_ALL=POSIX ssh $$ssh_options localhost -p $$ssh_port -i $$insecure_ssh_key -t /bin/bash
49
+ workdir: /
50
+
51
+ #== Bootstrap the new system and create the 'in_context'
52
+ bootstrap:
53
+ - debootstrap:
54
+ - release: $$release
55
+ - arch: $$arch
56
+ - repository: http://ftp.fr.debian.org/debian/
57
+ - rootfs_archive: $$cachedir/$$distrib/$$release/$$arch/debootstrap.tar.gz
58
+ - prepare_docker:
59
+ - image: $$docker_image
60
+ - dns: $$docker_dns
61
+ - rootfs_archive: $$cachedir/$$distrib/$$release/$$arch/debootstrap.tar.gz
62
+ - start_docker:
63
+ - image: $$docker_image
64
+ - dns: $$docker_dns
65
+ - hostname: kameleon-$$distrib
66
+
67
+ #== Install and configuration steps
68
+ # WARNING: this part should be independante from the build context (whenever
69
+ # possible...)
70
+ setup:
71
+ # Install
72
+ - software_install:
73
+ - packages: >
74
+ debian-keyring ntp zip unzip rsync sudo less vim bash-completion
75
+ extlinux
76
+ - kernel_install:
77
+ - arch: $$arch
78
+ # Configuration
79
+ - system_config:
80
+ - locales: fr_FR en_US
81
+ - lang: fr_FR.UTF-8
82
+ - timezone: Europe/Paris
83
+ - keyboard_config:
84
+ - layout: "fr,us"
85
+ - create_user:
86
+ - name: $$user_name
87
+ - group: admin
88
+ - password: $$user_name
89
+
90
+ #== Export the generated appliance in the format of your choice
91
+ export:
92
+ - build_appliance_from_docker:
93
+ - mountdir: $$kameleon_cwd/rootfs
94
+ - filename: $$kameleon_recipe_name
95
+ - filesystem_type: ext4
96
+ - format: qcow2 # Should be raw, qcow2 or qed format
97
+ - image_size: 2G
@@ -0,0 +1,96 @@
1
+ #==============================================================================
2
+ # vim: softtabstop=2 shiftwidth=2 expandtab fenc=utf-8 cc=81 tw=80
3
+ #==============================================================================
4
+ #
5
+ # RECIPE: <%= recipe_name %>
6
+ #
7
+ # DESCRIPTION: Fedora base image [Working progress].
8
+ #
9
+ # TEMPLATE: <%= @name %>
10
+ #
11
+ #==============================================================================
12
+
13
+ ---
14
+ # Loads some helpful aliases
15
+ aliases: defaults.yaml
16
+ # Enables qcow2 checkpoint
17
+ checkpoint: docker.yaml
18
+ #== Global variables use by Kameleon engine and the steps
19
+ global:
20
+ ## User varibales : used by the recipe
21
+ cachedir: /var/cache/kameleon
22
+ user_name: kameleon
23
+ arch: x86_64
24
+
25
+ distrib: fedora
26
+ release: 20
27
+ docker_image: kameleon-$${distrib}-$$release
28
+ # DNS servers : opendns
29
+ docker_dns: 208.67.222.222
30
+
31
+ ## System variables. Required by kameleon engine
32
+ # Include specific steps
33
+ include_steps: [$$distrib/$$release, $$distrib]
34
+
35
+ # Shell session from where we launch exec_out commands. There is often a
36
+ # local bash session, but it can be a remote shell on other machines or on
37
+ # any shell. (eg. bash, chroot, fakechroot, ssh, tmux, lxc...)
38
+ out_context:
39
+ cmd: bash
40
+ workdir: $$kameleon_cwd
41
+
42
+ # Shell session that allows us to connect to the building machine in order to
43
+ # configure it and setup additional programs
44
+ ssh_options: -o StrictHostKeyChecking=no -o ForwardAgent=yes
45
+ ssh_port: $(cat MAIN_CONTAINER_PORT)
46
+ insecure_ssh_key: insecure_ssh_dsa_key
47
+ in_context:
48
+ cmd: LC_ALL=POSIX ssh $$ssh_options localhost -p $$ssh_port -i $$insecure_ssh_key -t /bin/bash
49
+ workdir: /
50
+
51
+ #== Bootstrap the new system and create the 'in_context'
52
+ bootstrap:
53
+ - docker_bootstrap:
54
+ - release: $$release
55
+ - rootfs_archive: $$cachedir/$$distrib/$$release/$$arch/bootstrap.tar.gz
56
+ - dns: $$docker_dns
57
+ - prepare_docker:
58
+ - rootfs_archive: $$cachedir/$$distrib/$$release/$$arch/bootstrap.tar.gz
59
+ - image: $$docker_image
60
+ - dns: $$docker_dns
61
+ - start_docker:
62
+ - image: $$docker_image
63
+ - dns: $$docker_dns
64
+ - hostname: kameleon-$$distrib
65
+
66
+ #== Install and configuration steps
67
+ # WARNING: this part should be independante from the build context (whenever
68
+ # possible...)
69
+ setup:
70
+ # Install
71
+ - software_install:
72
+ - packages: >
73
+ ntp zip unzip rsync sudo less vim bash-completion wget
74
+ - group_packages: >
75
+ "Development Tools"
76
+ - kernel_install
77
+ # # Configuration
78
+ # - system_config:
79
+ # - locales: fr_FR en_US
80
+ # - lang: fr_FR.UTF-8
81
+ # - timezone: Europe/Paris
82
+ # - keyboard_config:
83
+ # - layout: "fr,us"
84
+ - create_user:
85
+ - name: $$user_name
86
+ - group: admin
87
+ - password: $$user_name
88
+
89
+ #== Export the generated appliance in the format of your choice
90
+ export:
91
+ - build_appliance_from_docker:
92
+ - mountdir: $$kameleon_cwd/rootfs
93
+ - filename: $$kameleon_recipe_name
94
+ - filesystem_type: ext4
95
+ - format: qcow2 # Should be raw, qcow2 or qed format
96
+ - image_size: 2G