cluster-deployment/src/run.sh

139 lines
4.1 KiB
Bash
Raw Normal View History

2021-11-25 23:44:31 +00:00
#!/usr/bin/env bash
if [[ "${EUID}" -ne 0 ]]; then
echo "This script must be run as root." >&2;
exit 1;
fi
###############################################################################
2021-11-26 00:06:18 +00:00
step_current="0";
step_max="1";
###############################################################################
2021-11-25 23:44:31 +00:00
###
# Load the lantern build engine
###
# Make sure the current directory is the location of this script to simplify matters
cd "$(dirname "$(readlink -f "$0")")" || { echo "Error: Failed to cd to script directory" >&2; exit 1; };
lantern_path="lib/lantern-build-engine/";
# Check out the lantern git submodule if needed
if [ ! -f "${lantern_path}/lantern.sh" ]; then git submodule update --init "${lantern_path}"; fi
#shellcheck disable=SC1090
source "${lantern_path}/lantern.sh";
2021-11-26 00:06:18 +00:00
#shellcheck disable=SC1090
source "/etc/os-release";
###############################################################################
###############################################################################
ask_yesno() {
local question="$1";
whiptail --title "Step ${step_current} / ${step_max}" --yesno "${question}" 40 8;
return "$?"; # Not actually needed, but best to be explicit
}
queue_postinstall_step() {
local stepname="$1";
echo "${stepname}" >>"${temp_dir}/steps-postinstall.txt";
}
queue_preinstall_step() {
local stepname="$1";
echo "${stepname}" >>"${temp_dir}/steps-preinstall.txt";
}
queue_apt_install() {
for package_name in "$@"; do
subtask_begin "[apt] Queueing install of ${package_name}";
echo "${package_name}" >>"${temp_dir}/apt-packages.txt";
subtask_end "$?";
done
}
2021-11-26 21:56:08 +00:00
queue_firewall_rule() {
local rule="$*";
subtask_begin "[firewall] Queuing firewall rule ${rule}";
echo "${rule}" >>"${temp_dir}/ufw-rules.txt";
subtask_end "$?";
}
###############################################################################
# ███████ ████████ ███████ ██████ ██████
# ██ ██ ██ ██ ██ ██ ████
# ███████ ██ █████ ██████ ██ ██ ██
# ██ ██ ██ ██ ████ ██
# ███████ ██ ███████ ██ ██████
stage_begin "Preparing to provision host";
task_begin "Creating temporary directory";
temp_dir="$(mktemp --tmpdir -d "sbrl-provisioning-XXXXXXX")";
on_exit() {
task_begin "Cleaning up";
rm -rf "${temp_dir}";
}
trap on_exit EXIT;
task_end "$?";
task_begin "Setting initial state";
cat apt-packages.txt >"${temp_dir}/apt-packages.txt";
queue_preinstall_step "10-apt-update.sh";
queue_postinstall_step "100-ssh-cluster-config.sh";
task_end "$?";
stage_end "$?";
2021-11-25 23:44:31 +00:00
###############################################################################
2021-11-26 00:06:18 +00:00
# ███████ ████████ ███████ ██████ ██
# ██ ██ ██ ██ ██ ███
# ███████ ██ █████ ██████ ██
# ██ ██ ██ ██ ██
# ███████ ██ ███████ ██ ██
step_current="1";
stage_begin "Configuring software choices";
2021-11-26 00:06:18 +00:00
if ask_yesno "Use apt cache?"; then
source ./steps-config/10-apt-cache.sh;
fi
if ask_yesno "Install Docker?"; then
source ./steps-config/10-docker.sh;
2021-11-26 00:06:18 +00:00
fi
stage_end "$?";
###############################################################################
while read -r preinstall_step; do
#shellcheck disable=SC1090
source "steps-preinstall/${preinstall_step}";
done < <(cat "${temp_dir}/steps-preinstall.txt");
###############################################################################
apt-get install "$(cat "${temp_dir}/apt-packages.txt")";
###############################################################################
while read -r postinstall_step; do
#shellcheck disable=SC1090
source "steps-postinstall/${postinstall_step}";
done < <(cat "${temp_dir}/steps-postinstall.txt");