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,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
|