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

94 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
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"
}
function cleanup_shared {
rm -rf "$SCRIPT_PATH"/shared
}
unset FORCE_PROVISION
while getopts 'f' OPTION; do
case "$OPTION" in
f)
FORCE_PROVISION=0
;;
?)
echo "script usage: $(basename $0) [-f]" >&2
exit 1
;;
esac
done
shift "$(($OPTIND -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
# need to make a temporary local copy of the ../shared directory (and clean it up when we're done)
cleanup_shared
cp -r "$SCRIPT_PATH"/../shared "$SCRIPT_PATH"/
YML_IMAGE_VERSION="$(grep -P "^\s+image:\s*malcolm" "$SCRIPT_PATH"/../docker-compose-standalone.yml | awk '{print $2}' | cut -d':' -f2 | uniq -c | sort -nr | awk '{print $2}' | head -n 1)"
[[ -n $YML_IMAGE_VERSION ]] && echo "$YML_IMAGE_VERSION" > "$SCRIPT_PATH"/shared/version.txt
[[ ${#MAXMIND_GEOIP_DB_LICENSE_KEY} -gt 1 ]] && echo "$MAXMIND_GEOIP_DB_LICENSE_KEY" > "$SCRIPT_PATH"/shared/maxmind_license.txt
trap cleanup_shared EXIT
vm_execute "sudo bash -c \"whoami && cd /sensor-build && pwd && ./build.sh\""
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
popd