aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/remote-install-with-disko
blob: b0c20d282aebe1ee6cc77ffe5f1d835c87c3ab1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/env nix
#!nix shell 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/snapshot/nix-master.tar"
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} nix run github:nix-community/disko/latest -- \
		--mode disko \
		--flake ${FLAKE}#${HOSTNAME}

	ssh root@${TARGET} nixos-install --flake ${FLAKE}#${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