Files
DetectionLab/Vagrant/resources/malcolm/malcolm-iso/build_via_vagrant.sh
2021-08-06 10:35:01 +02:00

88 lines
2.0 KiB
Bash
Executable File

#!/bin/bash
unset FORCE_PROVISION
DOCKER_IMAGES_TGZ=""
while getopts fd: opts; do
case ${opts} in
d) DOCKER_IMAGES_TGZ=${OPTARG} ;;
f) FORCE_PROVISION=0 ;;
esac
done
SCRIPT_PATH="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
function vm_state() {
vagrant status --machine-readable | grep ",state," | egrep -o '([a-z_]*)$'
}
function vm_is_running() {
STATE="$(vm_state)"
if [[ "$STATE" == "running" ]] ; then
return 0
else
return 1
fi
}
function vm_execute() {
echo "Running $1" >&2
vagrant ssh --no-tty --command "$1"
}
pushd "$SCRIPT_PATH"/vagrant
VM_NAME="$(grep "config.vm.box" Vagrantfile | tr -d "[:space:]" | sed "s/.*=//")"
if [[ -n $FORCE_PROVISION ]]; then
echo "Destroying build machine to force provisioning..." >&2
vagrant destroy -f
sleep 1
fi
# make sure the VM is up and running, or start it otherwise
if ! vm_is_running; then
echo "Starting build machine..." >&2
vagrant up
NEED_SHUTDOWN=true
sleep 1
fi
until vm_is_running; do
echo "Waiting for $VM_NAME..." >&2
sleep 1
done
echo "$VM_NAME is running!" >&2
# make sure we can connect via SSH
echo "Checking SSH availability..." >&2
until vm_execute 'sudo whoami' | grep -q "root" ; do
echo "Waiting for SSH availability..." >&2
sleep 1
done
echo "SSH available." >&2
if [[ -r "$DOCKER_IMAGES_TGZ" ]]; then
DOCKER_IMAGES_LOCAL="$SCRIPT_PATH/../$(basename "$DOCKER_IMAGES_TGZ")"
DOCKER_IMAGES_TGZ_REMOTE="/malcolm-build/$(basename "$DOCKER_IMAGES_TGZ")"
cp -v "$DOCKER_IMAGES_TGZ" "$DOCKER_IMAGES_LOCAL"
else
DOCKER_IMAGES_LOCAL=""
DOCKER_IMAGES_TGZ_REMOTE=""
fi
vm_execute "sudo bash -c \"whoami && cd /malcolm-build/malcolm-iso && pwd && ./build.sh -d \\\"$DOCKER_IMAGES_TGZ_REMOTE\\\"\""
if [[ -n $NEED_SHUTDOWN ]]; then
echo "Shutting down $VM_NAME..." >&2
vagrant halt
sleep 1
while vm_is_running; do
echo "Waiting for $VM_NAME to shutdown..." >&2
sleep 1
done
echo "$VM_NAME is stopped." >&2
fi
[[ -r "$DOCKER_IMAGES_LOCAL" ]] && rm -vf "$DOCKER_IMAGES_LOCAL"
popd