diff options
Diffstat (limited to 'mkbuild.sh')
-rwxr-xr-x | mkbuild.sh | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/mkbuild.sh b/mkbuild.sh new file mode 100755 index 0000000..4820cb1 --- /dev/null +++ b/mkbuild.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +# +# made by Dennis Eriksen <dnns.no> in 2019. Gitified in 2020. + +# Exit on error. Append "|| true" if you expect an error. +set -o errexit +# Exit on error inside any functions or subshells. +set -o errtrace +# Do not allow use of undefined vars. Use ${VAR:-} to use an undefined VAR +set -o nounset +# Catch the error in case mysqldump fails (but gzip succeeds) in `mysqldump |gzip` +set -o pipefail + +function die { + echo $@ + exit 1 +} + +function main { + + # Check if $1 exists + [[ "${1:-}" == "" ]] && die "You need to set the name of the machine you want to rebuild." + local NAME=${1} + + # Check if mkosi-template exists, and cd into it if it does + [[ -d /srv/mkosi/${NAME} ]] || die "/srv/mkosi/${NAME} does not exist" + cd /srv/mkosi/"${NAME}" + mkosi -o "/var/lib/machines/${NAME}.new" + + # Stop machine if it is running + if machinectl status "${NAME}" >/dev/null; then + machinectl stop "${NAME}" + fi + + cd /var/lib/machines + if [[ -e "${NAME}" ]]; then + mv "${NAME}" .backup/ + rm -f "${NAME}.nspawn" + fi + mv "${NAME}.new" "${NAME}" + mv "${NAME}.new.nspawn" "${NAME}.nspawn" + echo "Done building." + echo "" + sleep 1 + echo "Starting" + machinectl start "${NAME}" + sleep 2 + machinectl + + + if [[ -e ".backup/${NAME}" ]]; then + echo "" + echo "Now zipping up the old machine, for backup" + cd .backup + tar c "${NAME}" | xz -0 - > "/var/lib/machines/.backup/${NAME}.tar.xz.$(date +%Y%m%d%H%M%S)" + rm -r "${NAME}" + cd .. + fi + +} + +main $@ |