feat(ops/nixos): Add generic rebuild-system script
This adds a first crack at one idea for a generic, non-user-specific rebuild-system script to ops.nixos.rebuild-system. The idea here is that we enumerate all the nixos systems stored in the monorepo (similarly to what we do for ci-builds right now) then search through them by hostname to find the one matching the hostname of the current system, which is an attempt at a more generic version of tazjin's rebuilder script which does the same thing but with an explicit case block. As a caveat, it feels like there's a slight possibility that this way of finding systems is going to get slow to evaluate - on my system it feels fine but if it grows out of hand it's probably feasible to just bake this into the built script as a dynamically generated case statement. Change-Id: I2e4c5401913b6f4d936ab48ba2f95f96e0e78eb4 Reviewed-on: https://cl.tvl.fyi/c/depot/+/894 Tested-by: BuildkiteCI Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
parent
8bcdff263c
commit
a73714a93c
7 changed files with 63 additions and 21 deletions
|
|
@ -6,8 +6,40 @@
|
|||
#
|
||||
# TODO(tazjin): Find a more elegant solution for the whole module
|
||||
# situation.
|
||||
{ ... }@args:
|
||||
{ lib, pkgs, depot, ... }@args:
|
||||
|
||||
{
|
||||
let
|
||||
inherit (lib) findFirst isAttrs;
|
||||
in
|
||||
|
||||
rec {
|
||||
whitby = import ./whitby/default.nix args;
|
||||
|
||||
# System installation
|
||||
|
||||
allSystems = import ./all-systems.nix args;
|
||||
|
||||
nixosFor = configuration: depot.third_party.nixos {
|
||||
inherit configuration;
|
||||
};
|
||||
|
||||
findSystem = hostname:
|
||||
(findFirst
|
||||
(system: system.config.networking.hostName == hostname)
|
||||
(throw "${hostname} is not a known NixOS host")
|
||||
(map nixosFor allSystems));
|
||||
|
||||
rebuild-system = pkgs.writeShellScriptBin "rebuild-system" ''
|
||||
set -ue
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
echo "Oh no! Only root is allowed to rebuild the system!" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Rebuilding NixOS for $HOSTNAME"
|
||||
system=$(nix-build -E "((import ${toString depot.depotPath} {}).ops.nixos.findSystem \"$HOSTNAME\").system" --no-out-link --show-trace)
|
||||
|
||||
nix-env -p /nix/var/nix/profiles/system --set $system
|
||||
$system/bin/switch-to-configuration switch
|
||||
'';
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue