forked from DGNum/infrastructure
Ryan Lahfa
ed285ba79d
Now that we possess the levitation technology, it's necessary to support root prefixes for rebuild otherwise we will just overwrite our RAM disk configuration. Also, to avoid any issue, let's fail hard and avoid rebooting while being in levitation for nothing. Signed-off-by: Ryan Lahfa <ryan@dgnum.eu>
45 lines
949 B
Bash
Executable file
45 lines
949 B
Bash
Executable file
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
ssh_command=${SSH_COMMAND-ssh}
|
|
root_prefix=${ROOT_PREFIX-/}
|
|
|
|
reboot="reboot"
|
|
|
|
case "$1" in
|
|
"--no-reboot")
|
|
unset reboot
|
|
shift
|
|
;;
|
|
"--fast")
|
|
reboot="soft"
|
|
shift
|
|
;;
|
|
esac
|
|
|
|
target_host=$1
|
|
shift
|
|
|
|
if [ -z "$target_host" ] ; then
|
|
echo Usage: liminix-rebuild \[--no-reboot\] target-host params
|
|
exit 1
|
|
fi
|
|
|
|
if toplevel="$(nom-build $(colmena eval -E "{ nodes, ... }: nodes.$@.config.system.outputs.systemConfiguration" --instantiate))"; then
|
|
echo systemConfiguration $toplevel aimed at $root_prefix
|
|
sleep 3
|
|
min-copy-closure --root "$root_prefix" $target_host $toplevel
|
|
$ssh_command $target_host "$root_prefix/$toplevel/bin/install" "$root_prefix"
|
|
case "$reboot" in
|
|
reboot)
|
|
$ssh_command $target_host "sync; source /etc/profile; reboot"
|
|
;;
|
|
soft)
|
|
$ssh_command $target_host $toplevel/bin/restart-services
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
else
|
|
echo Rebuild failed
|
|
fi
|