feat(scripts/liminix): add a basic liminix rebuild
This script requires manual efforts on the operator end not to fuck up too hard. This adds min-copy-closure and min-garbage-collect to the development shell. Signed-off-by: Ryan Lahfa <ryan@dgnum.eu>
This commit is contained in:
parent
0cbaf39aa5
commit
385dd57cad
2 changed files with 56 additions and 0 deletions
|
@ -116,6 +116,10 @@ in
|
|||
pkgs.freeradius
|
||||
pkgs.picocom # for serial access
|
||||
|
||||
# Daemon-less copy closure for Liminix systems.
|
||||
(pkgs.callPackage (sources.liminix + "/pkgs/min-copy-closure") { nix = pkgs.lix; })
|
||||
# Daemon-less garbage collection for Liminix systems.
|
||||
(pkgs.callPackage (sources.liminix + "/pkgs/min-collect-garbage") { nix = pkgs.lix; })
|
||||
(pkgs.callPackage ./lib/colmena {
|
||||
colmena = pkgs.callPackage "${sources.colmena}/package.nix" { };
|
||||
})
|
||||
|
|
52
scripts/liminix-rebuild.sh
Executable file
52
scripts/liminix-rebuild.sh
Executable file
|
@ -0,0 +1,52 @@
|
|||
#!/usr/bin/env bash
|
||||
# TODO: support automatic levitation when the rebuild counts does not fit in the target.
|
||||
# TODO: support preflight checks where we detect the environment we are booted in (this requires the levitation to write a special file).
|
||||
# TODO: use colmena to know the target host and focus on the node name.
|
||||
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
|
||||
;;
|
||||
"--live")
|
||||
echo "Root prefix changed from $root_prefix to /mnt"
|
||||
root_prefix="/mnt"
|
||||
;;
|
||||
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
|
Loading…
Reference in a new issue