blob: c86f005925e532c69071f8fb075e3de1f3c10f49 (
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
64
65
66
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
|