From e3525e62ac639b57eb19378d50695914885504ec Mon Sep 17 00:00:00 2001 From: kisfenyo Date: Mon, 3 Aug 2026 06:43:58 +0200 Subject: [PATCH] host-install: one data volume, derived from the disk (R-165) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit felhom-agent v0.120.0 merges the two data volumes into one, and step_grows computed two numbers while the install call passed both — so this had to change with the agent or every install would have provisioned a half-sized box. The 80/20 split is summed (226 = 184+42), so a standard appliance keeps exactly the 250 G it had, no longer split by a wall. The size still comes from the physical disk: step_grows already read the thin pool's free space, and the merge only collapsed its two outputs into one. --sysdata-grow is deprecated but still honoured, because the agent folds a hand-passed value in rather than dropping it. --- scripts/CHANGELOG.md | 16 ++++++++++++++++ scripts/felhom-host-install.sh | 29 ++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/scripts/CHANGELOG.md b/scripts/CHANGELOG.md index 8932ef5..b616387 100644 --- a/scripts/CHANGELOG.md +++ b/scripts/CHANGELOG.md @@ -1,3 +1,19 @@ +## host-install: one data volume, derived from the disk (2026-08-03, R-165) + +**Forced by a census, not planned.** `felhom-agent` v0.120.0 merges the appliance's two data volumes +into one (decision D-a). `step_grows` computed **two** numbers and the install call passed both, so +this script had to change with the agent or every install would have provisioned a half-sized box. + +- **`step_grows` computes ONE total.** The old 80/20 docker-vs-sysdata split is summed: `226` where it + was `184 + 42`, `106` where it was `84 + 22`, `46` where it was `34 + 12`. **A standard appliance + keeps exactly the capacity it had — 250 G — it is simply no longer split by a wall.** +- **The size still comes from the physical disk.** `step_grows` already read the thin pool's real free + space (`lvs /dev/pve/data`); the merge only collapsed its two outputs into one. This is what makes + the merge safe to ship: an unflagged install does **not** get the golden's 24 G base. +- **`--sysdata-grow` is DEPRECATED but still honoured.** It is no longer auto-computed (set to 0), and + a hand-passed value still counts because the agent **folds** it into the single volume's grow rather + than dropping it — so an operator reproducing an old command line gets the same total. + ## CI — a Gitea Actions runner, and a red run that reaches a person (2026-08-02, R-168) **No version bump anywhere: nothing in the product repos is compiled, built or deployed by this.** diff --git a/scripts/felhom-host-install.sh b/scripts/felhom-host-install.sh index f7a78b5..3aed387 100644 --- a/scripts/felhom-host-install.sh +++ b/scripts/felhom-host-install.sh @@ -115,8 +115,8 @@ # (default: appliance → island 169.254.253.1:8443; byo → vmbr0 IP:8443) # --no-island appliance only: keep the historical LAN bind instead of the R-50 island # --rootfs-grow N grow OS rootfs by N GiB (default: auto-compute) -# --datavol-grow N grow Docker-data vol by N GiB (default: auto-compute) -# --sysdata-grow N grow user-data vol by N GiB (default: auto-compute) +# --datavol-grow N grow the single data volume by N GiB (default: auto-compute from the pool) +# --sysdata-grow N DEPRECATED (R-165): added to --datavol-grow; there is one volume now # # Guest cap (appliance: optional — protect a SHARED host's other guests; byo: BOTH REQUIRED — # the only noisy-neighbor protection on a host you do not own; needs agent >= v0.52.0): @@ -1772,23 +1772,34 @@ step_token() { #------------------------------------------------------------------------------- step_grows() { log_step "3/8 compute volume grows" - # Golden base: rootfs 32G + Docker-data 16G + user-data 8G (build-golden.sh). + # Golden base since build-golden.sh v3.0.0 (R-165): rootfs 32G + ONE data volume 24G. The separate + # 8G user-data volume was MERGED AWAY — one volume, one free-space figure, no ceiling — so there is + # one number to compute here instead of two. + # + # THE SIZE IS DERIVED FROM THE PHYSICAL DISK, which is what makes the merge safe to ship: an + # unflagged install does NOT get the golden's 24G, it gets a share of the thin pool's real free + # space. (Before R-165 this same block already did the deriving; the merge only collapsed its + # 80/20 docker-vs-sysdata split into a single total.) if [[ -z "$ROOTFS_GROW$DATAVOL_GROW$SYSDATA_GROW" ]]; then local free_gib free_gib=$(lvs --noheadings --units g -o lv_size,data_percent /dev/pve/data 2>/dev/null | awk '{gsub(/[^0-9.]/,"",$1); used=$2; print int($1*(100-used)/100)}' 2>/dev/null || echo 0) - # Reserve headroom; split the rest ~ docker 80% / sysdata 20%; rootfs stays golden. + # Reserve headroom; the totals below are the pre-merge pair SUMMED, so an appliance gets the + # same capacity it did before — it is simply no longer split by a wall. ROOTFS_GROW=0 if [[ "${free_gib:-0}" -ge 300 ]]; then - DATAVOL_GROW=184; SYSDATA_GROW=42 # reproduces the standard 200G/50G appliance + DATAVOL_GROW=226 # 184+42 -> the standard 250G appliance (was 200G+50G) elif [[ "${free_gib:-0}" -ge 150 ]]; then - DATAVOL_GROW=84; SYSDATA_GROW=22 + DATAVOL_GROW=106 # 84+22 else - DATAVOL_GROW=34; SYSDATA_GROW=12 # minimal floors + DATAVOL_GROW=46 # 34+12 — minimal floor fi - log_info " auto-computed from ~${free_gib} GiB free" + SYSDATA_GROW=0 + log_info " auto-computed from ~${free_gib} GiB free (ONE volume since R-165)" fi ROOTFS_GROW="${ROOTFS_GROW:-0}"; DATAVOL_GROW="${DATAVOL_GROW:-0}"; SYSDATA_GROW="${SYSDATA_GROW:-0}" - log_info " grows: rootfs +${ROOTFS_GROW}G (->$((32+ROOTFS_GROW))G), docker +${DATAVOL_GROW}G (->$((16+DATAVOL_GROW))G), sys_drive +${SYSDATA_GROW}G (->$((8+SYSDATA_GROW))G)" + # A hand-passed --sysdata-grow is still ACCEPTED and still counts: the agent folds it into the one + # volume (bringup.go 4b), so an operator reproducing an old command line gets the same total. + log_info " grows: rootfs +${ROOTFS_GROW}G (->$((32+ROOTFS_GROW))G), data +$((DATAVOL_GROW+SYSDATA_GROW))G (->$((24+DATAVOL_GROW+SYSDATA_GROW))G, ONE volume)" _state_mark grows }