05918ec2ce
The ISO target had drifted from nixpkgs and no longer evaluated: `iso-image.nix` now defines `image.baseName` itself, which conflicts with ours, so force it. Drop the `boot.initrd.systemd.enable = false` override from the `asISO` build target. The missing `/dev/root` it worked around is no longer an issue, and scripted initrd is deprecated for removal in 26.11. Replace the wpa_supplicant stanza, which upstream's `installation-device.nix` no longer carries, with NetworkManager. Keep it out of `multi-user.target` so nothing network-related starts until asked; NetworkManager enables wpa_supplicant as its backend, which is D-Bus activated on demand. Pick up three more bits from that profile: the installer `variant_id`, the pstore drop-in that stops an install evacuating the target's persistent entries, and the mdadm `PROGRAM` stub that silences the unset-mail warning. Built and booted as an ISO to confirm. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
45 lines
2.3 KiB
Markdown
45 lines
2.3 KiB
Markdown
# installer
|
|
|
|
The custom NixOS installer image used to bootstrap new boxes.
|
|
|
|
- **Source:** [`nixos/installer.nix`](../../nixos/installer.nix)
|
|
- **Host:** — (a build target, not a deployed box)
|
|
|
|
## Role
|
|
|
|
- Defines `nixos.systems.installer`, a minimal server system rendered as a bootable ISO via
|
|
`config.my.buildAs.iso` (`my.asISO`); the same base can also be built as a kexec or netboot
|
|
tree.
|
|
- Build it with the devshell commands: `build-iso installer` (or `build-kexec installer` /
|
|
`build-netboot installer`). The `update-installer` command force-tags `installer` to
|
|
trigger a release rebuild in CI.
|
|
|
|
## Image contents
|
|
|
|
- Broad hardware support (`my.build.allHardware` pulls in the nixpkgs all-hardware profile);
|
|
EFI- and USB-bootable, zstd-compressed squashfs. Volume ID
|
|
`jackos-<release>-<arch>`, menu label "/dev/player0 Installer", image base name
|
|
`jackos-installer`.
|
|
- Root SSH with the deploy key authorized (`PermitRootLogin prohibit-password`); a random
|
|
`installer-<hex>` hostname is set at boot.
|
|
- `INSTALL_ROOT=/mnt` in the session environment, plus a `show-hw-config` alias wrapping
|
|
`nixos-generate-config --show-hardware-config --root $INSTALL_ROOT`.
|
|
- NixOS documentation enabled, NetworkManager available but not started at boot (run
|
|
`systemctl start NetworkManager`, then `nmtui`), GC and memory-overcommit tuning for low-memory
|
|
targets, LVM thin and NFS support.
|
|
- Identifies itself as `VARIANT_ID=installer` in `/etc/os-release`, and leaves the target's
|
|
persistent pstore entries alone (`Unlink=no`) so an install doesn't evacuate them.
|
|
- No regular user (`my.user.enable = false`), no tmpfs-root management, no NAT, and not a
|
|
deploy target (`my.deploy.enable = false`).
|
|
|
|
## Installing a box
|
|
|
|
The devshell's installer commands ([`devshell/install.nix`](../../devshell/install.nix)) drive
|
|
an install over SSH against a booted installer reachable at `$INSTALLER`:
|
|
|
|
- `installer-shell` — get a shell on the installer.
|
|
- `do-install <system>` — builds the system's toplevel, `nix copy`s the closure to the
|
|
installer's `$INSTALL_ROOT` remote store, sets the system profile, touches `/etc/NIXOS`,
|
|
and runs `switch-to-configuration boot` with `NIXOS_INSTALL_BOOTLOADER=1` (skip the
|
|
bootloader with `--no-bootloader`, skip substitution with `--no-substitute`).
|