aboutsummaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/remote-install-with-disko67
1 files changed, 67 insertions, 0 deletions
diff --git a/scripts/remote-install-with-disko b/scripts/remote-install-with-disko
new file mode 100755
index 0000000..c86f005
--- /dev/null
+++ b/scripts/remote-install-with-disko
@@ -0,0 +1,67 @@
+#!/usr/bin/env nix
+#!nix shell nixpkgs#rsync nixpkgs#zsh --command zsh
+
+setopt ERR_EXIT PIPE_FAIL
+
+# load module to parse command line arguments
+zmodload zsh/zutil
+
+# parse any possible additional drive declarations
+zparseopts -D -E -A opts -- h x
+
+# enable XTRACE shell option for full debugging output of scripts
+if (( ${+opts[-x]} )); then
+ set -x
+fi
+
+DIR="${0:h}"
+FLAKE="https://arrakis.bitgnome.net/nipsy/git/nix/"
+HOSTNAME="${1}"
+TARGET="${2}"
+
+if [[ -z "${TARGET}" ]] || (( ${+opts[-h]} )); then
+ <<EOF >&2
+usage: ${0:t} [ -h ] [ -x ] hostname target
+
+ -h this message
+ -x enable shell debug
+ hostname hostname of nixosConfigurations defined host in our flake
+ target PXE booted, SSH root accessible, installation target
+EOF
+ exit 1
+fi
+
+<<EOF
+
+++++++++ The disk(s) on ${TARGET} are about to get wiped!
+WARNING! NixOS will be re-installed as ${HOSTNAME}.
+++++++++ This is a destructive operation!!!
+
+EOF
+
+read -q '?Are you sure? [y/N] '
+echo
+
+if [[ "${REPLY}" == "y" ]]; then
+
+ ssh root@${TARGET} rm -rf /etc/nixos
+ ssh root@${TARGET} git clone ${FLAKE} /etc/nixos
+
+ ssh root@${TARGET} nix run github:nix-community/disko -- \
+ --mode destroy,format,mount \
+ --yes-wipe-all-disks \
+ /etc/nixos/hosts/${HOSTNAME}/disks.nix
+
+ ssh root@${TARGET} nixos-install --flake /etc/nixos#${HOSTNAME}
+
+ if [[ "${?}" -eq 0 ]]; then
+ echo 'Unmounting file systems...' >&2
+ ssh root@${TARGET} mount | grep -v zfs | awk '$3 ~ /^\/mnt\// {print $3}' | xargs -i{} ssh root@${TARGET} umount -lf {}
+ echo 'Unmounting ZFS file systems...' >&2
+ while ! ssh root@${TARGET} umount -t zfs -a; do echo 'attempting to umount all ZFS file systems' >&2; sleep 1; done
+ echo 'Exporting zpool...' >&2
+ while ! ssh root@${TARGET} zpool export -a; do echo 'attempting to export all zpools' >&2; sleep 1; done
+ echo 'Rebooting!' >&2
+ ssh root@${TARGET} reboot
+ fi
+fi