diff --git a/scripts/CHANGELOG.md b/scripts/CHANGELOG.md index 7eb3954..37dc25f 100644 --- a/scripts/CHANGELOG.md +++ b/scripts/CHANGELOG.md @@ -1,5 +1,20 @@ # Felhom scripts — Changelog +## felhom-host-install.sh v1.8.0 — install the guarded-mkfs wrapper (Impl-1 Part B) (2026-07-01) + +Companion to felhom-agent v0.54.0 (format-safety foundation). During agent install, fetch + install the +guarded-mkfs wrapper so the agent's format path is safe on any box. + +- **New step in `step_agent_install`:** fetch `configs/felhom-mkfs-guarded.sh` from Gitea, `bash -n` + validate, `install -m0755 -o root -g root` → `/usr/local/sbin/felhom-mkfs-guarded`. Installed BEFORE + the sudoers (which now allowlists ONLY the wrapper, not raw `mkfs.*`), so the ordering is gap-free. +- The agent v0.54.0 sudoers (fetched by the same step) drops the raw `mkfs.ext4 -F /dev/* / mkfs.xfs -f + /dev/*` allowlist and permits only `felhom-mkfs-guarded /dev/* *`, plus read-only `pvs`/`zpool` for + the agent's unclaimed-disk guard. No other host-install change. +- `bash -n` + `shellcheck` clean (0 new warnings). Live-validated on felhom-pve (agent v0.54.0 deploy): + wrapper refuses the OS disk + an LVM-PV partition, raw mkfs is sudo-denied, an unclaimed throwaway + disk formats; the agent guard's sudo reads (pvs/lsblk/zpool) all work as the felhom-agent user. + ## felhom-host-install.sh v1.7.0 — 3b-fix: `Datastore.Audit` box-wide (restore drive visibility) (2026-07-01) Fixes a regression the v1.6.0 pool-scoped ACL introduced: `Datastore.Audit` was placed in the diff --git a/scripts/felhom-host-install.sh b/scripts/felhom-host-install.sh index 69dc7ed..6e3dad9 100644 --- a/scripts/felhom-host-install.sh +++ b/scripts/felhom-host-install.sh @@ -1,6 +1,6 @@ #!/bin/bash #=============================================================================== -# felhom-host-install.sh v1.7.0 +# felhom-host-install.sh v1.8.0 # Day-0 host-bootstrap for a Felhom Proxmox host (operator-deploy model). # # Run by the operator on a FRESHLY-PVE-INSTALLED box (after a manual PVE install @@ -104,7 +104,7 @@ set -euo pipefail -SCRIPT_VERSION="1.7.0" +SCRIPT_VERSION="1.8.0" #------------------------------------------------------------------------------- # Logging (mirrors felhom-controller/scripts/docker-setup.sh) @@ -1208,6 +1208,19 @@ step_agent_install() { fi fi + # Guarded-mkfs wrapper (Impl-1 Part B) — the ONLY mkfs path the sudoers permits. Install it BEFORE + # the sudoers (which allowlists it), 0755 root:root under /usr/local/sbin. bash -n before install. + if $DRY_RUN; then + log_dry "fetch configs/felhom-mkfs-guarded.sh ; bash -n ; install 0755 -> /usr/local/sbin/felhom-mkfs-guarded" + else + local wtmp; wtmp=$(mktemp -t felhom-mkfs.XXXXXX) + fetch_raw "configs/felhom-mkfs-guarded.sh" "$wtmp" + bash -n "$wtmp" || { rm -f "$wtmp"; die "fetched felhom-mkfs-guarded.sh failed bash -n — refusing to install"; } + install -m 0755 -o root -g root "$wtmp" /usr/local/sbin/felhom-mkfs-guarded + rm -f "$wtmp" + log_success " installed /usr/local/sbin/felhom-mkfs-guarded (0755, the guarded mkfs path)" + fi + # Sudoers — fetch the canonical file, validate with visudo -cf BEFORE installing (0440 root:root). if $DRY_RUN; then log_dry "fetch configs/felhom-agent.sudoers ; visudo -cf ; install 0440 -> $AGENT_SUDOERS"