--- /dev/null
+#!/bin/bash
+signerLocation=self
+devPkgs=""
+targetHost="$1"
+
+function ssh_target {
+ ssh -i vm-key "$to" "$@"
+}
+
+function install_nre {
+ ./installNRE "$targetHost"
+}
+function read_activation_link {
+ read -rp "Link: " link
+ printf '%s\n' "$link"
+}
+function configure {
+ ssh_target -t 'bash conf-puppet --force'
+ ssh_target 'sed -i "s%\$signerLocation = '".*'"'%\$signerLocation = '"'$signerLocation'"'%" environments/production/manifests/ip.pp'
+}
+function do_reset_vm {
+ read -rp "Please reset your VM and confirm by pressing enter." _
+}
+function execute-bootstrap-user {
+ ssh_target -t 'bash bootstrap-user'
+}
+
+source "$targetHost/config"
+
+eval $(ssh-agent)
+trap "eval \$(ssh-agent -k)" EXIT
+ssh-add vm-key
+function title {
+ printf '\e]0;%s\007' "$1"
+}
+
+function reset_vm {
+ if ! [[ -f reset-vm-key ]]; then
+ ssh-keygen -f reset-vm-key -t ed25519 -N ""
+ fi
+ title 'S0: VM-reset'
+ printf "command=\"bash reset1\" "
+ cat reset-vm-key.pub
+
+ echo "Powering off"
+ ssh_target -t 'ip a show dev enp0s3; sudo poweroff'
+
+ echo "Resetting VM"
+ do_reset_vm
+ echo "Waiting for VM to respond: "
+ while ! ping -c 1 -W 1 "${to#*@}" > /dev/null; do
+ printf "."
+ done
+ printf "\n"
+ while ! ssh_target 'echo Got into VM'; do
+ sleep 5
+ echo "Please open the VM for my key"
+ done
+}
+function update {
+ title 'S1: apt-get; clone'
+ ssh_target -t "sudo apt-get update && DEBIAN_FRONTEND=noninteractive sudo -E apt-get upgrade -o Dpkg::Options::=\"--force-confold\" -y && sudo apt-get install -y git curl $devPkgs"
+ echo "Git init"
+ ssh_target -t '[[ -d .git ]] || git init;'
+ echo "Git push"
+ git bundle create .fullBundle HEAD
+ cat .fullBundle | ssh_target 'cat > .fullBundle'
+ ssh_target 'git fetch .fullBundle HEAD:refs/remotes/origin/master; rm .fullBundle'
+ rm .fullBundle
+ echo "Git update"
+ ssh_target -t 'if ! git rev-parse --verify master &> /dev/null; then git checkout origin/master; else git merge --ff-only origin/master; fi'
+}
+
+function ensure_nre {
+ first=true
+ while true; do
+ if [[ $first == "true" ]]; then
+ first=false
+ else
+ echo "Please provide the NRE archives in 'nre-results/*.tar.gz' or install them manually into the target."
+ read -p "press enter to continue" tmp
+ fi
+ install_nre
+ if ssh_target '[ -d modules/cassiopeia_client/files/profiles ] && [ -d modules/nre/files/config/profiles ]'; then
+ echo cassiopeia-client and nre-conf files found
+ else
+ echo cassiopeia-client or nre-conf files not found
+ continue
+ fi
+ if [[ "$signerLocation" == "self" ]]; then
+ if ssh_target '[ -d modules/cassiopeia_signer/files/profiles ]'; then
+ echo cassiopeia-signer files found
+ else
+ echo cassiopeia-signer files not found
+ continue
+ fi
+ if ssh_target '[ -d modules/cassiopeia/files ]'; then
+ echo external keys with self-signer?? wrong!
+ #continue
+ #TODO make more intelligent... only allow if key-pair exists
+ fi
+ else
+ if ssh_target '[ -d modules/cassiopeia/files ]'; then
+ echo external keys with self-signer found
+ else
+ echo external keys with self-signer not found
+ continue
+ fi
+ fi
+ break
+ done
+}
+function execute-bootstrap-user-auto {
+
+ coproc {
+ ssh_target -t -t 'bash bootstrap-user'
+ }
+ echo "waiting for bootstrap-user..."
+ if [[ $need_sudo == "true" ]]; then
+ read -sp "sudo: " sudo
+ if [[ $sudo != "" ]]; then
+ printf '%s\n' "$sudo" >&${COPROC[1]}
+ fi
+ fi
+ line=""
+ while [[ $line != "We need a first "* ]]; do
+ if ! read -r line <&${COPROC[0]}; then
+ echo "Error, bootstrap terminated early"
+ exit -1
+ fi
+ echo "Line: $line"
+ done
+ bootstrapper_details >&${COPROC[1]}
+
+ while [[ $line != "You should now have been sent an activation link to the email"* ]]; do
+ if ! read -r line <&${COPROC[0]}; then
+ echo "Error, bootstrap terminated early"
+ exit -1
+ fi
+ printf '%s\n' "$line"
+ done
+ read_activation_link >&${COPROC[1]}
+ cat <&${COPROC[0]}
+}
+
+if [[ "$2" == "fresh" ]]; then
+ reset_vm
+fi
+need_sudo=true
+if ssh_target "sudo -n whoami" > /dev/null; then
+ echo "Sudo does not need a password, great!"
+ need_sudo=false
+fi
+
+update
+if [[ "$2" == "update" ]]; then
+ exit 0;
+fi
+configure
+ensure_nre
+title 'S3: puppet-1'
+ssh_target -t 'sudo ./bootstrap'
+title 'S3: puppet-2'
+ssh_target -t 'sudo ./bootstrap'
+
+[[ -f ../../migrate ]] && ( cd ../.. && bash migrate "$targetHost")
+if [[ -f tricks ]]; then
+ cat tricks | ssh_target 'cat > tricks && chmod +x tricks'
+ ssh_target -t 'bash tricks'
+fi
+
+if [[ $signerLocation == "self" ]] && [[ $(ssh_target 'ps -ef | grep tcpseria[l] | wc -l') != "2" ]]; then
+ echo "Error some services weren't started"
+ exit 1
+fi
+
+execute-bootstrap-user
+
+title 'bash'
+eval $(ssh-agent -k)