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.
- 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,31 +1,44 @@
|
|
1
1
|
write_local:
|
2
2
|
- exec_local: |
|
3
3
|
mkdir -p $(dirname @1);
|
4
|
-
cat >@1
|
4
|
+
cat >@1 <<EOF
|
5
|
+
@2
|
6
|
+
EOF
|
5
7
|
|
6
8
|
write_in:
|
7
9
|
- exec_in: |
|
8
10
|
mkdir -p $(dirname @1);
|
9
|
-
cat >@1
|
11
|
+
cat >@1 <<EOF
|
12
|
+
@2
|
13
|
+
EOF
|
10
14
|
|
11
15
|
write_out:
|
12
16
|
- exec_out: |
|
13
17
|
mkdir -p $(dirname @1);
|
14
|
-
cat >@1
|
18
|
+
cat >@1 <<EOF
|
19
|
+
@2
|
20
|
+
EOF
|
15
21
|
|
16
22
|
append_local:
|
17
23
|
- exec_local: |
|
18
24
|
mkdir -p $(dirname @1);
|
19
|
-
cat >>@1
|
25
|
+
cat >>@1 <<EOF
|
26
|
+
@2
|
27
|
+
EOF
|
28
|
+
|
20
29
|
append_in:
|
21
30
|
- exec_in: |
|
22
31
|
mkdir -p $(dirname @1);
|
23
|
-
cat >>@1
|
32
|
+
cat >>@1 <<EOF
|
33
|
+
@2
|
34
|
+
EOF
|
24
35
|
|
25
36
|
append_out:
|
26
37
|
- exec_out: |
|
27
38
|
mkdir -p $(dirname @1);
|
28
|
-
cat
|
39
|
+
cat >@1 <<EOF
|
40
|
+
@2
|
41
|
+
EOF
|
29
42
|
|
30
43
|
local2out:
|
31
44
|
- exec_out: |
|
@@ -66,18 +79,30 @@ in2out:
|
|
66
79
|
|
67
80
|
check_cmd_out:
|
68
81
|
- on_bootstrap_init:
|
69
|
-
- rescue:
|
82
|
+
- rescue:
|
70
83
|
- exec_out: command -V @1 2> /dev/null
|
71
|
-
- breakpoint: "@1 is missing"
|
84
|
+
- breakpoint: "@1 is missing from out_context"
|
72
85
|
|
73
86
|
check_cmd_local:
|
74
87
|
- on_bootstrap_init:
|
75
|
-
- rescue:
|
88
|
+
- rescue:
|
76
89
|
- exec_local: command -V @1 2> /dev/null
|
77
|
-
- breakpoint: "@1 is missing"
|
90
|
+
- breakpoint: "@1 is missing from local_context"
|
78
91
|
|
79
92
|
check_cmd_in:
|
80
93
|
- on_bootstrap_init:
|
81
|
-
- rescue:
|
94
|
+
- rescue:
|
82
95
|
- exec_in: command -V @1 2> /dev/null
|
83
|
-
- breakpoint: "@1 is missing"
|
96
|
+
- breakpoint: "@1 is missing from in_context"
|
97
|
+
|
98
|
+
umount_out:
|
99
|
+
- exec_out: |
|
100
|
+
echo "try umount @1..." ; mountpoint -q "@1" && umount -f -l "@1" || true
|
101
|
+
|
102
|
+
umount_local:
|
103
|
+
- exec_local: |
|
104
|
+
echo "try umount @1..." ; mountpoint -q "@1" && umount -f -l "@1" || true
|
105
|
+
|
106
|
+
umount_in:
|
107
|
+
- exec_in: |
|
108
|
+
echo "try umount @1..." ; mountpoint -q "@1" && umount -f -l "@1" || true
|
@@ -0,0 +1,219 @@
|
|
1
|
+
# Arch-bootstrap
|
2
|
+
#
|
3
|
+
# Call the arch-bootstrap.sh script to bootstrap an archlinux distro from
|
4
|
+
# any GNU system
|
5
|
+
|
6
|
+
# You can choose any group from https://www.archlinux.org/groups/
|
7
|
+
# It's recommended to use 'base' (default) or 'base-devel' (with dev tools)
|
8
|
+
|
9
|
+
- pkg_group: base
|
10
|
+
|
11
|
+
- enable_cache: true
|
12
|
+
|
13
|
+
- import_script:
|
14
|
+
- exec_out: |
|
15
|
+
cat > $$kameleon_cwd/arch-bootstrap.sh <<'EOF'
|
16
|
+
#!/bin/bash
|
17
|
+
#
|
18
|
+
# arch-bootstrap: Bootstrap a base Arch Linux system using any GNU distribution.
|
19
|
+
#
|
20
|
+
# Dependencies: bash >= 4, coreutils, wget, sed, gawk, tar, gzip, chroot, xz.
|
21
|
+
# Project: https://github.com/tokland/arch-bootstrap
|
22
|
+
#
|
23
|
+
# Install:
|
24
|
+
#
|
25
|
+
# # install -m 755 arch-bootstrap.sh /usr/local/bin/arch-bootstrap
|
26
|
+
#
|
27
|
+
# Some examples:
|
28
|
+
#
|
29
|
+
# # arch-bootstrap destination
|
30
|
+
# # arch-bootstrap -a x86_64 -r ftp://ftp.archlinux.org destination-x86_64
|
31
|
+
#
|
32
|
+
# And then you can chroot to the destination directory (root/root):
|
33
|
+
#
|
34
|
+
# # chroot destination
|
35
|
+
|
36
|
+
set -e -u -o pipefail
|
37
|
+
|
38
|
+
# Packages needed by pacman (see get-pacman-dependencies.sh)
|
39
|
+
PACMAN_PACKAGES=(
|
40
|
+
acl archlinux-keyring attr bzip2 curl expat glibc gpgme libarchive
|
41
|
+
libassuan libgpg-error libssh2 lzo2 openssl pacman pacman-mirrorlist xz
|
42
|
+
zlib krb5 e2fsprogs keyutils openssh
|
43
|
+
)
|
44
|
+
BASIC_PACKAGES=(${PACMAN_PACKAGES[*]} filesystem)
|
45
|
+
EXTRA_PACKAGES=(
|
46
|
+
$$pkg_group haveged syslinux
|
47
|
+
)
|
48
|
+
DEFAULT_REPO_URL="http://mirrors.kernel.org/archlinux"
|
49
|
+
DEFAULT_ARCH=`uname -m`
|
50
|
+
|
51
|
+
# Output to standard error
|
52
|
+
stderr() { echo "$@" >&2; }
|
53
|
+
|
54
|
+
# Output debug message to standard error
|
55
|
+
debug() { echo "--- $@"; }
|
56
|
+
|
57
|
+
# Extract href attribute from HTML link
|
58
|
+
extract_href() { sed -n '/<a / s/^.*<a [^>]*href="\([^\"]*\)".*$/\1/p'; }
|
59
|
+
|
60
|
+
# Simple wrapper around wget
|
61
|
+
fetch() { wget -c --passive-ftp --quiet "$@"; }
|
62
|
+
|
63
|
+
# Extract FILEPATH gz/xz archive to DEST directory
|
64
|
+
uncompress() {
|
65
|
+
local FILEPATH=$1 DEST=$2
|
66
|
+
|
67
|
+
case "$FILEPATH" in
|
68
|
+
*.gz) tar xzf "$FILEPATH" -C "$DEST";;
|
69
|
+
*.xz) xz -dc "$FILEPATH" | tar x -C "$DEST";;
|
70
|
+
*) debug "Error: unknown package format: $FILEPATH"
|
71
|
+
return 1;;
|
72
|
+
esac
|
73
|
+
}
|
74
|
+
|
75
|
+
###
|
76
|
+
|
77
|
+
configure_pacman() {
|
78
|
+
local DEST=$1 ARCH=$2
|
79
|
+
debug "configure DNS and pacman"
|
80
|
+
cp "/etc/resolv.conf" "$DEST/etc/resolv.conf"
|
81
|
+
echo "Server = $REPO_URL/\$repo/os/$ARCH" >> "$DEST/etc/pacman.d/mirrorlist"
|
82
|
+
}
|
83
|
+
|
84
|
+
configure_minimal_system() {
|
85
|
+
local DEST=$1
|
86
|
+
|
87
|
+
mkdir -p "$DEST/dev"
|
88
|
+
echo "root:x:0:0:root:/root:/bin/bash" > "$DEST/etc/passwd"
|
89
|
+
echo 'root:$1$GT9AUpJe$oXANVIjIzcnmOpY07iaGi/:14657::::::' > "$DEST/etc/shadow"
|
90
|
+
touch "$DEST/etc/group"
|
91
|
+
echo "bootstrap" > "$DEST/etc/hostname"
|
92
|
+
|
93
|
+
test -e "$DEST/etc/mtab" || echo "rootfs / rootfs rw 0 0" > "$DEST/etc/mtab"
|
94
|
+
test -e "$DEST/dev/null" || mknod "$DEST/dev/null" c 1 3
|
95
|
+
test -e "$DEST/dev/random" || mknod -m 0644 "$DEST/dev/random" c 1 8
|
96
|
+
test -e "$DEST/dev/urandom" || mknod -m 0644 "$DEST/dev/urandom" c 1 9
|
97
|
+
|
98
|
+
sed -i "s/^[[:space:]]*\(CheckSpace\)/# \1/" "$DEST/etc/pacman.conf"
|
99
|
+
sed -i "s/^[[:space:]]*SigLevel[[:space:]]*=.*$/SigLevel = Never/" "$DEST/etc/pacman.conf"
|
100
|
+
}
|
101
|
+
|
102
|
+
fetch_packages_list() {
|
103
|
+
local REPO=$1
|
104
|
+
|
105
|
+
debug "fetch packages list: $REPO/"
|
106
|
+
# Force trailing '/' needed by FTP servers.
|
107
|
+
fetch -O - "$REPO/" | extract_href | awk -F"/" '{print $NF}' | sort -rn ||
|
108
|
+
{ debug "Error: cannot fetch packages list: $REPO"; return 1; }
|
109
|
+
}
|
110
|
+
|
111
|
+
install_pacman_packages() {
|
112
|
+
local BASIC_PACKAGES=$1 DEST=$2 LIST=$3 PACKDIR=$4
|
113
|
+
debug "pacman package and dependencies: $BASIC_PACKAGES"
|
114
|
+
|
115
|
+
for PACKAGE in $BASIC_PACKAGES; do
|
116
|
+
local FILE=$(echo "$LIST" | grep -m1 "^$PACKAGE-[[:digit:]].*\(\.gz\|\.xz\)$")
|
117
|
+
test "$FILE" || { debug "Error: cannot find package: $PACKAGE"; return 1; }
|
118
|
+
local FILEPATH="$PACKDIR/$FILE"
|
119
|
+
|
120
|
+
debug "download package: $REPO/$FILE"
|
121
|
+
fetch -O "$FILEPATH" "$REPO/$FILE"
|
122
|
+
debug "uncompress package: $FILEPATH"
|
123
|
+
uncompress "$FILEPATH" "$DEST"
|
124
|
+
done
|
125
|
+
}
|
126
|
+
|
127
|
+
install_packages() {
|
128
|
+
local ARCH=$1 DEST=$2 PACKAGES=$3
|
129
|
+
debug "install packages: $PACKAGES"
|
130
|
+
mount -t proc /proc $DEST/proc
|
131
|
+
mount /dev $DEST/dev -o bind
|
132
|
+
LC_ALL=C chroot "$DEST" /usr/bin/pacman \
|
133
|
+
--noconfirm --arch $ARCH -Sy --force $PACKAGES
|
134
|
+
sync
|
135
|
+
umount $DEST/{proc,dev}
|
136
|
+
}
|
137
|
+
|
138
|
+
show_usage() {
|
139
|
+
stderr "show_usage: $(basename "$0") [-a i686|x86_64] [-r REPO_URL] DIRECTORY"
|
140
|
+
}
|
141
|
+
|
142
|
+
main() {
|
143
|
+
# Process arguments and options
|
144
|
+
test $# -eq 0 && set -- "-h"
|
145
|
+
local ARCH=$DEFAULT_ARCH
|
146
|
+
local REPO_URL=$DEFAULT_REPO_URL
|
147
|
+
|
148
|
+
while getopts "a:r:h" ARG; do
|
149
|
+
case "$ARG" in
|
150
|
+
a) ARCH=$OPTARG;;
|
151
|
+
r) REPO_URL=$OPTARG;;
|
152
|
+
*) show_usage; return 1;;
|
153
|
+
esac
|
154
|
+
done
|
155
|
+
shift $(($OPTIND-1))
|
156
|
+
test $# -eq 1 || { show_usage; return 1; }
|
157
|
+
|
158
|
+
local DEST=$1
|
159
|
+
local REPO="${REPO_URL%/}/core/os/$ARCH"
|
160
|
+
local PACKDIR=$(mktemp -d)
|
161
|
+
trap "rm -rf '$PACKDIR'" KILL TERM EXIT
|
162
|
+
debug "destination directory: $DEST"
|
163
|
+
debug "core repository: $REPO"
|
164
|
+
debug "temporary directory: $PACKDIR"
|
165
|
+
|
166
|
+
# Fetch packages, install and do a minimal system configuration
|
167
|
+
mkdir -p "$DEST"
|
168
|
+
local LIST=$(fetch_packages_list $REPO)
|
169
|
+
install_pacman_packages "${BASIC_PACKAGES[*]}" "$DEST" "$LIST" "$PACKDIR"
|
170
|
+
configure_pacman "$DEST" "$ARCH"
|
171
|
+
configure_minimal_system "$DEST"
|
172
|
+
install_packages "$ARCH" "$DEST" "${BASIC_PACKAGES[*]} ${EXTRA_PACKAGES[*]}"
|
173
|
+
configure_pacman "$DEST" "$ARCH" # Pacman must be re-configured
|
174
|
+
rm -rf "$PACKDIR"
|
175
|
+
|
176
|
+
debug "done"
|
177
|
+
}
|
178
|
+
|
179
|
+
main "$@"
|
180
|
+
EOF
|
181
|
+
|
182
|
+
- call_arch_boostrap:
|
183
|
+
- exec_out: |
|
184
|
+
if [ $$enable_cache = true ]; then
|
185
|
+
[[ ! -f "$$rootfs_download_path/.kameleon_timestamp" ]] || CACHE_AVAILABLE=1
|
186
|
+
fi
|
187
|
+
[[ -n $CACHE_AVAILABLE ]] || \
|
188
|
+
bash $$kameleon_cwd/arch-bootstrap.sh -a $$arch -r $$mirror $$rootfs_download_path \
|
189
|
+
&& date +%s > $$rootfs_download_path/.kameleon_timestamp
|
190
|
+
- on_clean:
|
191
|
+
- umount_out: $$rootfs_download_path/proc
|
192
|
+
- umount_out: $$rootfs_download_path/dev
|
193
|
+
|
194
|
+
- enable_sshd_service:
|
195
|
+
- exec_out: |
|
196
|
+
chroot $$rootfs_download_path \
|
197
|
+
ln -sf \
|
198
|
+
'/usr/lib/systemd/system/sshd.service' \
|
199
|
+
'/etc/systemd/system/multi-user.target.wants/sshd.service'
|
200
|
+
|
201
|
+
- enable_dhcp_service:
|
202
|
+
- exec_out: |
|
203
|
+
chroot $$rootfs_download_path \
|
204
|
+
ln -sf \
|
205
|
+
'/usr/lib/systemd/system/dhcpcd.service' \
|
206
|
+
'/etc/systemd/system/multi-user.target.wants/dhcpcd.service'
|
207
|
+
|
208
|
+
- add_nobody_user: ## To allow sshd to run correctly
|
209
|
+
- exec_out: echo "nobody:x:99:99:nobody:/:/bin/false" >> $$rootfs_download_path/etc/passwd
|
210
|
+
- exec_out: echo "nobody:x:99:" >> $$rootfs_download_path/etc/group
|
211
|
+
- exec_out: echo "nobody:x:14871::::::" >> $$rootfs_download_path/etc/shadow
|
212
|
+
|
213
|
+
- configure_pacman:
|
214
|
+
- on_setup_init:
|
215
|
+
# init pacman keyring
|
216
|
+
- exec_in: haveged -w 1024
|
217
|
+
- exec_in: pacman-key --init
|
218
|
+
- exec_in: pkill haveged
|
219
|
+
- exec_in: pacman-key --populate archlinux
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# Install extlinux bootloader
|
2
|
+
|
3
|
+
- install_bootloader:
|
4
|
+
- rescue:
|
5
|
+
- exec_out: LC_ALL=POSIX chroot $$rootfs bash -c "command -V extlinux 2> /dev/null"
|
6
|
+
- breakpoint: "extlinux is missing"
|
7
|
+
- exec_out: cp -r $$rootfs/usr/lib/syslinux/bios/*.c32 $$rootfs/boot/syslinux/
|
8
|
+
- exec_out: LC_ALL=POSIX chroot $$rootfs extlinux --install /boot/syslinux 2>&1
|
9
|
+
- exec_out: |
|
10
|
+
MBR_PATH=
|
11
|
+
PATHS=("$$rootfs/usr/share/syslinux/mbr.bin"
|
12
|
+
"$$rootfs/usr/lib/bios/syslinux/mbr.bin"
|
13
|
+
"$$rootfs/usr/lib/syslinux/bios/mbr.bin"
|
14
|
+
"$$rootfs/usr/lib/extlinux/mbr.bin"
|
15
|
+
"$$rootfs/usr/lib/syslinux/mbr.bin")
|
16
|
+
for element in "${PATHS[@]}"
|
17
|
+
do
|
18
|
+
if [ -f "$element" ]; then
|
19
|
+
MBR_PATH="$element"
|
20
|
+
break
|
21
|
+
fi
|
22
|
+
done
|
23
|
+
if [ "$MBR_PATH" == "" ]; then
|
24
|
+
fail "unable to locate the extlinux mbr"
|
25
|
+
else
|
26
|
+
dd if="$MBR_PATH" of="$$nbd_device" bs=440 2>&1
|
27
|
+
fi
|
28
|
+
- exec_out: echo " sync..." ; sync
|
29
|
+
- write_out:
|
30
|
+
- $$rootfs/boot/syslinux/syslinux.cfg
|
31
|
+
- |
|
32
|
+
default kameleon
|
33
|
+
timeout 5
|
34
|
+
|
35
|
+
label kameleon
|
36
|
+
kernel ../`basename $$rootfs/boot/vmlinuz*`
|
37
|
+
initrd ../`basename $$rootfs/boot/init*`
|
38
|
+
# the net.ifnames option is disable to get default net interface
|
39
|
+
# names according to this page:
|
40
|
+
# https://wiki.archlinux.org/index.php/Network_Configuration#Device_names
|
41
|
+
append root=UUID=`blkid -s UUID -o value $${nbd_device}p1` rw net.ifnames=0
|
42
|
+
- exec_out: echo " sync..." ; sync
|
43
|
+
- on_bootstrap_clean:
|
44
|
+
- exec_out: |
|
45
|
+
dir=$$rootfs/var/lib/os-prober/mount
|
46
|
+
test ! -d "$dir" || (umount -f -l "$dir" && rmdir "$dir")
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# Populate disk
|
2
|
+
#
|
3
|
+
# This step is partionning and populating the disk
|
4
|
+
|
5
|
+
- partition_disk:
|
6
|
+
- check_cmd_out: parted
|
7
|
+
- exec_out: |
|
8
|
+
echo "Partitioning disk..."
|
9
|
+
parted $${device} mklabel msdos
|
10
|
+
parted $${device} mkpart primary 0% 100%
|
11
|
+
parted $${device} set 1 boot on
|
12
|
+
- exec_out: |
|
13
|
+
echo Creating root partition...
|
14
|
+
mkfs.$$filesystem_type -q $${device}p1 || fail cannot create / ext4
|
15
|
+
|
16
|
+
- mount_mountdir:
|
17
|
+
- on_checkpoint: redo
|
18
|
+
- exec_out: mkdir -p $$mountdir
|
19
|
+
- exec_out: "echo Mounting root partition... ; mount $${device}p1 $$mountdir || fail cannot mount /"
|
20
|
+
- on_export_clean:
|
21
|
+
- exec_out: "echo try umount $$mountdir... ; mountpoint -q $$mountdir && umount -f -l $$mountdir || true"
|
22
|
+
|
23
|
+
- copy_rootfs:
|
24
|
+
- check_cmd_out: rsync
|
25
|
+
- exec_out: rsync -aAX $$rootfs_cache/* $$rootfs
|
26
|
+
- exec_out: echo "sync..." ; sync
|
27
|
+
|
28
|
+
- create_fstab:
|
29
|
+
- write_out:
|
30
|
+
- $$mountdir/etc/fstab
|
31
|
+
- |
|
32
|
+
# /etc/fstab: static file system information.
|
33
|
+
#
|
34
|
+
# Use 'blkid' to print the universally unique identifier for a
|
35
|
+
# device; this may be used with UUID= as a more robust way to name devices
|
36
|
+
# that works even if disks are added and removed. See fstab(5).
|
37
|
+
#
|
38
|
+
# <file system> <mount point> <type> <options> <dump> <pass>
|
39
|
+
UUID=`blkid -s UUID -o value $${device}p1` / $$filesystem_type errors=remount-ro 0 1
|
@@ -1,13 +1,21 @@
|
|
1
1
|
# # Bootstrap
|
2
|
-
-
|
3
|
-
|
4
|
-
net-tools iproute acpid openssh-server pciutils
|
2
|
+
- enable_cache: true
|
3
|
+
|
5
4
|
- debootstrap:
|
6
5
|
- check_cmd_out: debootstrap
|
7
|
-
- exec_out: mkdir -p
|
8
|
-
- exec_out:
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
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
|
+
- exec_out: cat /etc/resolv.conf > $$rootfs_download_path/etc/resolv.conf
|
15
|
+
- write_out:
|
16
|
+
- $$rootfs_download_path/etc/network/interfaces
|
17
|
+
- |
|
18
|
+
auto lo
|
19
|
+
iface lo inet loopback
|
20
|
+
auto eth0
|
21
|
+
iface eth0 inet dhcp
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# # Bootstrap
|
2
|
+
- enable_cache: true
|
3
|
+
|
4
|
+
- debootstrap:
|
5
|
+
- check_cmd_out: debootstrap
|
6
|
+
- check_cmd_out: qemu-arm-static
|
7
|
+
- exec_out: |
|
8
|
+
if [ $$enable_cache = true ]; then
|
9
|
+
[[ ! -f "$$rootfs_download_path/.kameleon_timestamp" ]] || CACHE_AVAILABLE=1
|
10
|
+
fi
|
11
|
+
if [ -n $CACHE_AVAILABLE ]; then
|
12
|
+
mkdir -p $$rootfs_download_path
|
13
|
+
debootstrap --no-check-gpg --foreign --variant=minbase --arch=$$arch --include="$$include_pkg" $$release $$rootfs_download_path $$repository
|
14
|
+
QEMU_USER_PATH=$(which qemu-arm-static)
|
15
|
+
cp $QEMU_USER_PATH $$rootfs_download_path/usr/bin/qemu-arm-static
|
16
|
+
chroot $$rootfs_download_path /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/sh /debootstrap/debootstrap --second-stage
|
17
|
+
echo "deb $$repository wheezy main contrib non-free" > $$rootfs_download_path/etc/apt/sources.list
|
18
|
+
chroot $$rootfs_download_path /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/sh apt-get update
|
19
|
+
chroot $$rootfs_download_path /usr/bin/qemu-arm-static -cpu cortex-a9 /bin/sh apt-get install -y --force-yes vim
|
20
|
+
date +%s > $$rootfs_download_path/.kameleon_timestamp
|
21
|
+
fi
|
22
|
+
- exec_out: false
|
23
|
+
- exec_out: date +%s > $$rootfs_download_path/.kameleon_timestamp
|
24
|
+
- exec_out: cat /etc/resolv.conf > $$rootfs_download_path/etc/resolv.conf
|
25
|
+
- write_out:
|
26
|
+
- $$rootfs_download_path/etc/network/interfaces
|
27
|
+
- |
|
28
|
+
auto lo
|
29
|
+
iface lo inet loopback
|
30
|
+
auto eth0
|
31
|
+
iface eth0 inet dhcp
|