Archived
Give linode-* hosts a real Disko config, simplify auto-install.sh
Linode provisions and sizes /dev/sda (root) and /dev/sdb (swap) itself as whole, unpartitioned block devices before the OS ever boots. modules/disko/linode.nix declares them with destroy = false (skips Disko's wipe stage for these disks entirely) and a bare filesystem/swap content type matching that existing layout, so re-running it against an already-provisioned disk only mkfs/mkswaps if blkid shows it isn't formatted yet -- never repartitions or destroys data. With every host reachable through the installer menu now carrying a Disko config, auto-install.sh no longer needs to probe the flake and branch between `disko --mode destroy,format,mount` and a bind-mount fallback -- it just always runs Disko. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01La55Nsss8jZ7ZuzUV9mfot
This commit is contained in:
+19
-5
@@ -126,10 +126,24 @@ next, where you can `scp` a key in after boot, same as before this migration.
|
||||
## Storage
|
||||
|
||||
Disk partitioning is handled by Disko — the installer has no hardcoded
|
||||
`parted`/`mkfs`/`mkswap`/`mount` commands. Each host defines its own layout
|
||||
via `disko.devices`; a host without one is installed in place via bind-mount
|
||||
(this is how every LXC container target works, since they have no raw block
|
||||
device to partition).
|
||||
`parted`/`mkfs`/`mkswap`/`mount` commands, and `auto-install.sh` runs
|
||||
`disko --mode destroy,format,mount` unconditionally, no branching on whether
|
||||
the target has a Disko config. Every host reachable through this menu has
|
||||
one:
|
||||
|
||||
- `proxmox-*` (`modules/disko/proxmox.nix`): a real GPT partition table
|
||||
(ESP + swap + root) on `/dev/sda`.
|
||||
- `linode-*` (`modules/disko/linode.nix`): Linode provisions and sizes
|
||||
`/dev/sda`/`/dev/sdb` itself as whole, unpartitioned block devices before
|
||||
the OS ever boots, so this declares them with `destroy = false` (skips
|
||||
disko's wipe stage for these disks entirely — see the option's own docs)
|
||||
and a bare `filesystem`/`swap` content type with no partition table, and
|
||||
the format step it does run only calls `mkfs`/`mkswap` if `blkid` shows
|
||||
the device isn't already formatted — a re-run against an
|
||||
already-provisioned Linode disk is a no-op, not a wipe.
|
||||
|
||||
`lxc-*` is the only category without one — it's excluded from this menu
|
||||
entirely (see "LXC hosts" above), so it never reaches this code path.
|
||||
|
||||
## Installer process
|
||||
|
||||
@@ -138,7 +152,7 @@ device to partition).
|
||||
1. Queries `nixosConfigurations` from this flake over the network (`git+https://<lanDomain>/beatzaplenty/nixos.git`) — this happens at *install* time, not build time, so a generic installer image always sees whatever hosts are currently committed, without needing a rebuild.
|
||||
2. Presents them as a menu; confirms the choice.
|
||||
3. Skips the `nix-cache` substituter when installing a `nix-cache` host itself (consistent with that host's own runtime config).
|
||||
4. Runs `disko --mode destroy,format,mount` if the target has a Disko config, otherwise bind-mounts `/` onto `/mnt`.
|
||||
4. Runs `disko --mode destroy,format,mount` (see "Storage" above — every host reachable through this menu has a Disko config, so this is unconditional).
|
||||
5. Installs the target's SSH host key from `/etc/host-keys` or `/root/host-keys` (see "Host keys" above).
|
||||
6. Runs `nixos-install --flake <url>#<choice> --no-root-password`.
|
||||
7. Cleans up and reboots.
|
||||
|
||||
Reference in New Issue
Block a user