Skip to content

Unattended install

Stage 1 reads its answers from install.yaml; with a node.yaml beside it, stage 2 installs by itself on the first boot. The only manual step left is removing the install medium and pressing enter on the Installed screen: stage 1 does not reboot by itself unless stratum.install.reboot=yes is on the kernel command line (see the countdown).

In this order:

  1. The kernel argument stratum.install=: an http:// or https:// URL, or a path on the live system. At the boot menu, press e, append it to the linux line, and boot with ctrl+x. A URL that does not answer yet (no network so far) is retried for up to 90 seconds.
  2. A partition labelled STRATUM with install.yaml at its root, for example on a second USB stick (mkfs.vfat -n STRATUM /dev/sdY1).

node.yaml is read from the same place: the same directory of the same server (give each node a directory of its own), or the root of the same partition.

install.yaml holds the root password hash and the wipe confirmation, and a plain http:// fetch can be altered on the way. Pin the file’s SHA-256 with stratum.install.sha256=<hex> on the kernel line, and node.yaml’s with stratum.install.node.sha256=<hex>. A file that does not match is not used and the install is interactive.

disks:
- /dev/disk/by-id/nvme-EXAMPLE_SSD_1TB_SN0001
- /dev/disk/by-id/nvme-EXAMPLE_SSD_1TB_SN0002 # a second disk makes a mirror
os_disk_layout: compute-tail # or whole-disk
stratum_size_gib: 211 # compute-tail only
nic:
name: enp1s0
mode: static # or dhcp
address: 192.0.2.10/24
gateway: 192.0.2.1
dns: [192.0.2.1]
hostname: node-1.example.com
root:
password_hash: "$y$j9T$..." # mkpasswd -m yescrypt
ssh_authorized_keys:
- ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... admin@workstation
wipe_confirm: # OS disks that hold data and may be wiped
- /dev/disk/by-id/nvme-EXAMPLE_SSD_1TB_SN0001
- /dev/disk/by-id/nvme-EXAMPLE_SSD_1TB_SN0002
wipe_other_disks: true # also wipe every other disk that holds data
kernel_args:
- console=ttyS0,115200
Key Rules
kind single-node (default), new-cluster or join-cluster; see Unattended cluster install.
disks One or two /dev/disk/by-id/ paths, whole disks. Required unless disk_select.
disk_select Instead of disks, for one file on many machines: count (1 or 2), min_size_gib, max_size_gib, type (nvme, ssd, hdd, any). It picks from blank disks only.
os_disk_layout compute-tail (default) or whole-disk.
stratum_size_gib At least 108; default 191, or what the smaller disk takes with its 20 GiB tail. Not with whole-disk.
nic name (or match: mac, driver, link) and mode required; address (CIDR) required for static; gateway and up to 3 dns optional.
hostname Lower case; letters, digits, inner hyphens, dots between labels, at most 64 characters. May hold {mac}, {mac6}, {mac4} and {nic}, taken from the chosen NIC.
root password_hash (a crypt hash, never a plain password), ssh_authorized_keys, or both.
wipe_confirm Every OS disk that holds data must be listed, or the install is refused. Not with disk_select.
wipe_extra Disks to wipe but not use, such as the other half of an old mirror.
wipe_other_disks true wipes every other disk that holds data and is not the install medium, mounted, removable or USB, read-only, a multipath path or without a hardware ID. The key is the confirmation. Without it only the OS disks are wiped.
kernel_args Extra kernel arguments, one per entry.

The file is parsed strictly: an unknown key is an error. Check it from the live system’s shell first:

Terminal window
stratum-installer stage1 plan --config /path/to/install.yaml
  • A valid file the machine can take shows its plan and installs after a 10-second countdown. Any key stops the countdown and opens the interactive installer with the answers filled in; every disk holding data must then be confirmed by name on the review screen.
  • stratum.install.auto=0 on the kernel command line turns the countdown off.
  • stratum.install.reboot=yes (or =<seconds>, 1 to 3600) makes a finished install reboot by itself after a countdown that any key but enter stops. Use it only when the machine does not boot the install medium first.
  • A file that does not validate, or that the machine refuses, is never installed: its answers are filled in and the problems are shown.
  • With a node.yaml beside it, the review asks whether it goes with the install. A countdown that runs out always takes it.

On the first boot, the install service takes node.yaml once:

The file is Then
Valid The install starts at once. The console shows each step; the code and URL are still shown, so the install can be followed with stratum-installer watch or in the browser.
Invalid Nothing starts. The console lists the errors by key, and the installer waits as usual: fix the draft in the browser or with stratum-installer apply -f node.yaml.
Blocked (the release images did not load) It waits and starts by itself once they load.

The file is removed from the node once taken, and is never installed twice. node.yaml can hold credentials: keep the medium’s copy safe.

The live system’s shell (ctrl+c in the installer) has the same engine:

Terminal window
stratum-installer stage1 discover # disks and NICs, as JSON
stratum-installer stage1 plan --config install.yaml
stratum-install --config install.yaml --yes # install with no questions and no countdown

stratum-installer stage1 export prints an install.yaml from the install record a node keeps, so a machine can be reinstalled later from files. For a cluster, see Rebuild the cluster from files.