diff --git a/script/build-vm.sh b/script/build-vm.sh index 455c867..a4d8afd 100755 --- a/script/build-vm.sh +++ b/script/build-vm.sh @@ -13,47 +13,89 @@ echo " image: ${qcow2}" sleep 5 -echo "[+] updating NixOS config" -cd /etc/nixos -doas git pull --rebase local master +build_nixos_vm () { -if [[ -d "${build_dir}" ]] -then - echo "[+] removing ${build_dir}" - sleep 2 - rm -r "${build_dir}" -fi + echo "[+] updating NixOS config" + cd /etc/nixos + doas git pull --rebase local master -mkdir "${build_dir}" -cd "${build_dir}" -nixos-rebuild build-vm + if [[ -d "${build_dir}" ]] + then + echo "[+] removing ${build_dir}" + sleep 2 + rm -r "${build_dir}" + fi -echo "[+] Spinning up VM; kill it when you see the line" -echo " 'Virtualisation disk image created.'" -"${build_dir}/result/bin/run-$(hostname -s)-vm" -doas qemu-img resize "${qcow2}" 256G + mkdir "${build_dir}" + cd "${build_dir}" + nixos-rebuild build-vm -doas modprobe nbd max_part=8 + echo "[+] Spinning up VM; kill it when you see the line" + echo " 'Virtualisation disk image created.'" + "${build_dir}/result/bin/run-$(hostname -s)-vm" + doas qemu-img resize "${qcow2}" 256G -echo "[+] connecting to network block driver" -echo " note: on failure, you may need to manually run" -echo " doas qemu-nbd --disconnect /dev/nbd0" -doas qemu-nbd --connect=/dev/nbd0 ${qcow2} + doas modprobe nbd max_part=8 -if [[ -d "${mount_point}" ]] -then - echo "[+] removing ${mount_point}" - sleep 2 - rm -r "${mount_point}" -fi + echo "[+] connecting to network block driver" + echo " note: on failure, you may need to manually run" + echo " doas qemu-nbd --disconnect /dev/nbd0" + doas qemu-nbd --connect=/dev/nbd0 ${qcow2} -mkdir -p "${mount_point}" -doas mount /dev/nbd0 "${mount_point}" + if [[ -d "${mount_point}" ]] + then + echo "[+] removing ${mount_point}" + sleep 2 + rm -r "${mount_point}" + fi -rsync --progress -auvz "${HOME}/" "${mount_point}/home/kyle/" + mkdir -p "${mount_point}" + doas mount /dev/nbd0 "${mount_point}" -echo "[+] finished, cleaning up" -doas unmount "${mount_point}" -doas qemu-nbd --disconnect /dev/nbd0 -doas rmdir "${mount_point}" -doas rm -r "${build_dir}" + rsync --progress -auvz "${HOME}/" "${mount_point}/home/kyle/" + + echo "[+] finished, cleaning up" + doas umount "${mount_point}" + doas qemu-nbd --disconnect /dev/nbd0 + doas rmdir "${mount_point}" + doas rm -r "${build_dir}" +} + +cleanup () { + if [[ -d "${build_dir}" ]] + then + echo "[+] removing ${build_dir}" + sleep 2 + rm -r "${build_dir}" + fi + + if [[ ! -z "$(mount | grep /dev/nbd0)" ]] + then + echo "[+] unmounting network block device" + doas umount /dev/nbd0 + fi + + echo "[+] disconnecting network block device" + echo " it's okay if this fails" + doas qemu-nbd --disconnect /dev/nbd0 + + if [[ -d "${mount_point}" ]] + then + echo "[+] removing ${mount_point}" + sleep 2 + rm -r "${mount_point}" + fi +} + +case "${1:-build}" in + build) + build_nixos_vm + ;; + cleanup) + cleanup + ;; + *) + echo "[!] Valid commands are build, cleanup" + exit 1 + ;; +esac