#!/bin/sh # # Copyright (c) 2019-2024 Mischa Peters # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. # SSHOPTIONS='-p 31415 -l mischa -i /home/mischa/.ssh/id_ed25519' BINPATH='/home/mischa/bin' CONF_FILE="${PWD}/_deploy.conf" if [[ -f "${CONF_FILE}" ]]; then . "${CONF_FILE}" else echo "unable to find _deploy.conf" exit 1 fi if [[ -z ${1} ]]; then echo "usage: ${0##*/} vmXX" exit 1 fi if [[ ! -f "${VMS}/${1}.txt" ]]; then echo "unable to find ${VMS}/${1}.txt" if [[ -f "${VMS}/${1}.txt.free" ]]; then echo "found ${VMS}/${1}.txt.free" mv ${VMS}/${1}.txt.free ${VMS}/${1}.txt else exit 1 fi else chown mischa ${VMS}/${1}.txt chmod 600 ${VMS}/${1}.txt fi if vmctl show ${1} | grep running >/dev/null 2>&1; then echo "ERR: VM ${1} is already running..." exit 1 fi INSTANCE=$(awk -F'=' '/^instance/ {print $2}' ${VMS}/${1}.txt | tr -d '"') if [[ -z ${INSTANCE} ]]; then INSTANCE=${1} fi if [[ "${SERVER}" == server* ]]; then HOST="s${SERVER#server}" elif [[ "${SERVER}" == mega* ]]; then HOST="m${SERVER#mega}" fi if [[ "${SERVER}" == server* ]] || [[ "${SERVER}" == mega* ]]; then openrsync -va --del -e "ssh ${SSHOPTIONS}" /home/mischa/vms/ mischa@wm1.obsda.ms:vms/${HOST}/ ssh ${SSHOPTIONS} wm1.obsda.ms "doas ./create-user.pl ${HOST}${1}" openrsync -va --del -e "ssh ${SSHOPTIONS}" /home/mischa/vms/ mischa@rx.high5.nl:vms/${HOST}/ fi ${BINPATH}/deploy.pl sleep 5 if [[ -z ${DHCPD} ]]; then rcctl restart dhcpd fi vmctl reload sleep 5 mkfifo -m 600 /tmp/pipe_${1} install -g mischa -m 600 -o mischa /dev/null ${LOGS}/${1}.log echo -n "autoinstall(8) ${INSTANCE}, log output ${LOGS}/${1}.log... " vmctl start -c ${INSTANCE} < /tmp/pipe_${1} | while read line; do printf '%s\n' "$line" >&2 case $line in *rebooting...*) vmctl stop -f ${INSTANCE} break ;; #Response file location\?*) #vmctl stop -f ${1} #rm -rf /tmp/pipe_${1} #rm -rf /var/vmm/${1}.qcow2 #pushover.pl -m "${SERVER} ${1} failed deploy" -t "OpenBSD Amsterdam" -p 1 #exit 1 #;; esac done > /tmp/pipe_${1} 2> ${LOGS}/${1}.log echo "completed" ${BINPATH}/deploy.pl sleep 5 if [[ -z ${DHCPD} ]]; then rcctl restart dhcpd fi vmctl reload sleep 5 echo "booting ${INSTANCE}" vmctl start -c ${INSTANCE} < /tmp/pipe_${1} | while read line; do printf '%s\n' "$line" >&2 case $line in *tty00*) break ;; esac done > /tmp/pipe_${1} 2>> ${LOGS}/${1}.log rm -rf /tmp/pipe_${1} echo echo "SUCCES! - deployed ${INSTANCE}" ${BINPATH}/notify.pl deployed ${1} "${2}" ${BINPATH}/pushover.pl -m "${SERVER} ${INSTANCE} deployed" -t "OpenBSD Amsterdam"